2009-02-19 76 views
49

我有一个主键的表,但我想要两个其他列进行约束,以确保两者的组合总是唯一的。UniqueKey和Index与IsUnique = Yes有什么区别?

(哑例如:在BOOKS表,伊班列是主键,但标题和作者列的组合也应始终是唯一的)

在SQL Server Management Studio中这是可能的创建一个新的索引并将IsUnique设置为是,或者我可以创建一个新的唯一密钥。

是什么这两种方法之间的区别,哪一个最适合为其目的?

+5

以防万一:如果您需要允许多行为NULL,但任何非NULL行必须为UNIQUE:或者使用触发器强制执行此操作,或使用UNIQUE INDEX执行VIEW - CREATE VIEW xxx AS SELECT Title,作者FROM Books WHERE(标题+作者)不是NULL,然后在该视图上创建索引 – Kristen 2009-02-19 21:39:12

+0

感谢Kirsten,那是非常有用的信息! – JacobE 2009-02-26 13:00:57

回答

35

创造一个独特的约束规则更清晰的说明。该指数的isUnique设置属性是一个实现细节 - 规则是如何实现的,不什么的规则。但效果是一样的。

0

唯一索引是唯一键。

6

只是让你知道,当你创建一个唯一约束SQL Server将创建场景

7

后面的指数还有就是2 唯一约束之间有着明显的区别定义了列的组合必须是独特。 唯一索引只是确保上述内容始终有效的一种方式。 但有可能有一个非唯一索引支持一个唯一的约束。 (如果约束条件不成立=仅在提交时有效,但允许在事务处理中断)

4

我刚刚发现的一个难题是SSMS脚本中的唯一键默认情况下设置为true,但索引的脚本被设置为False。当我使用SSMS的Script Table As上下文菜单时,我没有得到我的唯一索引。

另外,如果类型设置为唯一键,你不能改变“忽略重复键”的设置。首先,您将类型从唯一键更改为索引,然后您可以将忽略重复键设置为true。