表"SQL Server中的继承"

MrE*_*ndo 13 sql-server database-design

我目前正在查看我们的联系人管理数据库的重组,我希望听到人们关于解决许多具有共享属性的联系类型问题的意见.

基本上我们有6种联系方式,包括Person,Company和Position @ Company.

在当前结构中,所有这些都具有地址,但是在地址表中,您必须存储其类型才能加入联系人.

加入联系人类型的这种一致要求在一段时间后会令人沮丧.

今天我偶然发现了一篇讨论"表继承"的帖子(http://www.sqlteam.com/article/implementing-table-inheritance-in-sql-server).

基本上你有一个父表和一些子表(在这种情况下每个联系人类型).从那里,您可以强制执行完整性,以便子表必须具有定义类型的主等效项.

我看到它的方式,通过这种方法,我不再需要将类型存储在像地址这样的表中,因为id在所有类型中都是唯一的.

我只是想知道是否有人对这种方法有任何感受,是否是一个好的方法,或者可能是替代方案?

我正在使用SQL Server 05和08应该有所不同.

谢谢

埃德

sin*_*e j 6

我设计的数据库就像您提供的链接一样.案例是存储许多不同技术报告的数据.报告类型的数量未定义,可能会增加到大约40种不同类型.

我创建了一个主报告表,它有一个自动增量主键.该表包含所有常见信息,如客户,测试地点,设备,日期等.

然后,我为每种报告类型都有一个表,其中包含与该报告类型相关的特定信息.该表与主服务器具有相同的主键,并且还引用主服务器.

我想将它拆分为具有1:1关系的不同表(通常是禁止使用)的想法是避免让一个表有大量列的单个表,因为不断添加列而非常难以维护.

我的表继承设计为我提供了分段数据和可扩展性,而不会难以维护.我唯一要做的就是编写一个特殊的保存方法来自动处理对两个表的写入.到目前为止,我对设计非常满意并且没有发现任何缺点,除了一些更复杂的保存方法.


Ecl*_*pse 1

您仍然会遇到一个问题,如果您想要子类型字段并且只有主联系人,您必须知道要查看哪个表 - 否则加入所有表。但除此之外,这是解决常见问题的可行解决方案。

另一种可能性(结构相当相似,但您的想法不同)是简单地将所有联系人放入一个表中。然后,对于更具体的字段(birthday例如人员和department职位@公司),创建与该联系人关联的单独表。

    联系表
    --------------
    姓名
    电话号码

    地址表
    -------------
    街道/州等
    联系方式

    联系方式生日表
    --------------
    生日
    联系方式

    部门表
    -----------------
    部门
    联系方式

不过,它需要一种不同的思考方式 - 不要考虑人与公司,而是考虑手头任务的各种功能要求 - 如果您想发送生日贺卡,请获取所有具有相关生日的联系人与他们,等等。