【发布时间】:2010-11-30 20:52:02
【问题描述】:
我的一个表中有一个列。它是可选的,因此可以留空。但是,如果为该列提供了值,则它必须是唯一的。两个问题:
- 如何在我的数据库设计中实现这一点(顺便说一下,我使用的是 MySQL Workbench)
- 我的模型是否存在潜在问题?
【问题讨论】:
-
回答(2)。不,这很正常。
标签: mysql database database-design
我的一个表中有一个列。它是可选的,因此可以留空。但是,如果为该列提供了值,则它必须是唯一的。两个问题:
【问题讨论】:
标签: mysql database database-design
只需在列上使用UNIQUE 索引。见:
http://dev.mysql.com/doc/refman/5.1/en/create-index.html
唯一索引创建一个约束 这样索引中的所有值都必须 与众不同。如果您发生错误 尝试使用键值添加新行 匹配现有行。对所有人 引擎,唯一索引允许 列的多个 NULL 值 可以包含 NULL。如果您指定一个 UNIQUE 中列的前缀值 索引,列值必须是 在前缀中是唯一的。
【讨论】:
它可以是 null(而不是空白)并且是唯一的。默认值可以为空。对我来说没有问题。
【讨论】:
您可以在表上创建唯一索引。在 MySQL 工作台中,即创建/编辑表时的 UQ 复选框。
【讨论】:
第 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 索引放在一个可为空的字段上,因为乍一看它有点违反直觉。
【讨论】:
1) 将列移动到新表中,使其唯一且不可为空。现在,只有当你有一个值时,你才能在这个新表中拥有一行。
2) 是的。键和对键的依赖是关系数据库设计中数据完整性的基础。如果一个属性应该是唯一的,那么它应该被实现为一个键。可为空的“键”根本不是键,而且无论如何都不需要,因为它总是可以移动到新表并使其不可为空而不会丢失任何信息。
【讨论】: