外键约束和参照完整性约束有什么区别

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. 外键约束
  2. 逻辑数据独立性
  3. 参照完整性约束
  4. 域约束

答案:参照完整性约束

我无法区分引用完整性约束和外键约束

为什么我们更喜欢引用完整性约束:

根据参考文献[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/