2013-02-22 103 views
1

如果我有一个表,其中AId是主键,BIdCId是引用其表的外键。我需要使BIdCId的组合独一无二。复合键的外键

我该如何改变表格以使组合独一无二?

感谢

AId BId CId Notes  Date 
=== === === =====  ==== 
1  200 1  Random 2/2/2005 
2  201 2  ETC  2/8/2007 
3  202 3  ETC  2/12/2012 
+2

使用“create”或“add”等各种修饰符搜索“sql server unique index”。应该有很多结果。 – 2013-02-22 22:44:18

回答

9

您需要创建唯一索引或唯一约束。

我通常更喜欢独特的索引,因为它们更灵活(如果需要,可以添加包含的列),并且它们不必在模式中唯一命名。

唯一索引示例语法

CREATE UNIQUE NONCLUSTERED INDEX SomeIndex ON YourTable(BId, CId) 

BId, CId的顺序使得以唯一性保证没有任何区别,但确实会影响指数可以有效地支持查询(即反过来支持BidBId, CId但仰视不是CId

3

试试这个:

ALTER TABLE myTable 
ADD CONSTRAINT myConstraint 
UNIQUE NONCLUSTERED 
(
      BId, CId 
) 
2

您可以创建不是主键的唯一索引。这将迫使BId和CId的组合独一无二。

CREATE UNIQUE INDEX ix_ATable_AltUniqueIndex ON ATable(BId,CId) 

或者你可以创建一个唯一约束

ALTER TABLE ATable ADD CONSTRAINT uni_ATable UNIQUE (BId,CId) 

创建一个唯一约束似乎还创建唯一索引。