MySQL外键使用多个字段来引用另一个表中的主键

时间:2016-12-08 19:58:17

标签: mysql foreign-keys relational-database polymorphic-associations

我想将一个表中的2列引用到另一个表中的主键。以下是db结构中的样子:

Users
uid (INT)  name (VARCHAR)
1          John Doe
2          Jane Doe

SystemProcesses
uid (INT)  name (VARCHAR)
1          Hitman
2          Cron

Logs
uid (INT)  modelType (VARCHAR)  modelUID (INT)  Action
1          Users                2               Jane Doe did this
2          Users                1               John Doe did that
3          SystemProcesses      1               Hitman just killed John Doe

如何将Logs表中的modelType和modelUID引用给那些Users和SystemProcesses?

如果不可能,那么替代方案是什么?

1 个答案:

答案 0 :(得分:3)

不要对两个外键使用相同的列。这有时被称为多态关联,它破坏了良好的数据库设计规则。

它应该是一个糟糕的设计线索,FOREIGN KEY约束只支持一个引用的表。标准SQL中不支持多态关联。

相反,创建两列,一列用于引用用户,另一列用于引用SystemProcesses。每个参考表一列。

Logs
uid (INT)  UsersID (INT)  SystemProcessesID (INT) Action
1          2              NULL                    Jane Doe did this
2          1              NULL                    John Doe did that
3          1              1                       Hitman just killed John Doe

如果用户或SystemProcesses列没有相关参考,请使用NULL表示没有适用的值。

您可以查看other questions I have answered about polymorphic associations