外键约束和参照完整性约束有什么区别
What is the difference between foreign key constraint & referential integrity constraint
这可能是个愚蠢的问题,请原谅。
我最近遇到了这个问题:
考虑关系 R1(A,B,C) 和 R2(B,P,Q),其中 A,B,C,P,Q 是集合
的属性。 R1 中 B 的值必须强制存在于 R2 中。这是
的例子
- 外键约束
- 逻辑数据独立性
- 参照完整性约束
- 域约束
答案:参照完整性约束
我无法区分引用完整性约束和外键约束
为什么我们更喜欢引用完整性约束:
根据参考文献[1],引用完整性约束是数据库的所有外键的所有值都有效的状态。
在您的示例中,“R1 中 B 的值必须强制存在于 R2 中”这一行表示——子 table(R2) 包含父 table 中 B 的所有值(R1),意味着 R2 中 B 的所有值都是有效的——导致引用完整性约束。
再次说明为什么我们不使用外键约束:
根据参考文献[2],不必总是有外键来确保引用完整性约束。还有其他方法可以确保完整性约束。
回到你的例子,没有提到外键或主键。该问题仅表示两个 table 之间的引用。因此,最好选择引用完整性约束而不是外键约束。
参考文献:
https://www.toolbox.com/tech/big-data/question/difference-between-foreign-key-and-refrential-integrity-constraint-091703/
https://www.mssqltips.com/sqlservertip/4242/sql-server-referential-integrity-without-foreign-keys/
这可能是个愚蠢的问题,请原谅。 我最近遇到了这个问题:
考虑关系 R1(A,B,C) 和 R2(B,P,Q),其中 A,B,C,P,Q 是集合 的属性。 R1 中 B 的值必须强制存在于 R2 中。这是
的例子- 外键约束
- 逻辑数据独立性
- 参照完整性约束
- 域约束
答案:参照完整性约束
我无法区分引用完整性约束和外键约束
为什么我们更喜欢引用完整性约束:
根据参考文献[1],引用完整性约束是数据库的所有外键的所有值都有效的状态。
在您的示例中,“R1 中 B 的值必须强制存在于 R2 中”这一行表示——子 table(R2) 包含父 table 中 B 的所有值(R1),意味着 R2 中 B 的所有值都是有效的——导致引用完整性约束。
再次说明为什么我们不使用外键约束:
根据参考文献[2],不必总是有外键来确保引用完整性约束。还有其他方法可以确保完整性约束。
回到你的例子,没有提到外键或主键。该问题仅表示两个 table 之间的引用。因此,最好选择引用完整性约束而不是外键约束。
参考文献:
https://www.toolbox.com/tech/big-data/question/difference-between-foreign-key-and-refrential-integrity-constraint-091703/ https://www.mssqltips.com/sqlservertip/4242/sql-server-referential-integrity-without-foreign-keys/