我有两张桌子:
ArticleSubscription在Article表中,我有两个列组成主键:id,sl。在Subscription表中,我有一个外键'idsl`‘。
我使用这个约束:
constraint FK_idsl
foreign key (idsl) references CSS_SubscriptionGroup(id, sl)但是,当我运行查询时,我会得到以下错误:
外键中的引用列数与引用列数不同,表X
发布于 2015-04-25 07:00:31
在项目表中,我有两个字段是主键: id,sl。在订阅表中,我有一个外键'idsl`‘
这个设计失败了--很明显,Article(id, sl)中的复合主键在表Subscription中被损坏成一个单一的复合外键。这不是个好主意。
相反,您需要更改表Subscription的设计,以包括与Article表相同类型的id和sl的单独列,然后创建一个由两列组成的复合外键,以与主键相同的顺序引用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并不是唯一的。
发布于 2015-04-25 06:37:51
正确的关系语法:
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)https://stackoverflow.com/questions/29861764
复制相似问题