sql-server - SQL Server 中的表 "Inheritance"

标签 sql-server database-design

我目前正在考虑重组我们的联系人管理数据库,我想听听人们对解决具有共享属性的多种联系人类型问题的意见。

基本上我们有 6 种联系人类型,包括个人、公司和职位@公司。

在当前结构中,所有这些都有一个地址,但是在地址表中,您必须存储它们的类型才能加入联系人。

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

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

基本上,您有一个父表和许多子表(在本例中为每种联系人类型)。从那里您可以强制执行完整性,以便子表必须具有定义其类型的主表等效项。

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

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

我正在使用 SQL Server 05 和 08,这应该有什么区别。

谢谢

编辑

最佳答案

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

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

然后,我为每种报告类型准备了一个表格,其中包含与该报告类型相关的特定信息。该表与主表具有相同的主键,并且也引用主表。

我的想法是将其拆分为具有 1:1 关系的不同表(这通常是不行的),是为了避免获得一个包含大量列的表,这会变得非常难以维护,因为您不断地添加列。

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

关于sql-server - SQL Server 中的表 "Inheritance",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/529256/

相关文章:

sql-server - 选择前两行之后的分组行 SQL Server

sql-server - SQL Server 作业无法识别 AWS CLI 命令

用于更改所有外键以添加 ON DELETE CASCADE 的 SQL 脚本

mysql - 数据库设计-结构

数据库设计: Why do some ecommerce database have separate tables for products and product_variants?

sql-server - SQL Server 上的 Int PK 内部联接与 Guid PK 内部联接。执行计划

mysql - 从 SQL Server 表中的分区检索数据

sql - 如何按天汇总数据并仍然遵守时区?

sql - 存储很多位-我应该使用多列还是单个位域列?

sql - EF数据库第一代代码生成缺失Key和数据注解