Проектирование базы данных: необязательно, но должно быть уникальным, если указано значение - PullRequest
7 голосов
/ 30 ноября 2010

У меня есть столбец в одной из моих таблиц.Это необязательно, поэтому его можно оставить пустым.Однако, если для этого столбца указано значение, оно должно быть уникальным.Два вопроса:

  1. Как мне реализовать это в моем дизайне базы данных (кстати, я использую MySQL Workbench)
  2. Есть ли потенциальная проблема с моей моделью?*

Ответы [ 5 ]

4 голосов
/ 01 декабря 2010

Просто используйте индекс UNIQUE для столбца. См:

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

УНИКАЛЬНЫЙ индекс создает ограничение так что все значения в индексе должны быть отличным Ошибка возникает, если вы попробуйте добавить новую строку со значением ключа это соответствует существующей строке. Для всех двигатели, УНИКАЛЬНЫЙ индекс разрешений несколько значений NULL для столбцов, которые может содержать NULL. Если вы укажете Значение префикса для столбца в УНИКАЛЬНОМ индекс, значения столбца должны быть уникальный в префиксе.

2 голосов
/ 30 ноября 2010

Может быть нулевым (и не пустым) и уникальным. По умолчанию значение может быть нулевым. Для меня нет проблем.

1 голос
/ 01 декабря 2010

Вы можете создать УНИКАЛЬНЫЙ индекс для таблицы. В MySQL Workbench это флажок UQ при создании / редактировании таблицы.

0 голосов
/ 01 декабря 2010

1) Переместите столбец в новую таблицу, сделайте ее уникальной и необнуляемой. Теперь вы можете иметь строку в этой новой таблице, только если у вас есть значение для нее.

2) Да. Ключи и зависимости от ключей являются основой целостности данных в дизайне реляционной базы данных. Если атрибут должен быть уникальным, он должен быть реализован как ключ. Обнуляемый «ключ» вообще не является ключом и в любом случае никогда не нужен, потому что его всегда можно переместить в новую таблицу и сделать не обнуляемым без потери любой информации.

0 голосов
/ 01 декабря 2010

Шаг 1, ALTER таблица и MODIFY поле, поэтому допускается NULL s.

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 в пустое поле, если он на первый взгляд слегка нелогичный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...