TINYINT vs ENUM: в ситуации, когда возможных целочисленных значений всего несколько?

В таблице есть поле "Ограничение скорости". Возможные значения поля: 20, 30, 40, 50, 60, 70, 90, 100, 110, 120, 130.
Какой лучше тип выбрать для поля "Ограничение скорости": TINYINT UNSIGNED или ENUM(20, 30, 40, 50, 60, 70, 90, 100, 110, 120, 130)?
  • Вопрос задан
  • 184 просмотра
Пригласить эксперта
Ответы на вопрос 3
Melkij
@Melkij
PostgreSQL DBA
Enum с числовыми полями работает описанным в мануале способом, но этот способ... Скажем так, иногда вызывает удивление.

mysql> create temporary table speedlimit (i int, lim ENUM('20', '30', '40', '50', '60'));
Query OK, 0 rows affected (0.04 sec)

mysql> insert into speedlimit values (1, 60);
Query OK, 1 row affected, 1 warning (0.04 sec)

mysql> insert into speedlimit values (2, 5);
Query OK, 1 row affected (0.04 sec)

mysql> insert into speedlimit values (3, '60');
Query OK, 1 row affected (0.04 sec)

mysql> select * from speedlimit;
+------+------+
| i    | lim  |
+------+------+
|    1 |      |
|    2 | 60   |
|    3 | 60   |
+------+------+
4 rows in set (0.00 sec)

mysql> select * from speedlimit where lim > 20;
Empty set (0.00 sec)

mysql> select * from speedlimit where lim > '20';
+------+------+
| i    | lim  |
+------+------+
|    2 | 60   |
|    3 | 60   |
+------+------+
2 rows in set (0.00 sec)


Если вы понимаете, почему поведение именно такое и знаете, что это поведение не будет удивлять других разработчиков - можно использовать. По размеру enum до 255 значений занимает 1 байт, как и tinyint. Но я не рекомендую использовать enum с числовыми значениями.
Ответ написан
miraage
@miraage
Lead Software Engineer
А если потом добавятся космические корабли? TINYINT может не хватить.
ENUM такой в базе я бы тоже не описывал. Возьмите обычный UNSIGNED INT.
Валидация (imho) должна быть на уровне DTO/VO.
Ответ написан
@cicatrix
было бы большой ошибкой думать
Размышления в сторону - если размер базы / объём памяти критичен, то, конечно, чем меньше размерность, тем лучше.
Если же говорить о производительности, то оказывается, что 64 бтный процессор в совокупности с 64-битной ОС лучше всего работает с, ВНЕЗАПНО... 64-битными целыми. Уменьшение разрядности до 32, 16 или 8 бит либо вообще не даст прироста производительности, либо даже ухудшит быстродействие.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
Badoo Development Москва
от 140 000 до 180 000 руб.
Badoo Development Москва
от 180 000 до 250 000 руб.
от 90 000 до 150 000 руб.
14 авг. 2018, в 16:33
1000 руб./за проект
14 авг. 2018, в 16:15
6000 руб./за проект
14 авг. 2018, в 16:12
500 руб./за проект