假设我在mysql中有两个表1. 1.Child(name,father_name) 2. tables (name,contact)
表父表在子表中有一个复合键( name,contact).Father_name引用了父表中的name。因此,mysql允许外键引用主key.This的一部分。
但是,请考虑以下情况:
表父表具有以下元组:
(kishan,9906011111)
(kishan,9990601234)现在假设我在child中插入一行
(xyz,kishan)我如何知道父表中的哪一个基山与子xyz相关?
如果mysql不允许外键引用主键的一部分,则可以避免这种情况。
请回答mysql允许的这个方案的好处是什么?
发布于 2017-04-01 21:44:22
这是MySQL的一个特性。在我看来,外键应该只针对唯一键或主键。不应该使用外键关系映射到值的“集合”。
显然,MySQL的设计者不同意(我和其他数据库实现者的意见)。它们允许与任何被索引的列建立外键关系--用MySQL的话来说,就是定义为“键”。如果您有一个复合主键,那么初始列就是这样一个键。
为了防止出现问题,并使您的表明确且易于使用,我建议:
id (例如:things将thingId作为主键)。<代码>H29<代码>H110外键与主键具有相同的名称(除非这是不可能的,因为同一个表有多个外键关系)。<代码>F212
https://stackoverflow.com/questions/43157567
复制相似问题