具有约束和继承的一对一

时间:2014-01-02 04:03:03

标签: sql inheritance database-design one-to-one erd

我一直在质疑某种情况,如果它可以从我的ERD中使用一对一的关系中受益。我有一个名为库的表,其中一个FK称为typeID,来自一个名为element type的表。本质上,元素类型与元素作为父元素具有兄弟关系,并且库中的每个项目都是这些类型之一。该库主要用于在元素之间创建层次结构以及它们在库中的存在方式的其他属性。如果我为每种元素类型的每个属性添加一列,则大多数列实际上都是空的,因为并非每个元素类型都具有其他元素的所有属性。还有一些其他表正在使用库项目id,我想对哪些类型的元素可以作为该表的外键设置约束,因为不是每个元素类型都可以具有该关系。我想知道使用1到1是否是一个好主意,其中对表中的库中可存在哪种类型的元素存在相同的约束,然后添加唯一属性。例如,tableXYZ只能包含来自library = 1的typeID且所有1种类型始终位于其中的项目。这似乎是模拟对象继承/泛化的好方法。此外,连接到需要FK关系的特定类型元素的库的所有表都可以连接到已经具有该约束的扩展的1对1表,因此他们不必这样做。还有一些元素是彼此的扩展,你可以有1比1再扩展1比1吗?这是一个合法的想法吗?它会工作吗?有什么我在这里没有看到的吗?

数据库是postgreSQL

1 个答案:

答案 0 :(得分:0)

您可能希望了解两种技巧:

通过将这两种技术应用于您的案例,您最终可能会得到比您建议的更简单,更强大的设计。在某些情况下,您可以完全省去TypeID,因为通用表和相应的专用表之间的连接将精确地生成您要查找的对象。此外,由于连接位于两个主键上,因此连接速度相对较快。