两个表或关系之间的“关系”[原文如此] 是来自伪 ERM(实体关系模型)信息建模方法、产品和演示文稿的概念,它们自称为 ERM,但不是因为它们误解、误用和歪曲ERM & RM(关系模型)。这不是 SQL 中的术语。它对应于 RM 中的 FK(外键)。
(在 ERM 和 RM 中,“关系”是“关联”,是真值函数意义上的“关系”。如 RM“关系”在元组集合的意义上表示共同参与的实体/价值。)
SQL FK 对应于我们可以合理地称为 RM 中的外部超键。 Does an empty SQL table have a superkey? Does every SQL table?
(ERM 和 SQL 也会误解、误用和歪曲 RM。What is the difference between an entity relationship model and a relational model?)
RA(关系代数)是一个关于关系的值和运算符的系统,也许还有其他类型。其表达式本质上是嵌套的 RA 运算符调用的语言通常也被草率地称为 RA。关系(值或变量)FK 是一组或一组属性,其子元组值被限制在其他地方出现。 FK 约束表示给定命名关系中给定集合或属性列表的子元组值也出现在第二个给定命名关系的给定属性下。 (这样的约束也草率地称为 FK。)由于 FK 约束是关于关系值而不是关系值的陈述,因此不能直接用关系值和运算符表示。它可以是一种特定的 RA 样式查询语言,可让您编写布尔值表达式。
当project r, ... (R) 是project r,... (S) 的限制时,FK 的一个 RM 概念是 {r, ...} 是 R 中的 FK,引用 S 中的 CK {r, ...}。 FK 作为列表的一个概念是 (r, ...) 是 R 中的 FK 引用 S 中的 (s, ...) iff/当 {s, ...} 是 S 的 CK 并且rename r\s, ... (project r, ... (R)) 是project s,... (S) 的限制。
尽管如此,在将我们限制在关系名称和嵌套的 RA 调用的同时表达约束是很简单的。我们通过一个查询来表达一个约束是否在给定的命名关系上成立,该查询具有一些商定的属性 iff/when 约束成立。一个这样的约定是给出一个查询,当它的命名关系满足约束时,它返回一个空关系。最简单的约定是一个查询,它返回一个没有列的关系(其中有两个,一个有一个元组,一个没有),它有一个元组 iff/当满足约束时。