【问题标题】:Database Design: optional, but must be unique if provided a value数据库设计:可选,但如果提供值则必须是唯一的
【发布时间】:2010-11-30 20:52:02
【问题描述】:

我的一个表中有一个列。它是可选的,因此可以留空。但是,如果为该列提供了值,则它必须是唯一的。两个问题:

  1. 如何在我的数据库设计中实现这一点(顺便说一下,我使用的是 MySQL Workbench)
  2. 我的模型是否存在潜在问题?

【问题讨论】:

  • 回答(2)。不,这很正常。

标签: mysql database database-design


【解决方案1】:

只需在列上使用UNIQUE 索引。见:

http://dev.mysql.com/doc/refman/5.1/en/create-index.html

唯一索引创建一个约束 这样索引中的所有值都必须 与众不同。如果您发生错误 尝试使用键值添加新行 匹配现有行。对所有人 引擎,唯一索引允许 列的多个 NULL 值 可以包含 NULL。如果您指定一个 UNIQUE 中列的前缀值 索引,列值必须是 在前缀中是唯一的。

【讨论】:

    【解决方案2】:

    它可以是 null(而不是空白)并且是唯一的。默认值可以为空。对我来说没有问题。

    【讨论】:

      【解决方案3】:

      您可以在表上创建唯一索引。在 MySQL 工作台中,即创建/编辑表时的 UQ 复选框。

      【讨论】:

        【解决方案4】:

        第 1 步,ALTER 表格和 MODIFY 字段,因此允许使用 NULLs。

        ALTER TABLE my_table MODIFY my_field VARCHAR(100) NULL DEFAULT NULL;
        

        第 2 步,在字段上添加 UNIQUE 索引。

        ALTER TABLE my_table ADD UNIQUE INDEX U_my_field (my_field);
        

        它很好用——我唯一的犹豫是将UNIQUE 索引放在一个可为空的字段上,因为乍一看它有点违反直觉。

        【讨论】:

          【解决方案5】:

          1) 将列移动到新表中,使其唯一且不可为空。现在,只有当你有一个值时,你才能在这个新表中拥有一行。

          2) 是的。键和对键的依赖是关系数据库设计中数据完整性的基础。如果一个属性应该是唯一的,那么它应该被实现为一个键。可为空的“键”根本不是键,而且无论如何都不需要,因为它总是可以移动到新表并使其不可为空而不会丢失任何信息。

          【讨论】:

            猜你喜欢
            • 2021-11-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-06-24
            • 1970-01-01
            相关资源
            最近更新 更多