我有两张桌子:
Article
Subscription
在Article
表格中,我有两列构成主键:id
,sl
。在Subscription
表中,我有一个外键'idsl`。
我使用这个约束:
constraint FK_idsl
foreign key (idsl) references CSS_SubscriptionGroup(id, sl)
但是当我运行查询时,我收到此错误:
外键中的引用列数与引用列数(表X
)不同
答案 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
的设计,以包含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
不是唯一的。