复合键的外键

时间:2013-02-22 22:42:31

标签: sql sql-server sql-server-2008 tsql

如果我有一个表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

3 个答案:

答案 0 :(得分:9)

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

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

唯一索引的示例语法

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

BId, CId的顺序对唯一性保证没有任何影响,但确实会影响索引可以有效支持的查询(这种方式支持按BidBId, CId查找而不是{ {1}})

答案 1 :(得分:3)

试试这个:

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

答案 2 :(得分:2)

您可以创建不是主键的唯一索引。这将强制BId和CId的组合是唯一的。

CREATE UNIQUE INDEX ix_ATable_AltUniqueIndex ON ATable(BId,CId)

或者您可以创建唯一约束

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

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