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
不是唯一的。
您有一个* composite *主键,因此您需要* Subscription维护表中的两个离散*引用字段 –
[外键引用SQL Server中的2列主键](http:// stackoverflow。 COM /问题/ 3178709 /外键引用-A-2列,主键,在-SQL服务器) – dyatchenko