Задавайте вопросы, мы ответим
Вы не зашли.
Есть таблица пользователей Users, в котором есть поле "status". Возможны 2 значения этого поля: активен и заблокирован.
Можно организовать БД по разному:
1) Поле status сделать типом enum и перечислить там значения: активен и заблокирован.
2) Можно создать в таблице users поле status_id, т.е. внешний ключ, и отдельную таблицу statuses, в котором буду хранить данные: активен и заблокирован. Т.е. создать связь с помощью ключей.
Возникло 2 вопроса:
1) как лучше сделать?
2) ENUM (перечисление) - это столбец, который может принимать значение из списка допустимых значений, явно перечисленных в спецификации столбца в момент создания таблицы. Каждая величина из допустимых имеет индекс. Что хранится в столбцах этого поля, его индекс или его значение?
Неактивен
enum внутренне представляется как целое число. То, что показывается снаружи,
получается через метаданные. По большому счету, Вы даже можете обращаться
с данными enum как с числами:
mysql> CREATE TABLE t (a ENUM('qwe', 'rty')); Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO t VALUES (1), (2); Query OK, 2 rows affected (0.01 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM t; +------+ | a | +------+ | qwe | | rty | +------+ 2 rows in set (0.00 sec)
В случае с enum Вам не нужно будет строить лишний JOIN, что обычно очень хорошо
сказывается на производительности. С другой стороны, сортировка в enum будет происходить
по численному значению (а не по строке), в случае моего примера - ORDER BY a не поменяет
строки местами, т.к. 1 < 2 (не смотря на то, что 'qwe' > 'rty'). Если хотите правильную сортировку
с точки зрения букв, пишите правильно сортированный список в описании колонки (т.е. в нашем
случае лучше написать enum ('rty', 'qwe')).
По поводу выбора - лучше, мне кажется, использовать enum. JOIN следует использовать тогда,
когда или значений выбора очень много, или их переменное число (т.е. Вы не можете забить
в метаданные все значения).
Неактивен
Спасибо вам за БЫСТРЫЙ и ОЧЕНЬ ХОРОШО ПОЯСНЯЮЩИЙ ответ!
частенько буду заглядывать на ваш форум
Неактивен