我有两个表:
文章
订阅
在 Article
表中,我有两列组成主键:id
、sl
。在 Subscription
表中,我有一个外键“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
最佳答案
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)
中的复合主键已被破坏为表 Subscription
中的单个复合外键。这不是个好主意。
相反,您需要更改表 Subscription
的设计,以包含相同类型的 id
和 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
,这意味着 id
不是唯一的。
https://stackoverflow.com/questions/29861764/