Только из любопытства и отсутствия определенного ответа...
Я просто смотрел на некоторые данные, которые отправляются от третьей стороны нам, и их поле "Gender" [0,1] обозначение или Розетка (0) или Штекер (1).
Там какая-либо лучшая причина состоит в том, чтобы использовать [0,1] по ["F", "M"]?
Это зависит от сценария и интуиции между полем и его значением?
Скорости доступа к данным и/или ограничения размера?
Если луна полна?
Основным преимуществом является то, что столбец, допускающий более двух значений, может быть расширен естественным образом, если ваши предположения изменятся.
Кроме того, с философской точки зрения наши представления о гендере / сексуальности гораздо шире. жидкости, чем учитывается в бинарном поле. Например, меня наняли для исправления крупного правительственного приложения в Массачусетсе, когда были приняты законы об однополых браках, потому что было сделано много предположений относительно брака, которые позже были признаны недействительными.
Что ж, в SQL Server это определенно имело бы значение. В этом случае вы должны использовать битовый тип столбца (1/0 или True / False - как бы вы это ни называли). Это всего лишь 1 бит памяти по сравнению с 1 байтом для char (1).
Действительно зависит от базы данных.
Короткий ответ - нет, поскольку один символ занимает то же место в памяти, что и целое число.
Подробный ответ: это зависит от того, как написано ваше приложение. Однажды я написал приложение, в котором поле пола в базе данных было равно 0 или 1, потому что на уровне приложения у меня было перечисление, которое сопоставляло Gender.Female и Gender.Male значениям 0 и 1 соответственно.
Разница в производительности будет незначительной. Выберите более интуитивно понятный для людей М / Ж.
Если вас действительно, очень, очень беспокоят ограничения размера, [0,1] сэкономит вам несколько бит.
Нет, если вы не хотите перейти к уровню битов для каждой записи. Я имею в виду, что вы можете поместить 0 или 1 в один бит, в то время как символ занимает 8 бит. По большей части это того не стоит.
Я думаю, что «M» или «F» более ясны, потому что они предоставляют больше семантической информации.
Разве мы не упускаем из виду очевидное использование -> внешних ключей? Я знаю, что исходный вопрос подразумевал битовое поле, но если он действительно числовой, может ли столбец пола 0,1 относиться к таблице полов?
Я бы создал определяемый пользователем тип в sql или класс перечисления в c # / vb и сохранил 0,1 в базе данных по ранее заявленным причинам размера и скорости.
Что ж, сравнение Ints немного проще, чем сравнение строк; при сравнении строк вы должны учитывать прописные и строчные буквы.
Лучше использовать 0 и 1 вместо F и M, если вы хотите запутать свои данные, чтобы другим программистам было сложно их понять.
В противном случае нет, нет никакого преимущества .
Кроме того, я могу поставить вам серьезный недостаток. Я работаю над приложением, которое занимается свиньями. Самцов свиней, как и некоторых других самцов животных, кастрируют, если они собираются использовать в пищу, а не разведение, потому что это улучшает качество мяса.
Изначально приложение отслеживало только самцов и самок. Но теперь нам нужно отследить три разных пола: самца, самку и курган (термин для кастрированной свиньи). Было бы больно изменить это, если бы кто-то решил использовать 0 и 1 в битовом поле для пола.
Поскольку пол на самом деле не бинарный - существует непрерывный диапазон «интерсексных» состояний между мужчиной и женщиной, а также существами, не имеющими пола вообще - лучше использовать числа с плавающей запятой. тип. 0 для самок (по умолчанию, по крайней мере у млекопитающих), 1 для самцов с промежуточными значениями для промежуточных условий и NaN для тех, у которых нет значения.
Но помните, что это никогда не будет полностью применимо, потому что нет тип для человеческого сердца. Хотя комплекс часто является хорошим приближением.
Прочитав все это и проведя небольшое исследование, я пришел к выводу, что:
[0,1] поле полезно, потому что его международный и может быть расширен включить дополнительные пункты, когда связан со статической таблицей определения.
["Y", "N"] и ["T", "F"], вероятно, признаны во всем мире, но связаны на английский язык.
["M", "F"] поля гендерного типа На английском, а также ограничить использование при рассмотрении того, кто не хочет упоминать свой пол или чей пол неизвестен (гермафродит)
Почему бы не использовать перечисление? Это позволяет вам
Для флагов в записи я предпочитаю "Y" / "N" или "T" / "F" вместо 1/0.
Если вы хотите сформулировать флаг как вопрос, использование Y / N дает понять, что «Y» согласен дает положительный ответ на вопрос, а «N» означает отрицательный ответ, например,
SHOULD_SPECIAL_DISCOUNT_APPLY - Y or N
Если вы хотите сформулировать флаг как положительное утверждение, T / F понятнее. T - означает, что утверждение истинно, F означает, что утверждение ложно:
SPECIAL_DISCOUNT_APPLIES - T or F
0 или 1 не имеют прямого сопоставления с True или False - это зависит от того, в каком направлении оно подразумевается. Вы не можете гарантировать, что '1' означает Истина / Да, а '0' означает Ложь / Нет - это не всегда так в электронике и в программном обеспечении, это зависит от того, насколько последовательным был программист и как хорошо названы поля. являются ...
Любопытно, что noboby упомянул языки.
M / F подходит для английского, но как насчет других языков?
Опять же, вы всегда можете возразить, что для списков следует использовать другую таблицу.
Хотя здесь мы создаем сложное решение.
Битовое (или логическое) поле должно использоваться только тогда, когда есть окончательно только 2 варианта.
Мои два цента.