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

Существуют ли причины для того, чтобы не сохранять логические значения в SQL в виде битовых типов данных?

Есть ли причины для того, чтобы не сохранять логические значения в SQL в виде битовых данных без NULL? Я вижу, что они часто хранятся в виде целых чисел без ограничений, чтобы ограничить значения 0 и 1, и как строки с такими вещами, как T/F, True/False, да/нет и т.д., Снова без ограничений. Разве не лучше хранить их как биты и не беспокоиться о дополнительных ограничениях? Что мне здесь не хватает?

4b9b3361

Ответ 1

Я бы всегда придерживался наименьшего типа данных, чтобы сохранить это.

  • SQLServer: BIT
  • Oracle: NUMBER (1) (или BOOLEAN в PL/SQL)
  • MySQL: TINYINT (iirc BOOLEAN соответствует этому автоматически)

Изменить: Oracle BOOLEAN - это только PL/SQL, а не определение таблицы. Обновленный ответ, чтобы отразить это.

Ответ 2

что обычно происходит по дороге, так это то, что кто-то хочет добавить также, возможно, да и нет, если у вас есть немного, то теперь вам нужно изменить весь свой код на tinyint

Если у вас был tinyint, чтобы начать, тогда вы не... поверьте мне, это происходит больше, чем вы думаете.

Ответ 3

Я вижу, что они часто хранятся как целые числа без ограничений для ограничения значений 0 и 1, и как строки с вещами как T/F, True/False, да/нет и т.д. снова без ограничений. Разве это не лучше хранить их как биты, а не придется беспокоиться о дополнительных ограничения?

Да!

Что мне здесь не хватает?

На самом деле это должно быть "что мне здесь не хватает?" и ответ будет следующим: здравый смысл.

Ответ 4

Когда я хочу booleans в базе данных, я всегда использую тип данных бит. В SQL они могут быть NULL. Но при запуске вашей программы вам придется учитывать, что bool (например, в С#) - это тип значения, который в этом случае не может быть NULL. Вам нужно будет сравнить значение System.DBNull.

Ответ 5

Мы всегда храним данные как немного, это мало, и, что более важно, это тот случай, для которого он предназначен.

Мы имели время, когда конечный пользователь собирался работать с данными напрямую, а для них Да/Нет или Y/N было более читаемым. В этом случае мы просто создали представление, отражающее более дружелюбный отображение данных.

Ответ 6

BIT - тип данных, обычно используемый для хранения значений BOOLEAN. Просто потому, что если BIT равно 1, то это истинно, а 0 - false. Это просто.

Ответ 7

Некоторые причины этого не включают:

Не все базы данных имеют бит типа данных, поэтому вы используете int вместо того, чтобы использовать разные бэкэнды

В некоторых базах данных вы не можете индексировать бит.

И часто то, что у вас есть, на самом деле не истинно/ложно, да/нет, без других возможностей. Например, у вас может быть поле бит для статуса, означающее нечто вроде открытого или закрытого. Но позже вы понимаете, что вам нужно отменить и статус.

Ответ 8

Используйте Enum, если у вас более двух статусов.

Ответ 9

одна причина заключается в том, что люди не знают о бит или считают, что y/n проще для форматирования. Другая причина в том, что иногда вы думаете: хм, возможно, со временем это будет больше, чем поле bool. и вы сделаете это int на всякий случай.

у вас ничего не пропало:)

Ответ 10

Я думаю, что в третьей форме нормализации будет указано, что у вас должна быть таблица, в которой хранятся значения True и False, и ссылайтесь на это. Убедитесь, что вы делаете это и с вашими датами.

Но кто все равно придерживается 3NF?;)

Ответ 11

Я использую бит много. Но иногда я хочу иметь возможность возвращать ложные или многие значения true (например, сообщения об ошибках). Поэтому, если я использую int вместо boolean, я могу сделать что-то вроде:

0 = False 1 = неверный пароль 2 = Имя пользователя не существует. 3 = Учетная запись заблокирована - для многих неудачных попыток. 4 = Учетная запись отключена.

И так далее.