如何在外键约束中使用两列

时间:2015-04-25 06:21:17

标签: sql sql-server foreign-key-relationship

我有两张桌子:

  1. Article
  2. Subscription
  3. Article表格中,我有两列构成主键:idsl。在Subscription表中,我有一个外键'idsl`。

    我使用这个约束:

    constraint FK_idsl 
      foreign key (idsl) references CSS_SubscriptionGroup(id, sl)
    

    但是当我运行查询时,我收到此错误:

      

    外键中的引用列数与引用列数(表X

    )不同

2 个答案:

答案 0 :(得分:3)

关系的正确语法:

CONSTRAINT FK_OtherTable_ParentTable
FOREIGN KEY(OrderId, CompanyId) REFERENCES dbo.ParentTable(OrderId, CompanyId)

你必须这样试试:

constraint      FK_idsl     foreign key (id,sl)  references CSS_SubscriptionGroup(id,sl)

答案 1 :(得分:3)

  

在文章表中,我有两个主键:id,sl。在订阅表中,我有一个外键'idsl`

此设计已被破坏 - 很明显let when = dispatch_time(DISPATCH_TIME_NOW, Int64(0.3 * Double(NSEC_PER_SEC))) 中的复合主键已被损坏为表Article(id, sl)中的单个复合外键。这不是一个好主意。

相反,您需要更改表Subscription的设计,以包含Subscriptionid的单独列,其类型与sl表相同,然后创建一个由两列组成的复合外键,以与主键相同的顺序引用Article,例如:

Article

修改

这里要考虑的一件事是按照惯例,名为CREATE TABLE Article ( id INT NOT NULL, sl VARCHAR(50) NOT NULL, -- Other Columns CONSTRAINT PK_Article PRIMARY KEY(id, sl) -- composite primary key ); CREATE TABLE Subscription ( -- Other columns id INT NOT NULL, -- Same type as Article.id sl VARCHAR(50) NOT NULL, -- Same type as Article.sl CONSTRAINT FK_Subscription_Article FOREIGN KEY(id, sl) REFERENCES Article(id, sl) -- Same order as Article PK ); table.id的列应该是唯一的,并且是表的主键。但是,由于表table.tableid在主键中需要额外的列Article,这意味着sl不是唯一的。