Почему плохо использовать логические флаги в базах данных?И что вместо этого следует использовать? - PullRequest
13 голосов
/ 15 июня 2010

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

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

Ответы [ 4 ]

6 голосов
/ 15 июня 2010

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

5 голосов
/ 15 июня 2010

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

1 голос
/ 15 июня 2010

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

например,

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

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

0 голосов
/ 27 августа 2010

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

...