如何在非主键上使用外键约束?
例如,我有两个表account
和transactions
。我想检查表acname
中的transactions
是表acname
中account
之一。
table account (acno, acname, bal, type)
table transactions (tid, acno, acname, bal, credit/debit, datetime)
此处transactions.acname
等于account.acname
。
请参见以下图表以获取帮助:
答案 0 :(得分:1)
修复您的数据模型!
也就是说,不要在两个表中同时存储acno
和acname
。而是将acno
存储在accounts
中。
然后,当您需要名称时,使用join
:
select t.*, a.acname
from transactions t join
accounts a
on t.acno = a.acno
基本规则是您希望将外键约束链接到参考表的主键(尽管大多数数据库允许它们使用唯一键)。并且,您不想在表之间重复数据。
尽管MySQL允许您定义对非主键的外键引用,但没有理由这样做。