繁体   English   中英

两个不同的主键使用相同的外键

[英]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指的是studentstaff ID。

在这种情况下,如果您尝试将数据插入到message表中,它将检查表studentstaff的ID。 因此,错误。

您可以做的是在每个引用的表的message添加两个外键列。

更新

上述方法将导致可为空的外键的可能性。 相反,我们可以有两个映射表,每个表一个。 例如: student_message_mapstaff_message_map 每个表将包含2个外键student_idmessage_id / staff_idmessage_id

这将使列不可为空,但查询将需要进行两次连接。 另外,由于映射表的原因,查看此关系的人可能会认为这是多对多关系。

拥有可空外键的IMO并不是不好的做法,您只需要在查询时注意有关空值的可能性即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM