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

How to use two columns in a foreign key constraint

我有两个 table:

  1. Article
  2. Subscription

Article table 中,我有两列构成主键:idsl。在 Subscription table 我有一个外键 'idsl`。

我使用这个约束:

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

但是当我 运行 查询时,我得到这个错误:

Number of referencing columns in foreign key differs from number of referenced columns, table X

关系的正确语法:

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)

In Article Table I have two fields that are the primary key: id,sl. In the Subscription Table I have a foreign key 'idsl`

此设计已损坏 - Article(id, sl) 中的复合主键显然已被破坏为 table Subscription 中的单个复合外键。这不是个好主意。

相反,您需要更改 table Subscription 的设计,以包含与 idsl 相同类型的单独列=16=] Table,然后创建一个由两列组成的复合外键,按照与主键相同的顺序引用 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.idtable.tableid 的列应该是唯一的,并且是 table 的主键。但是,由于 table Article 需要主键中的附加列 sl,这意味着 id 不是唯一的。