首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >server:唯一约束生成唯一键和唯一索引。

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

Stack Overflow用户
提问于 2014-10-03 10:35:49
回答 1查看 1.1K关注 0票数 3

我有两张桌子:

attCatAppSet,attCatAppSet_translation

在这两个表中,我对两个列(不是主键)应用了唯一的约束,这样就不能重复列对值。

代码语言:javascript
复制
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上,有一个唯一的索引和唯一的键约束。

如果我打电话的话,情况也是一样的:

代码语言:javascript
复制
GO
sp_helpIndex attCatAppSet
GO
sp_helpIndex attCatAppSet_translation

  • 为什么我有两个不同的查询实现?
  • 这两个结果有什么不同?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-03 11:23:58

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

外键用于定义表之间的关系。似乎你在制造这些约束之前就已经建立了这种关系。(例如,您已经定义了attCatAppSet_translationsiteLanguage表之间的关系,等等)

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

只创建了两个组合的唯一索引。由Server创建的两个索引在功能上是等价的,只不过它们是用不同的图标显示的。只是关于如何在中记录数据库模型的。

进一步的信息这里这里

唯一约束是ANSI SQL定义的一部分,而定义唯一约束是定义数据库逻辑设计的一部分。 从性能的角度来看,惟一的约束和唯一的索引实际上与查询优化器相同,您将不会看到使用其中一个和另一个的性能好处。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26177412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档