Этот ответ предназначен для стандартного SQL ISO / IEC / ANSI и включает лучшие бесплатные pretend-SQL.
Первая проблема в том, что вы определили две категории, а не одну, поэтому их нельзя сравнивать разумно.
A. Категория первая
(1) (4) и (5) содержат несколько возможных значений и относятся к одной категории. Все можно легко и эффективно использовать в предложении WHERE. У них одинаковое хранилище, поэтому ни хранилище, ни производительность чтения не являются проблемой. Поэтому оставшийся выбор просто основан на фактическом типе данных для цели столбца.
ENUM нестандартен; лучший или стандартный метод - использовать справочную таблицу; тогда значения видны в таблице, не скрыты, и могут быть перечислены любым инструментом отчета. Производительность чтения ENUM будет незначительно снижена из-за внутренней обработки.
B. Категория вторая
(2) и (3) являются двухзначными элементами: True / False; Мужской женский; Оживший мертвец. Эта категория отличается от первой категории. Его обработка как в вашей модели данных, так и в каждой платформе, различна. BOOLEAN - это просто синоним BIT, это одно и то же. Юридически (с точки зрения SQL) все платформы, совместимые с SQL, обрабатываются одинаково, и в предложении WHERE проблем нет.
Разница в производительности зависит от платформы. Sybase и DB2 упаковывают до 8 бит в один байт (здесь не имеет значения хранилище) и отображают степень двойки на лету, поэтому производительность действительно хорошая. Oracle делает разные вещи в каждой версии, и я видел, что разработчики моделей используют CHAR (1) вместо BIT, чтобы преодолеть проблемы с производительностью. MS был в порядке до 2005 года, но они сломали его с 2008 года, так как результаты непредсказуемы; поэтому краткий ответ может быть реализован как CHAR (1).
Конечно, предполагается, что вы не делаете глупостей, например, упаковываете 8 отдельных столбцов в один TINYINT. Это не только серьезная ошибка нормализации, но и кошмар для программистов. Держите каждый столбец дискретным и с правильным типом данных.
C. Несколько столбцов индикатора и Nullable
Это не имеет ничего общего с (A) и (B) и не зависит от них. То, что столбцы правильные Тип данных, зависит от того, сколько у вас есть и является ли он Nullable. Nullable означает (обычно) столбец не является обязательным. По сути, вы не выполнили упражнение по моделированию или нормализации. Функциональные зависимости неоднозначны. если вы выполните упражнение нормализации, не будет столбцов Nullable, необязательных столбцов; либо они явно существуют для определенного отношения, либо их не существует. Это означает использование обычной реляционной структуры супертипов-подтипов.
Конечно, это означает, что больше таблиц, но нет нулей. СУБД Enterpise не имеет проблем с большим количеством таблиц или объединений, для чего они оптимизированы. Нормализованные базы данных работают намного лучше, чем ненормализованные или денормализованные, и их можно расширять без «повторного факторинга». Вы можете упростить использование, предоставив представление для каждого подтипа.
Если вам нужна дополнительная информация по этому вопросу, посмотрите на этот вопрос / ответ . Если вам нужна помощь с моделированием, пожалуйста, задайте новый вопрос. На вашем уровне вопросов, я бы посоветовал вам придерживаться 5NF.
D. Производительность Nulls
Отдельно, если производительность важна для вас, исключите Nulls. Каждый столбец Nullable хранится как переменная длина; это требует дополнительной обработки для каждой строки / столбца. Корпоративные базы данных используют «отложенную» обработку для таких строк, чтобы позволить журналированию и т. Д. Перемещать очереди без ущерба для фиксированных строк. В частности, никогда не используйте столбцы переменной длины (включая столбцы Nullable) в индексе: для этого требуется распаковка при при каждом доступе .
E. Опрос
Наконец, я не вижу смысла в этом вопросе в опросе. Вполне справедливо, что вы получите технические ответы и даже мнения, но опросы предназначены для конкурсов популярности, а технические возможности респондентов в SO охватывают очень широкий диапазон, поэтому самые популярные ответы и наиболее технически правильные ответы находятся на двух разных Концы спектра.