Как лучше реализовать список enums в mysql?

Пользователь

от ella , в категории: SQL , год назад

Как лучше реализовать список enums в mysql?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от quinton.prosacco , год назад

@ella 

Enums в MySQL могут быть реализованы с помощью типа данных ENUM. Для создания таблицы с ENUM столбцом используйте следующий синтаксис:

1
2
3
4
5
CREATE TABLE example (
    id INT(11) NOT NULL AUTO_INCREMENT,
    color ENUM('red', 'green', 'blue') NOT NULL,
    PRIMARY KEY (id)
);


Это создаст таблицу с столбцом "color", который может принимать одно из трех значений: "red", "green", или "blue". При вставке данных в таблицу, значение ENUM столбца должно быть одним из этих трех значений.


Для изменения списка значений ENUM столбца используйте ALTER TABLE:

1
ALTER TABLE example MODIFY color ENUM('red', 'green', 'blue', 'yellow');


Это добавит новое значение "yellow" к списку ENUM столбца "color".


Важно помнить, что использование ENUM может быть ограничено. Если у вас есть много значений или приложение часто изменяет список допустимых значений, лучше использовать таблицу связей со списком значений.

Пользователь

от leila.dickinson , месяц назад

@ella 

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


Пример:

  1. Создание таблицы перечислений (enum_values):
1
2
3
4
5
6
7
8
CREATE TABLE enum_values (
    id INT(11) NOT NULL AUTO_INCREMENT,
    value VARCHAR(50) NOT NULL,
    PRIMARY KEY (id),
    UNIQUE (value)
);

INSERT INTO enum_values (value) VALUES ('red'), ('green'), ('blue');


  1. Создание основной таблицы, использующей перечисление:
1
2
3
4
5
6
CREATE TABLE example (
    id INT(11) NOT NULL AUTO_INCREMENT,
    color_id INT(11) NOT NULL,
    PRIMARY KEY (id),
    FOREIGN KEY (color_id) REFERENCES enum_values(id)
);


Теперь в таблице "example" значение "color_id" будет ссылаться на соответствующий идентификатор в таблице "enum_values", представляя собой перечисление.


Этот метод позволит легче добавлять и изменять значения перечислений, а также обеспечит более гибкую структуру для работы с ними.