MS SQL桥表约束

时间:2010-03-11 19:23:24

标签: sql-server-2005 constraints

问候 -

我有一张文章表和一个类别表。

文章可以在很多类别中使用,所以我创建了一个ArticleCategories表,如下所示:

  • BridgeID int(PK)

  • ArticleID int

  • CategoryID int

现在,我想创建约束/关系,使ArticleID-CategoryID组合是唯一的,并且ID必须存在于相应的主键表(文章和类别)中。

我尝试使用VS2008 Server Explorer和Enterprise Manager(SQL-2005)来创建FK关系,但结果始终会阻止桥表中的Duplicate ArticleID,即使CategoryID不同。

我很确定我做的事情显然是错误的,但此时我似乎有心理障碍。

有人能告诉我该怎么做?

伟大的赞赏!

3 个答案:

答案 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 )
)