如何修复引用多个表的列?

时间:2015-11-17 08:10:18

标签: sql sql-server foreign-keys

我有4张桌子:

  • ConditionalOffer(PK ID,说明,...)
  • UnconditionalOffer(PK ID,说明,...)
  • Offer(PK ID,       提供FOREIGN KEY REFERENCES ConditionalOffer.ID,       提供外国参考文献UnconditionalOffer.ID)
  • Applicant(ID,提供FOREIGN KEY REFERENCES Offer.ID,...)

我知道我的代码在表Offer错了,因为列不能引用多个表。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

列可以是多个外键约束的一部分,但是当您指定源列两次时,语法不正确。

相反,要么使用这样的内联约束:

www.url.com/person        Person1    www.url.com/Person1       [u'email@address.com']
www.url.com/person        Person2    www.url.com/Person1       [u'email@address.com']
www.url.com/person        Person3    www.url.com/Person1       [u'email@address.com', u'email@address.com']

www.url.com/person        Person1    www.url.com/Person1       [u'email@address.com']
www.url.com/person        Person2    www.url.com/Person1       [u'email@address.com']
www.url.com/person        Person3    www.url.com/Person1       [u'email@address.com', u'email@address.com']

或使用明确命名的约束(可能更清晰):

create table Offer (
    ID int primary key, 
    Offer int 
       FOREIGN KEY (offer) REFERENCES ConditionalOffer (ID), 
       FOREIGN KEY (offer) REFERENCES UnconditionalOffer (ID)
);

虽然这是可能的,但它确实引起了有关数据库设计的问题:ConditionalOffer和UnconditionalOffer中的ID是否真的相同?它们如何保持同步?如果这些表共享主键(差异重构为其他表),那么这些表不应该是一个实体吗?