mysql-外键可以是同一表中的候选键吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql-外键可以是同一表中的候选键吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1765字,纯文字阅读大概需要3分钟。
内容图文
![mysql-外键可以是同一表中的候选键吗?](/upload/InfoBanner/zyjiaocheng/885/9e7d478b519f429d80e9c59ef2c400ec.jpg)
我将尝试通过一个例子来解释这种情况:
我有2个表A和B,它们之间是“一对多”关系,B由单个键(pk_B)标识,A由几个键(pk_A1和pk_A2)标识.因此,我们有两个表:
B(pk_B, attr1, attr2, attr3);
A(pk_A1, pk_A2, attr1, attr2, fk_B);
由于某些原因,A表中的fk_B可以是这对主键的一部分,因此主键为
pk_A1 + pk_A2 + fk_B.
有可能吗
如果我太普通了,我很抱歉.如果您愿意,我可以尝试通过一个具体的例子更清楚地说明情况.
更新:
例
我有两个表,“ Room”和“ Area”,处于“一对多”关系(1个房间,N个区域; 1个区域,1个房间).房间是建筑物的内部环境,由墙壁分隔;面积只是空间的一部分.
房间由一个主键(Room_ID)标识;区域由几个键标识:坐标_X坐标_Y.
为了给出更具体的示例,我添加了一个名为ID的第三个表,称为“对象”.一个对象可以放置在N个区域中,在一个区域中我可以放置一个对象.因此,我们有三个表:
Room (Room_ID, temperature, capacity)
Area(coordinate_X, coordinate_Y, dimension, FK_Room_ID, FK_Object_ID)
Object(Object_ID, name, weight, size)
现在,如果您想一想,我们有N个区域,则每个区域都可以通过坐标X&是,但是如果我们说在每个区域中都可以有一个对象,那么如果我在一个区域中放置一个对象并不意味着所有具有特定区域的房间都放置了一个对象,这不好;因为我需要区分区域X = 1&在房间A中Y = 1,而区域X = 1& A. Y =房间B中的Y = 1.因此,我必须做一个包含三个属性的主键:X坐标Y坐标房间ID(因此,当我将一个对象添加到区域时,我需要指定X坐标,即Y坐标和我要放置对象的房间).
解决方法:
正如其他人所说,这是可能的.但是,我将加我的$0.02.
根据您所说的,如果pk_A1和pk_A2已经唯一地标识了A,那么为什么要添加第3列作为主键的一部分呢?就个人而言,我认为这样做没有任何好处.
此外,假设C与A之间存在一对多的关系,并且A的主键将是C中的外键.按这本书,C必须“继承” A的pk_A1,pk_A2和fk_B.也可以声明C仅引用pk_A1和pk_A2,而使fk_B再无意义.还要记住,当加入A和C时,您的加入会不必要地延长.
这就是为什么我们通常从表的候选键集中选择最短的主键.
记住,我所说的只是基于您的陈述,即(pk_A1,pk_A2)可以单独作为主键.
内容总结
以上是互联网集市为您收集整理的mysql-外键可以是同一表中的候选键吗?全部内容,希望文章能够帮你解决mysql-外键可以是同一表中的候选键吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。