SQL中的UNIQUE约束(SQL Server)

时间:2010-04-12 17:11:50

标签: sql-server-2005 unique-constraint

为什么数据库中需要UNIQUE约束?

你能提供任何例子吗?

默认情况下,主键是UNIQUE ...可以理解,因为它们在其他表中被称为外键...需要关联它们来连接rdbms平台...

但为什么将其他列称为UNIQUE,这样做有什么好处?)

7 个答案:

答案 0 :(得分:3)

应尽可能使用约束以确保数据库符合预期。在这种特殊情况下,唯一约束对于确保数据质量最有用。

对电子邮件地址列有用的唯一约束MIGHT,例如,它要求没有两行具有相同的电子邮件地址 - 虽然它不是PK,并且通常会被允许更改。

如果您对唯一性有所期望,并且该值尚未受到PK或类似因素的约束,那么与添加唯一约束相比,可以确保始终保留您的假设。

一般来说,约束也可以be used by the optimizer

Celko关于约束的系列文章的第二篇文章特别关注unique constraints

答案 1 :(得分:3)

当某些东西是主键时,我不希望它发生变化 - 它应该是静态的,因为它用于链接到数据库中的其他表。如果您的“主键”将更改(例如,用户名),那么它应该是表中的附加字段,而主键应该是某种递增ID。

但是,您仍然不能拥有两个具有相同用户名的用户 - 在这种情况下,保证有唯一约束。

答案 2 :(得分:2)

用户名是唯一的,但不是PK。 UserId是PK。

答案 3 :(得分:2)

PK和UQ之间存在一些差异。 PK可以没有NULL值,其中UQ可以具有1个空值(Oracle允许多个NULL值)。 每个表只能有1个PK,但每个表可以有多个UQ 默认情况下,PK是聚类的(但不一定是)

答案 4 :(得分:1)

在设计数据库的大多数时候,我们将主键保留为Identity Field。尽管将其作为身份字段是有意义的,但它可能无法解决实现唯一性的问题。为了确保该行是唯一的,我们在列上放置了一个唯一约束(因为Andrey指定了一个UserNane)。这就是MSDN所说的:

您可以使用UNIQUE约束来确保在不参与主键的特定列中不输入重复值。尽管UNIQUE约束和PRIMARY KEY约束都强制实现唯一性,但如果要强制实施不是主键的列或列组合的唯一性,请使用UNIQUE约束而不是PRIMARY KEY约束。

HTH

答案 5 :(得分:1)

如果要求数据是唯一的,那么您需要一个唯一约束。否则你会得到糟糕的数据。 PK必须是唯一的,但这并不意味着其他数据也不必是唯一的。也许每条记录必须有一个唯一的日期时间,这不太可能是PK,但必须以某种方式强制执行。

特别是如果您使用PK的代理键(我强烈推荐),那么您希望确保自然键字段是唯一约束的一部分,以避免重复数据。

查找类型数据也是如此。假设您有一个专业的专业人员列表,供用户在输入数据时可以选择,并假设他们也可以根据需要添加到此列表中。一个独特的约束将阻止肿瘤科医生多次进入,当您想要真正找到肿瘤科医生的人数时,这将更容易。

答案 6 :(得分:0)

emailID可以是唯一的。

uniqueID 主键之间的区别是唯一支持整个列中的单个null,但PK不会。