SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 30.01.2008 08:33:30

Benefit
Участник
Зарегистрирован: 30.01.2008
Сообщений: 2

Что лучше использовать, enum или внешний ключ?

Есть таблица пользователей Users, в котором есть поле "status". Возможны 2 значения этого поля: активен и заблокирован.
Можно организовать БД по разному:
1) Поле status сделать типом enum и перечислить там значения: активен и заблокирован.
2) Можно создать в таблице users поле status_id, т.е. внешний ключ, и отдельную таблицу statuses, в котором буду хранить данные: активен и заблокирован. Т.е. создать связь с помощью ключей.
Возникло 2 вопроса:
1) как лучше сделать?
2) ENUM (перечисление) - это столбец, который может принимать значение из списка допустимых значений, явно перечисленных в спецификации столбца в момент создания таблицы. Каждая величина из допустимых имеет индекс. Что хранится в столбцах этого поля, его индекс или его значение?

Неактивен

 

#2 30.01.2008 08:58:28

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Что лучше использовать, 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 следует использовать тогда,
когда или значений выбора очень много, или их переменное число (т.е. Вы не можете забить
в метаданные все значения).

Неактивен

 

#3 30.01.2008 09:05:09

Benefit
Участник
Зарегистрирован: 30.01.2008
Сообщений: 2

Re: Что лучше использовать, enum или внешний ключ?

Спасибо вам за БЫСТРЫЙ и ОЧЕНЬ ХОРОШО ПОЯСНЯЮЩИЙ ответ!
частенько буду заглядывать на ваш форум wink

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson