我认为外键意味着单行必须引用单行,但我正在查看一些表,在这些表中,情况肯定不是这样的。Table1的column1对table2中的column2具有外键约束,但是在table2中有许多记录在column2中具有相同的值。在column2上也有非唯一索引。这是什么意思?外键约束是否仅仅意味着必须至少有一条记录在正确的列中具有正确的值?我认为这意味着必须有一个这样的记录(不确定null值如何适合图片,但我目前不太关心这一点)。
更新:显然,这种行为是特定于MySQL的,这就是我使用的,但我在最初的问题中没有提到它。
发布于 2010-02-02 03:15:32
来自MySQL documentation
InnoDB允许外键约束引用非唯一键。这是对标准SQL的InnoDB扩展。
但是,在引用表的非唯一列上避免使用外键是有实际原因的。也就是说,在这种情况下,"ON DELETE CASCADE“的语义应该是什么?
The documentation further advises
对非唯一键或包含NULL值的键的外键引用的处理未定义良好(...)建议您使用仅引用唯一键(包括主键)而不引用空键的外键。
发布于 2009-02-26 01:36:28
您的分析是正确的;键不必是唯一的,并且约束将作用于匹配的行集。这通常不是一个有用的行为,但在您想要它的情况下也会出现这种情况。
发布于 2009-02-26 02:02:25
是的,基本上您可以为任何表中的任何列创建外键。不过,大多数情况下,您会将它们创建为主键。
如果您确实使用了不指向主键的外键,那么出于性能的考虑,您可能还希望为被引用的列创建一个(非唯一)索引。
这取决于您正在使用的RDBMS。我认为有些人隐含地为你做了这件事,或者使用了一些其他的技巧。RTM。
https://stackoverflow.com/questions/588741
复制相似问题