Использование [0,1] против ["Y", "N"] против ["T", "F"] в логическом / логическом поле базы данных? - PullRequest
11 голосов
/ 15 декабря 2009

Просто из любопытства и отсутствия однозначного ответа ...

Я только что посмотрел на некоторые данные, которые были отправлены нам от третьей стороны, и их поле "Пол" - это [0,1], обозначающее либо Женское (0), либо Мужское (1).

Есть ли лучшая причина использовать [0,1] над ["F", "M"]?

Зависит ли это от сценария и интуитивности поля и его значения?

Скорость доступа к данным и / или ограничения размера?

Если луна полная?


Каковы различия в использовании [0,1] по сравнению с ["Y", "N"] по сравнению с ["T", "F"]?

Ответы [ 17 ]

22 голосов
/ 15 декабря 2009

Лучше использовать 0 и 1 вместо F и M, если вы хотите запутать свои данные, чтобы другим программистам было трудно их понять.

В противном случае нет никакого преимущества.

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

Приложение изначально отслеживало мужчин и женщин. Но теперь нам нужно отследить три разных пола: самец, самка и курган (термин для кастрированной свиньи). Было бы больно менять это, если бы кто-то решил использовать 0 и 1 в битовом поле для секса.

7 голосов
/ 15 декабря 2009

Разве мы не пропускаем очевидное использование -> внешних ключей? Я знаю, что в исходном вопросе подразумевается битовое поле, но если оно действительно числовое, может ли столбец с полами 0,1 сослаться на таблицу полов?

4 голосов
/ 15 декабря 2009

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

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

4 голосов
/ 15 декабря 2009

Нет, если вы не хотите опуститься до уровня битов для каждой записи. Я имею в виду, что вы можете поместить 0 или 1 в один бит, в то время как символ занимает 8 бит. По большей части это того не стоит.

Я думаю, что "M" или "F" более понятны, потому что они предоставляют больше семантической информации.

3 голосов
/ 15 декабря 2009

Любопытно, что нобобы упомянул языки.
M / F хорошо на английском, а как на других языках?

С другой стороны, вы всегда можете утверждать, что для списков должна использоваться другая таблица.
Хотя здесь мы создаем сложное решение.

Битовое (или логическое) поле должно использоваться только в том случае, если есть только 2 варианта.

Мои два цента.

3 голосов
/ 15 декабря 2009

Я бы создал определенный пользователем тип в sql или перечислимый класс в c # / vb и сохранил бы 0,1 в базе данных по ранее указанным причинам размера и скорости.

2 голосов
/ 15 декабря 2009

Если вы действительно, действительно, очень беспокоитесь об ограничениях размера, [0,1] сэкономит вам несколько бит.

2 голосов
/ 15 декабря 2009

Ну, сравнивать Ints немного проще, чем сравнивать Strings; при сравнении строк необходимо учитывать прописные и строчные буквы.

2 голосов
/ 15 декабря 2009

Различия в производительности будут тривиальными. Пойдите с более интуитивным для людей M / F.

2 голосов
/ 15 декабря 2009

Это действительно не имеет значения.

...