Подтвердить что ты не робот

Почему это плохо для использования булевых флагов в базах данных? И что следует использовать вместо этого?

Я читал некоторые руководства по оптимизации базы данных и лучшим практикам, и многие из них предлагают не использовать логические флаги вообще в схеме БД (ex http://forge.mysql.com/wiki/Top10SQLPerformanceTips). Однако они никогда не приводят никаких причин, почему это плохо. Это проблема выбора? трудно ли индексировать или запросить правильно?

Кроме того, если логические флаги плохие, что вы должны использовать для хранения булевых значений в базе данных? Лучше ли хранить логические флаги как целое число и использовать битовую маску? Кажется, это было бы менее читаемо.

4b9b3361

Ответ 1

Я не думаю, что это плохо, и я никогда не видел причин, заявленных для этого. Возможно, некоторые старые механизмы баз данных не могли эффективно хранить их, но современные. Как вы говорите, гораздо удобнее использовать булевы, чем битмаски. См. Этот вопрос для аналогичного обсуждения: Является ли добавление битовой маски ко всем таблицам в базе данных полезной?

Ответ 2

Единственная причина, по которой я мог думать, - это случаи, когда вы должны использовать ENUM. Конечно, теперь вы хотите только true и false, но если вы захотите добавить что-то еще позже, чем вам нужно будет сделать операцию ALTER TABLE, что может быть очень дорого.

Ответ 3

Мое предположение: переносимость вашего дизайна.

например.

  • Microsoft Access рассматривает boolean как -1 как true или 0 как false, в то время как другие базы данных могут обрабатывать boolean иначе.

  • В MySQL (версия 4+) с другой стороны, значение нуля считается ложным. Ненулевые значения считаются истинными.

Ответ 4

Предоставленная практика базы данных имеет мало общего с теорией, я все равно попытаюсь теоретически объяснить. Таблицы - это конечные отношения. Каждое отношение является расширением предиката. Атрибут Boolean является неправильным для предиката.

Ответ 5

Этот поток предоставляет лучший ответ, который я нашел. Короче говоря, приближающиеся атрибуты как boolean препятствуют правильному и независимому моделированию данных (т.е. Нормализации). Лучшее решение - не только с точки зрения моделирования, но и с точки зрения простоты использования и простоты обслуживания - это использование дополнительных таблиц поиска. И если идея большего количества соединений и таблиц пугает вас, обязательно прочитайте весь поток.