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

发布于 2024-10-05 10:31:17 字数 150 浏览 3 评论 0原文

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

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

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:

  1. How do I implement this in my database design (I'm using MySQL Workbench, by the way)
  2. Is there a potential problem with my model?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

伴我心暖 2024-10-12 10:31:17

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

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

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

Just use a UNIQUE index on the column. See:

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

A UNIQUE index creates a constraint
such that all values in the index must
be distinct. An error occurs if you
try to add a new row with a key value
that matches an existing row. For all
engines, a UNIQUE index permits
multiple NULL values for columns that
can contain NULL. If you specify a
prefix value for a column in a UNIQUE
index, the column values must be
unique within the prefix.

茶色山野 2024-10-12 10:31:17

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

It's can be null (and not blank) and unique. By default value can be null. There is no problem for me.

溇涏 2024-10-12 10:31:17

您可以在表上创建 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.

撑一把青伞 2024-10-12 10:31:17

第 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 索引,乍一看有点违反直觉。

Step 1, ALTER the table and MODIFY the field so NULLs are allowed.

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

Step 2, add a UNIQUE index on the field.

ALTER TABLE my_table ADD UNIQUE INDEX U_my_field (my_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.

一曲琵琶半遮面シ 2024-10-12 10:31:17

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文