Как разрешить столбцу быть равным только 1 из 3 значений - PullRequest
0 голосов
/ 22 июня 2019

Привет всем, когда я готовился к экзамену mysql. Я сталкивался с этим вопросом на прошлом экзамене.

Информация о пройденном расстоянии до каждого грузовика больше не нужна.Вместо этого мы хотели бы хранить информацию о текущем состоянии грузовика.Статус может быть Доступен , Используется или Поддерживается

Эта часть вопроса о состоянии - это то, где я немногозастрял.Моя единственная идея для решения этой проблемы - через предложение where или установку строкового значения в диапазоне от 4 до 9. Еще одна идея, которая у меня возникла, например использование ограничения проверки?

Ответы [ 3 ]

1 голос
/ 22 июня 2019

Переместить статус в другой статус таблицы (id, name) и сохранить status_id в грузовиках в качестве внешнего ключа, указывающего на один из этих

status(1, 'available')
status(2, 'used')
status(3, 'maintained')
0 голосов
/ 22 июня 2019

Вы можете создать ENUM:

ENUM - это строковый объект со значением, выбранным из списка разрешенных значений, которые явно перечислены в спецификации столбца ввремя создания таблицы

CREATE TABLE t(
  id INT NOT NULL PRIMARY KEY,
  status ENUM('available','used', 'maintained')
);

дБ <> демонстрация fiddle

0 голосов
/ 22 июня 2019

Лучший способ сделать это - создать отдельную таблицу, содержащую доступное состояние, а затем внедрить внешний ключ между отношением trucks и отношением status:

CREATE TABLE status (
    id INT NOT NULL PRIMARY KEY,
    description VARCHAR(32)
);

CREATE TABLE trucks (
    id INT NOT NULL PRIMARY KEY,
    status_id INT NOT NULL,
    INDEX idx_status_id (status_id),
    FOREIGN KEY (status_id)
        REFERENCES status(id)
);

Некоторые людисказал бы использовать ENUM тип.Однако я (и многие другие администраторы баз данных, с которыми я работал) лично ненавижу тип ENUM.Используя ENUM, вы перемещаете данные из тех мест, где они находятся, в метаданные таблицы, обновление списка является очень дорогой операцией, трудно получить все доступные значения из вашего приложения, вы не можете хранить дополнительную информацию с ним и т. Д.

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