问候 -
我有一张文章表和一个类别表。
文章可以在很多类别中使用,所以我创建了一个ArticleCategories表,如下所示:
BridgeID int(PK)
ArticleID int
CategoryID int
现在,我想创建约束/关系,使ArticleID-CategoryID组合是唯一的,并且ID必须存在于相应的主键表(文章和类别)中。
我尝试使用VS2008 Server Explorer和Enterprise Manager(SQL-2005)来创建FK关系,但结果始终会阻止桥表中的Duplicate ArticleID,即使CategoryID不同。
我很确定我做的事情显然是错误的,但此时我似乎有心理障碍。
有人能告诉我该怎么做?
伟大的赞赏!
答案 0 :(得分:1)
不要使用BridgeId列。
从ArticleId和CateogryId制作一个复合主键(又名compound key),这将确保每个组合都是唯一的。
使每列成为相应表格的foreign key,这样就完成了一组约束。
答案 1 :(得分:0)
好的,首先你在ArticleID,CategoryID上做一个唯一的索引。
然后在articleID上设置外键约束,将其链接回Article表。然后对CategoryID和Catgory表执行相同的操作。
您的描述听起来就像是在Bridge表上创建PK而在另一个表上创建FK,这就是为什么它不起作用。
答案 2 :(得分:0)
扩展HLGEM的解决方案,你会得到类似的东西:
Create Table ArticleCategories
(
Id int not null Primary Key Clustered
, ArticleId int not null
, CategoryId int not null
, Constraint UK_ArticleCategories_Unique ( ArticleId, CategoryId )
, Constraint FK_ArticleCategories_Articles
Foreign Key ( ArticleId )
References Articles( Id )
, Constraint FK_ArticleCategories_Categories
Foreign Key ( CategoryId )
References Categories( Id )
)