外键是否需要引用主键或候选键?

Kam*_*mil 3 database foreign-keys primary-key

我有两个相互矛盾的外键定义。

来自维基百科

the foreign key is defined in a second table, but it refers to the primary key in the first table.

从我的讲义中:

Foreign key does not have to match a primary key but must match a candidate key in some relation

哪个是哪个?外键是否需要引用主键或候选键?

Mik*_*ll' 6

在数据的关系模型中,外键必须引用候选键。

在几乎所有 SQL dbms 中,外键必须引用候选键。

在 MySQL 中,外键几乎可以引用任何东西

此外,出于性能原因,MySQL 要求对引用的列进行索引。但是,系统不强制要求引用的列是 UNIQUE 或声明为 NOT NULL

加了重点。

这是一件坏事,恕我直言。

  • @sqlvogel:他们的文档说“对于 UPDATE 或 DELETE CASCADE 等操作没有很好地定义对非唯一键或包含 NULL 值的键的外键引用的处理。建议您使用仅引用 UNIQUE(包括 PRIMARY)的外键和 NOT NULL 键。” 在我看来,MySQL 开发人员没有很好地实现外键约束,而不是很好地实现了包含约束。对包含约束的所有操作不是都必须明确定义吗? (3认同)