数据库设计:可选,但如果提供值则必须是唯一的
我的一个表中有一个列。它是可选的,因此可以留空。但是,如果为该列提供了值,则该值必须是唯一的。两个问题:
- 我如何在我的数据库设计中实现这一点(顺便说一句,我正在使用 MySQL Workbench)
- 我的模型是否存在潜在问题?
I have a column in one of my tables. It's optional, so it can be left blank. However, if a value is provided for that column, it must be unique. Two questions:
- How do I implement this in my database design (I'm using MySQL Workbench, by the way)
- Is there a potential problem with my model?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
只需在列上使用
UNIQUE
索引即可。请参阅:http://dev.mysql.com/doc/refman /5.1/en/create-index.html
Just use a
UNIQUE
index on the column. See:http://dev.mysql.com/doc/refman/5.1/en/create-index.html
它可以为空(而不是空白)并且是唯一的。默认值可以为空。对我来说没有问题。
It's can be null (and not blank) and unique. By default value can be null. There is no problem for me.
您可以在表上创建 UNIQUE 索引。在 MySQL Workbench 中,这是创建/编辑表时的 UQ 复选框。
You can create a UNIQUE index on a table. In MySQL workbench that is the UQ checkbox when creating/editing the table.
第 1 步,
ALTER
表并MODIFY
字段,以便允许NULL
。第 2 步,在字段上添加
UNIQUE
索引。使用起来很好——我唯一犹豫的是在可为空字段上放置一个 UNIQUE 索引,乍一看有点违反直觉。
Step 1,
ALTER
the table andMODIFY
the field soNULL
s are allowed.Step 2, add a
UNIQUE
index on the field.It's fine to use -- my only hesitation with putting a
UNIQUE
index on a nullable field it that it is slightly counter-intuitive at first glance.1)将该列移至新表,使其唯一且不可为空。现在,只有当您拥有该行的值时,您才能在这个新表中拥有一行。
2)是的。键和键的依赖关系是关系数据库设计中数据完整性的基础。如果一个属性应该是唯一的,那么它应该被实现为一个键。可为空的“键”根本不是键,而且无论如何都没有必要,因为它始终可以移动到新表并使其不可为空,而不会丢失任何信息。
1) Move the column to a new table, make it unique and non-nullable. You can now have a row in this new table only when you have a value for it.
2) Yes. Keys and dependencies on keys are the basis of data integrity in a relational database design. If an attribute is supposed to be unique then it should be implemented as a key. A nullable "key" is not a key at all and anyway is never necessary because it can always be moved to a new table and made non-nullable without loss of any information.