5

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

你能提供任何例子吗?

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

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

4

7 回答 7

3

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

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

任何时候,如果您期望唯一性,并且该值尚未受到 PK 或类似的约束,那么添加唯一性约束可以确保始终保留您的假设。

通常,优化器也可以使用约束。

Celko 关于约束系列的第二篇文章专门介绍了唯一约束

于 2010-04-12T17:17:26.243 回答
3

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

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

于 2010-04-12T17:18:17.840 回答
2

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

于 2010-04-12T17:13:36.007 回答
2

PK 和 UQ 之间存在一些差异。PK 不能有 NULL 值,而 UQ 可以有 1 个空值(Oracle 允许多个 NULL 值)。每个表只能有 1 个 PK,但每个表可以有多个 UQ 默认情况下,一个 PK 是集群的(但不需要是)

于 2010-04-12T18:06:45.297 回答
1

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

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

查找类型数据也是如此。假设您有一个医生的专业列表,您的用户可以在输入数据时从中选择,并假设他们也可以在需要时添加到此列表中。一个独特的约束将阻止多次输入 Oncologist,这将使您更容易实际找到肿瘤学家的人数。

于 2010-04-12T18:21:48.027 回答
1

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

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

高温高压

于 2010-04-12T17:20:34.003 回答
0

emailID 可以是唯一的。

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

于 2010-04-12T17:17:34.877 回答