我有一个关于关系型数据库中超类型-子类型设计的问题。如果我有一个带有两个子类型表的超类型,我将把超类型的PK与两个子类型表的PK相关联作为FK。比如说我有这样一些东西:
有什么想法吗?也许超类型表上的PK应该是ID和TypeID组合,并在ID列上设置唯一约束条件以防止在SuperType表中出现两种类型的记录...然后子类型表将具有组合ID和TypeID PK,并对TypeID设置约束条件,只能是适当子类型表所需的类型?
Type
TypeID PK
SuperType
ID PK TypeID FK
SubtypeA
ID PK,FK
SubtypeB
ID PK,FK
在数据库方面,如何确保给定类型的超类型ID仅被放入相应的子类型表中?例如,我不想让类型A的超类型ID被放入SubtypeB表中。有没有一种简单的方法来防止这种情况在数据库端发生?我知道这可以在代码中处理,但如果代码出错怎么办?或者如果有人手动输入了错误的ID到其中一个子类型表中怎么办?我想找到一种在数据库端使这种情况不可能发生的方法。有什么想法吗?也许超类型表上的PK应该是ID和TypeID组合,并在ID列上设置唯一约束条件以防止在SuperType表中出现两种类型的记录...然后子类型表将具有组合ID和TypeID PK,并对TypeID设置约束条件,只能是适当子类型表所需的类型?