数据库设计:可选,但如果提供了值,则必须是唯一的

时间:2010-11-30 20:52:03

标签: mysql database database-design

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

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

5 个答案:

答案 0 :(得分:4)

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

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

  

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

第1步,ALTER表格和MODIFY字段,以便允许NULL

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索引放在可以为空的字段上,乍一看它有点反直觉。

答案 4 :(得分:0)

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

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