【问题标题】:Grouped or Multiple Foreign Key Constraints分组或多个外键约束
【发布时间】:2017-03-20 13:35:24
【问题描述】:
我有一种情况,我想限制一个表中的记录,只允许将 2 列填充在一起,它们存在于另一个表记录中。
例如:
-
tblHome(Home_ID)
-
tblParent (Home_ID, Parent_ID) --> Home_ID 必须存在于 tblHouse 中
-
tblChild(Home_ID、Parent_ID、Child_ID)--> Home_ID 和 Parent_ID 必须存在于 tblParent 的同一记录中。
有没有办法创建一个约束来强制执行关系 3?
【问题讨论】:
标签:
sql
foreign-keys
constraints
ssms
foreign-key-relationship
【解决方案1】:
SQL 声明性完整性约束FOREIGN KEY 表示表中的子行值必须作为子行值出现在它形成超键的其他位置(UNIQUE NOT NULL 或PRIMARY KEY)。否则,您必须通过触发器进行约束。子行值必须作为子行值出现在其他地方的情况称为包含依赖约束,SQL 不以声明方式支持。
- tblChild (Home_ID, Parent_ID, Child_ID) --> Home_ID 和 Parent_ID 必须存在于 tblParent 的同一记录中。
只要在tblParent 中有(Home_ID, Parent_ID) 作为UNIQUE NOT NULL 或PRIMARY KEY,就可以在tblChild 中有FOREIGN KEY (Home_ID, Parent_ID) REFERENCES tblParent (Home_ID, Parent_ID)。