Есть ли причины для того, чтобы не сохранять логические значения в SQL в виде битовых данных без NULL? Я вижу, что они часто хранятся в виде целых чисел без ограничений, чтобы ограничить значения 0 и 1, и как строки с такими вещами, как T/F, True/False, да/нет и т.д., Снова без ограничений. Разве не лучше хранить их как биты и не беспокоиться о дополнительных ограничениях? Что мне здесь не хватает?
Существуют ли причины для того, чтобы не сохранять логические значения в SQL в виде битовых типов данных?
Ответ 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 = Учетная запись отключена.
И так далее.