【问题标题】:UNIQUE Constraints in SQL (SQL Server)SQL (SQL Server) 中的唯一约束
【发布时间】:2010-04-12 17:11:49
【问题描述】:

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

你能提供任何例子吗?

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

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

【问题讨论】:

  • 根据定义,主键始终是唯一的。

标签: sql-server-2005 unique-constraint


【解决方案1】:

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

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

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

一般情况下,约束也可以be used by the optimizer

Celko 关于约束系列的第二篇文章专门针对unique constraints

【讨论】:

    【解决方案2】:

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

    但是,您仍然不能让两个用户使用相同的用户名 - 在这种情况下,唯一的约束是必要的。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 所以有一个数字 PK 和一个具有 1:1 关系的“文本”字段。你认为这将是对“文本”的唯一约束的指标吗?
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

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

        HTH

        【讨论】:

          【解决方案6】:

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

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

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

          【讨论】:

            【解决方案7】:

            emailID 可以是唯一的。

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

            【讨论】:

            • 主键是一个逻辑数据库概念,在 SQL Server 中通过索引实现,但不需要集群。
            • 一个PK不一定是集群的,只有当你不指定任何东西时它才会被集群,因为默认情况下它会被集群
            猜你喜欢
            • 2013-11-01
            • 1970-01-01
            • 2013-01-01
            • 1970-01-01
            • 2011-02-17
            • 1970-01-01
            • 1970-01-01
            • 2011-01-11
            • 1970-01-01
            相关资源
            最近更新 更多