首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么mysql允许外键引用复合主键的一部分?

问为什么mysql允许外键引用复合主键的一部分?
EN

Stack Overflow用户
提问于 2017-04-01 21:35:54
回答 1查看 57关注 0票数 0

假设我在mysql中有两个表1. 1.Child(name,father_name) 2. tables (name,contact)

表父表在子表中有一个复合键( name,contact).Father_name引用了父表中的name。因此,mysql允许外键引用主key.This的一部分。

但是,请考虑以下情况:

表父表具有以下元组:

代码语言:javascript
复制
(kishan,9906011111)
(kishan,9990601234)

现在假设我在child中插入一行

代码语言:javascript
复制
(xyz,kishan)

我如何知道父表中的哪一个基山与子xyz相关?

如果mysql不允许外键引用主键的一部分,则可以避免这种情况。

请回答mysql允许的这个方案的好处是什么?

EN

回答 1

Stack Overflow用户

发布于 2017-04-01 21:44:22

这是MySQL的一个特性。在我看来,外键应该只针对唯一键或主键。不应该使用外键关系映射到值的“集合”。

显然,MySQL的设计者不同意(我和其他数据库实现者的意见)。它们允许与任何被索引的列建立外键关系--用MySQL的话来说,就是定义为“键”。如果您有一个复合主键,那么初始列就是这样一个键。

为了防止出现问题,并使您的表明确且易于使用,我建议:

  • 所有表都有一个自动递增的主键。
  • 所有外键关系只与主键有关(不与唯一键或其他类型的键有关)。
  • 主键应命名为实体的单数,后跟id (例如:things将thingId作为主键)。<代码>H29<代码>H110外键与主键具有相同的名称(除非这是不可能的,因为同一个表有多个外键关系)。

<代码>F212

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43157567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档