【发布时间】:2014-10-15 16:56:24
【问题描述】:
我有一个带有唯一标识符的列,它可以潜在地引用四个不同表之一。我已经通过两种方式看到了这一点,但似乎都是不好的做法。
首先,我看到了一个没有明确声明为特定表的外键的 ObjectID 列。然后你可以把你想要的任何唯一标识符塞进去。这意味着您可能会从不属于我想要的 4 个表的表中插入 ID。
其次,因为数据可以来自四个不同的表,我还看到人们制作了 4 个不同的外键。在这样做的过程中,系统依赖于 ONE AND ONLY ONE 具有非 NULL 值的列。
有什么更好的方法来做到这一点?例如,我的表中的记录可能会引用 Hospitals(ID)、Clinics(ID)、Schools(ID) 或 Universities(ID)……但仅限于这些表。
谢谢!
【问题讨论】:
-
拥有一个引用 Buildings(ID) 的键。
-
那么,建筑物表中有什么?一个 ObjectID 还是四个单独的列?我回到同样的问题了吗?其他四个表已经存在。
-
要么只是一个 ID;一个 ID 和一个 TypeID;或最好是 ID、TypeID 和医院、诊所、学校和大学共有的所有列。然后每个表的 ID 实际上是一个 BuildingID,在所有四个表中都是唯一的。
-
至少,如果您有四个单独的 FK,您可以使用外键约束设置并强制执行正确的引用完整性 - 如果您有一个列引用四个不同表之一,则无法实现这一点... .
-
可能相关且有帮助:stackoverflow.com/a/5001664/44853
标签: sql-server database database-design relational-database database-schema