2010-03-11 60 views
0

问候 -MS SQL桥表约束

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

文章可以在许多类别中使用,所以我创建ArticleCategories的表是这样的:

  • BridgeID INT(PK)

  • 条款ArticleID INT

  • 类别ID INT

现在,我想创建const raints /关系,以便ArticleID-CategoryID组合是唯一的,并且ID必须存在于各个主键表(文章和类别)中。

我曾尝试使用VS2008服务器资源管理器和企业管理器(SQL-2005)创建FK关系,但结果始终阻止桥表中的重复ArticleID,即使CategoryID不同。

我很确定我正在做一些明显错误的事情,但我似乎有一个心理障碍在这一点上。

有谁能告诉我请这样做吗?

非常感谢!

回答

1

请勿使用BridgeId列。

从您的ArticleId和CateogryId中创建一个组合主键(又名compound key),这将确保每个组合都是唯一的。

将每一列的foreign key设置为对应的表格,并完成您的一组约束。

+0

非常感谢,非常有意义,当然,它的工作原理 - 其实我有独特的复合指数试图在条款ArticleID和类别ID无需拆卸BridgeID (身份)专栏,它确实有效,但我最终删除了BridgeID,因为它只是出于习惯。再次感谢。 – greg 2010-03-12 03:29:01

0

好吧,首先您对ArticleID的CategoryID执行唯一索引。

然后,您将articleID上的外键约束链接回Article表。然后对CategoryID和Catgory表执行相同的操作。

你的描述听起来像是你在桥表上创建PK,在另一个表上创建FK,这就是为什么它不起作用。

+0

这是问题所在的缺失的独特综合指数。抱歉,由于我缺乏清晰度,FK在桥牌桌上,但我在Bridge Table的ID列上有一个PK,现在它已被删除,一切正常。谢谢! – greg 2010-03-12 03:32:02

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) 
) 
+0

非常感谢! – greg 2010-03-12 03:32:18