Я недавно работал со многими базами данных, которым требуется много статусов, и у меня есть несколько заметок, которые, возможно, стоит добавить к беседе.
INT : Одна вещь, которую я обнаружил, состоит в том, что, если в приложении много отслеживания, число справочных таблиц может быстро стать громоздким и, как вы упомянули, проверять базу данных на взгляд непрактичный. (Что для некоторых моих клиентов имело значение гораздо больше, чем скудные миллисекунды, которые он экономил во время обработки.)
VARCHAR : ужасная идея для программирования, но важно учитывать, действительно ли данный статус будет использоваться кодом или просто человеческими глазами. В последнем случае вы получаете неограниченный диапазон и не должны поддерживать никаких отношений.
CHAR (4) : Использование описательного столбца char может быть очень хорошим подходом. Обычно я рассматриваю это только в том случае, если диапазон значений будет низким и очевидным, но только потому, что я считаю это нестандартным подходом (риск путаницы с новыми разработчиками). Реально, вы можете использовать значение CHAR в качестве внешнего ключа точно так же, как INT, получить удобочитаемость и сохранить паритет производительности.
Единственное, что вы не могли бы сделать, что я пропустил, - это математические операции (например, «<» и «>»).
Диапазон INT : гибридная стратегия, которую я опробовал, заключается в использовании INT, но с добавлением степени семантики к числам. Так, например,
1-10 being for initial stages,
11-20 being in progress, and
21-30 being the final stages.
60-69 for errors, rejections
Проблема здесь в том, что если вы обнаружите, что вам нужно больше чисел, вы СОЛ, так как следующий диапазон уже занят. Итак, в итоге я (вроде) имитировал HTTP-ответы:
100-199 being for initial stages,
200-299 being in progress, and
300-399 being the final stages.
500-599 for errors, rejections
Я предпочитаю это простому INT, и хотя оно может быть менее наглядным, чем CHAR, оно также может быть менее двусмысленным. В то время как «PROG» может означать множество вещей, хороших, плохих или доброкачественных, если я увижу, что что-то находится в диапазоне 500, я, возможно, не знаю, в чем проблема, я смогу сказать вам, что is проблема.