sql server:唯一约束生成唯一键和唯一索引

时间:2014-10-03 10:35:50

标签: sql-server tsql unique-constraint unique-key unique-index

我有两张桌子:

attCatAppSet,attCatAppSet_translation

在两个表上,我对2列(不是主键)应用了唯一约束,因此不能复制列对值。

GO
ALTER TABLE attCatAppSet
ADD CONSTRAINT UQ_category_id_setOrder 
UNIQUE(category_id, setOrder)
GO


GO
ALTER TABLE attCatAppSet_translation
ADD CONSTRAINT UQ_siteLanguage_id_attCatAppSet_id 
UNIQUE(siteLanguage_id, attCatAppSet_id)
GO

结果:查看对象资源管理器我得到了两个不同的命令实现。 在表attCatAppSet上,有一个唯一的索引约束。 在表attCatAppSet_translation上,有一个唯一的索引和唯一键约束。

enter image description here

如果我打电话,同样的事情会显示:

GO
sp_helpIndex attCatAppSet
GO
sp_helpIndex attCatAppSet_translation

enter image description here

  • 为什么我有2个不同的查询实现?
  • 2个结果有什么区别?

1 个答案:

答案 0 :(得分:3)

attCatAppSet中的约束包含setOrder字段,不是外键。所以attCatAppSet中的外键只是category_id - 它也显示为外键。但是您的约束UNIQUE(category_id, setOrder)需要组合category_idsetOrder的唯一索引 - 因此创建了此索引并显示为普通索引(而不是外键)。

外键用于定义表之间的关系。在创建theese约束之前,您似乎已经创建了关系。 (例如,您已经定义了attCatAppSet_translationsiteLanguage表等之间的关系。)

约束attCatAppSet_translation包含两个外键,因此它显示为具有以下含义的键:attCatAppSet_translation表仅包含siteLanguageattCatAppSet的唯一组合。

仅创建了两个组合的唯一索引。 SQL Server创建的两个索引在功能上是等效的,只有它们以不同的图标显示。它只是关于如何在SQL Server Management Studio中记录数据库模型。

更多信息herehere

  

UNIQUE约束是ANSI SQL定义和定义的一部分   UNIQUE约束是定义数据库逻辑设计的一部分。

     

从性能角度来看,UNIQUE约束和唯一索引   与查询优化器实际上是相同的,你不会看到   使用one vs另一种的任何性能优势。