MySQL с использованием числовых кодов состояния против текста - PullRequest
6 голосов
/ 17 августа 2011

Часто в моих проектах (PHP / MySQL) мне приходится добавлять поле «status» в некоторые таблицы базы данных.Например, чтобы пометить, если задание, если подано, одобрено, отклонено.

До сих пор я по привычке использовал числовые коды состояния (0 для отправленного, 1 для одобренного, -1 для отклоненного).По какой-то причине я полагаю, что сервер обрабатывает более эффективно.

Теперь мне интересно, не ошиблись ли мои предположения?Это имеет значение?Для удобочитаемости было бы проще хранить их как VARCHAR, такие как «SUBMITTED», «APPROVED», «REJECTED».Затем в коде PHP вместо проверки числового значения проверьте строку.

Я почти уверен, что в теории проверка на INT выполняется быстрее, чем на строку.Но заметно ли другое для веб-приложения?

Пожалуйста, сообщите.

Спасибо

Ответы [ 2 ]

4 голосов
/ 17 августа 2011

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

  • Значения вряд ли изменятся (например, пол: мужчина / женщина)
  • Значения могут измениться (например, категория: Местный / Национальный / Спортивный ...)

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

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

1 голос
/ 17 августа 2011

Используйте ENUM , чтобы использовать преимущества обоих подходов.

И если вы хотите использовать чистые числовые коды, не сравнивайте их с числами в PHP, определите константы:

define( 'SUBMITTED', 1 );
define( 'APPROVED', 2 );
define( 'REJECTED', 3 );

if( $code == APPROVED ) {
    //do something
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...