我有两张桌子:
attCatAppSet,attCatAppSet_translation
在这两个表中,我对两个列(不是主键)应用了唯一的约束,这样就不能重复列对值。
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上,有一个唯一的索引和唯一的键约束。

如果我打电话的话,情况也是一样的:
GO
sp_helpIndex attCatAppSet
GO
sp_helpIndex attCatAppSet_translation

发布于 2014-10-03 11:23:58
表attCatAppSet中的约束包含setOrder字段,即不是外键。因此,attCatAppSet中的外键就是category_id,并且它也显示为外键。但是约束UNIQUE(category_id, setOrder)需要组合category_id和setOrder的唯一索引,因此创建了该索引,并将其显示为普通索引(而不是外键)。
外键用于定义表之间的关系。似乎你在制造这些约束之前就已经建立了这种关系。(例如,您已经定义了attCatAppSet_translation和siteLanguage表之间的关系,等等)
约束attCatAppSet_translation包含两个外键,因此它显示为具有以下含义的键:attCatAppSet_translation表只包含siteLanguage和attCatAppSet的唯一组合。
只创建了两个组合的唯一索引。由Server创建的两个索引在功能上是等价的,只不过它们是用不同的图标显示的。只是关于如何在中记录数据库模型的。
进一步的信息这里和这里。
唯一约束是ANSI SQL定义的一部分,而定义唯一约束是定义数据库逻辑设计的一部分。 从性能的角度来看,惟一的约束和唯一的索引实际上与查询优化器相同,您将不会看到使用其中一个和另一个的性能好处。
https://stackoverflow.com/questions/26177412
复制相似问题