我想将一个表中的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?
如果不可能,那么替代方案是什么?
答案 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。