![](/img/trans.png)
[英]call same primary key used on two foreign keys to display different rows/results
[英]same foreign key for two different primary keys
我的问题是我不知道,也无法弄清楚是否可以有两个不同的主键引用相同的外键。 更具体地说,我有三个表。 第一个表称为staff,具有以下属性: id fname lname password
。 第二个表称为具有属性的学生: id fname lname password role
,最后一个表称为message,它具有4个属性: id text date user_fk
,我希望两个主键引用外键。 在phpmyadmin中非常简单,我做到了。 问题是,当我想输入新行时,我想数据库无法确定主键是来自职员表还是来自学生。 我得到的是该消息: #1452 - Cannot add or update a child row: a foreign key constraint fails (
迪斯.
消息, CONSTRAINT
student_fk FOREIGN KEY (
user_fk ) REFERENCES
学生(
studentid ))
所以我的问题是:我想做什么完全错误吗? 例如,也许最好创建另一个仅存储上述键的表? 还是错误是我找不到的其他地方? 谢谢!
如果我理解正确, message
的外键user_fk
指的是student
和staff
ID。
在这种情况下,如果您尝试将数据插入到message
表中,它将检查表student
和staff
的ID。 因此,错误。
您可以做的是在每个引用的表的message
添加两个外键列。
更新
上述方法将导致可为空的外键的可能性。 相反,我们可以有两个映射表,每个表一个。 例如: student_message_map
和staff_message_map
。 每个表将包含2个外键student_id
和message_id
/ staff_id
和message_id
。
这将使列不可为空,但查询将需要进行两次连接。 另外,由于映射表的原因,查看此关系的人可能会认为这是多对多关系。
拥有可空外键的IMO并不是不好的做法,您只需要在查询时注意有关空值的可能性即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.