У меня есть (фиктивная) структура таблицы следующим образом:
ticket id: int(11) PK name: varchar(255) status: ?????????
Вопрос в том, какой тип данных я должен использовать для статуса? Вот мои варианты, как я их вижу:
- varchar, представляющий статус - BAD, потому что нет целостности
- перечисление, представляющее статус - BAD, потому что для изменения значения мне пришлось бы изменить таблицу, а затем любой код с выпадающими списками для значений и т.д. и т.д. и т.д.
- int FK в таблицу состояния - ХОРОШО, потому что он динамический, ПЛОХО, потому что его сложнее осмотреть (что может быть полезно)
- varchar FK в таблицу состояния - ХОРОШО, потому что он динамический и видимый при проверке. ПЛОХО, потому что ключи имеют смысл, что, как правило, неодобрительно. Интересно, что в этом случае вполне возможно, что таблица состояния имеет всего 1 столбец, что делает его прославленным перечислением
Имею ли я точное представление о ситуации? Имеет ли значимый ключ действительно так плохо? Потому что, хотя он и дает мне мурашки по коже, у меня нет причин для этого...
Update: Для варианта 4 предлагаемая структура будет статус: char (4) FK, в таблицу состояния. Итак,
ОТКРЫТО = > "Открыть"
CLOS = > "Закрыто"
"PEND" = > "Ожидание авторизации"
"PROG" = > "Выполняется
Какой недостаток в этом случае? Единственное преимущество, которое я вижу в использовании int over char, в этом случае - небольшая производительность.