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

时间:2018-09-13 15:58:34

标签: mysql sql database

我的问题是我不知道,我无法弄清楚是否可能有两个不同的主键引用相同的外部键。更具体地说,我有三个表。第一个表称为人员,其属性为:id fname lname password。第二张表称为学生,其属性为id fname lname password role,最后一张表为message,它的第四个表为message,它具有4个属性:id text date user_fk,我希望两个主键引用外部键。在phpmyadmin中非常简单,我做到了。问题是,当我想输入新行时,我想数据库无法确定主键是来自职员表还是来自学生。我收到的消息是:#1452 - Cannot add or update a child row: a foreign key constraint fails ( diss .消息, CONSTRAINT student_fk FOREIGN KEY ( user_fk ) REFERENCES student ( studentid ))。所以我的问题是:我想做什么完全错误吗?例如,也许最好创建另一个仅存储上述键的表?还是错误是我找不到的其他地方?谢谢!

1 个答案:

答案 0 :(得分:0)

如果我对您的理解正确,则user_fk中的外键message是指studentstaff的ID。

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

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

更新

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

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

具有可为空的外键的IMO并不是一个好习惯,您只需要在查询时注意有关空值的可能性即可。