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

时间:2021-02-20 13:32:38

标签: database rdbms

这可能是一个愚蠢的问题,请原谅我。 我最近遇到了这个问题:

考虑关系 R1(A,B,C) 和 R2(B,P,Q),其中 A,B,C,P,Q 是集合 的属性。 R1 中 B 的值必须强制存在于 R2 中。这是 一个例子

  1. 外键约束
  2. 逻辑数据独立
  3. 参照完整性约束
  4. 域约束​​

答案:参照完整性约束

我无法区分参照完整性约束和外键约束

1 个答案:

答案 0 :(得分:0)

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

根据参考文献[1],参照完整性约束是数据库的所有外键值都有效的状态。

在您的示例中,“R1 中 B 的值必须在 R2 中强制存在”这一行表示--子表 (R2) 包含父表 (R1) 中 B 的所有值,表示 B 中的所有值R2 有效 -- 导致参照完整性约束。

再次说明为什么我们不使用外键约束:

根据参考文献[2],没有必要总是有外键来确保参照完整性约束。还有其他方法可以确保完整性约束。

回到你的例子,没有提到外键或主键。该问题仅表示两个表之间的引用。因此,最好选择引用完整性约束而不是外键约束。

参考文献:

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/