如何在外键约束中使用两列
How to use two columns in a foreign key constraint
我有两个 table:
Article
Subscription
在 Article
table 中,我有两列构成主键:id
、sl
。在 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
的设计,以包含与 id
和 sl
相同类型的单独列=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.id
或 table.tableid
的列应该是唯一的,并且是 table 的主键。但是,由于 table Article
需要主键中的附加列 sl
,这意味着 id
不是唯一的。
我有两个 table:
Article
Subscription
在 Article
table 中,我有两列构成主键:id
、sl
。在 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
的设计,以包含与 id
和 sl
相同类型的单独列=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.id
或 table.tableid
的列应该是唯一的,并且是 table 的主键。但是,由于 table Article
需要主键中的附加列 sl
,这意味着 id
不是唯一的。