2010-04-12 60 views
5

为什么数据库中需要UNIQUE约束?SQL中的UNIQUE约束(SQL Server)

你能提供任何例子吗?

主键默认情况下唯一的了理解的,因为他们被称为在其他表外键...关系,需要将它们连接到RDBMS平台...

但为什么一个参考其他列为UNIQUE,这样做的好处是什么?)

+2

根据定义,主键总是唯一的。 – 2010-04-12 17:23:22

回答

2

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

+0

所以有一个数字PK和一个1:1关系的'文本'字段。你是否认为这将是对“文本”的独特约束的一个指标? – lexu 2010-04-12 17:19:20

+0

是的。用户名对于PK来说不好,但必须是唯一的 – Andrey 2010-04-12 17:21:00

3

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

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

任何时候,你有独特的期望和价值尚未被PK或类似的限制,不是添加唯一约束可以确保你的假设会始终保留。

通常,约束也be used by the optimizer可以。

在Celko的上制约系列的第二篇文章是专门关于unique constraints

0

emailID可以是唯一的。

差异UNIQUEID和主键之间是唯一支持在整个列,但不会PK的单一空。

+2

主键是一个逻辑数据库概念,它在SQL Server中使用索引实现,但不需要集群化。 – 2010-04-12 17:22:01

+0

一个PK不一定非要聚集,只有在你没有指定任何东西时才会聚集,因为默认情况下它会聚集在一起 – SQLMenace 2010-04-12 18:07:39

3

当事情是一个主键,我不希望它改变 - 它应该是静态的,因为它用于在数据库链接到其他表。如果你的“主键”将会改变(比如说,一个用户名),那么它应该是你表中的一个附加字段,而主键应该是某种增加的ID。

不过,你仍然不能有两个用户使用相同的用户名 - 在这种情况下,唯一的限制是必要的。

1

大多数时候我们在设计数据库时都会将主键保留为标识字段。尽管将其作为身份领域是有道理的,但它可能无法解决实现独特性的问题。为了确保行是唯一的,我们在列上设置了一个唯一的约束条件(就像Andrey指定的UserNane一样)。这就是MSDN说:

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

HTH

2

有一对夫妇的PK和UQ之间的差异。 一个PK可以没有NULL值,其中一个UQ可以有一个空值(Oracle允许有多个NULL值)。 只能有每个表1轮的PK,但你可以为每个表 多个UQ默认情况下PK是集群(但不是必须)如果数据要求是唯一的,那么你需要一个

1

独特的约束。否则,你会得到糟糕的数据。 PK必须是唯一的,但这并不意味着其他数据也不必是唯一的。也许每个记录都必须有一个独特的日期时间,这不太可能是PK,但必须以某种方式执行唯一性。

特别是如果您使用PK的代理键(我强烈建议),那么您要确保自然键区域是独特的禁区的一部分,以避免重复数据。

查找类型数据的情况也是如此。假设您有一份医生专业专业列表,您可以在用户输入数据时选择这些专业专业名称,并假设他们也可以在需要时添加到此列表中。一个独特的约束可以防止多次输入肿瘤学家,这样当你想要找到肿瘤学家的人数时,这会更容易。