Используя [0,1] по сравнению с [“Y”, “N”] по сравнению с [“T”, “F”] в логическом/булевом поле базы данных?

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

Я просто смотрел на некоторые данные, которые отправляются от третьей стороны нам, и их поле "Gender" [0,1] обозначение или Розетка (0) или Штекер (1).

Там какая-либо лучшая причина состоит в том, чтобы использовать [0,1] по ["F", "M"]?

Это зависит от сценария и интуиции между полем и его значением?

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

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


Каковы различия в использовании [0,1] по сравнению с ["Y", "N"] по сравнению с ["T", "F"]?
11
задан Dave Jarvis 15 December 2009 в 17:43
поделиться

17 ответов

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

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

5
ответ дан 3 December 2019 в 00:49
поделиться

Что ж, в SQL Server это определенно имело бы значение. В этом случае вы должны использовать битовый тип столбца (1/0 или True / False - как бы вы это ни называли). Это всего лишь 1 бит памяти по сравнению с 1 байтом для char (1).

1
ответ дан 3 December 2019 в 00:49
поделиться

Действительно зависит от базы данных.

  • SQL Server использует бит
  • MySQL использует tinyint
  • Сохранение T / F будет как минимум char (1)
0
ответ дан 3 December 2019 в 00:49
поделиться

Короткий ответ - нет, поскольку один символ занимает то же место в памяти, что и целое число.

Подробный ответ: это зависит от того, как написано ваше приложение. Однажды я написал приложение, в котором поле пола в базе данных было равно 0 или 1, потому что на уровне приложения у меня было перечисление, которое сопоставляло Gender.Female и Gender.Male значениям 0 и 1 соответственно.

1
ответ дан 3 December 2019 в 00:49
поделиться

Разница в производительности будет незначительной. Выберите более интуитивно понятный для людей М / Ж.

2
ответ дан 3 December 2019 в 00:49
поделиться

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

2
ответ дан 3 December 2019 в 00:49
поделиться

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

2
ответ дан 3 December 2019 в 00:49
поделиться

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

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

4
ответ дан 3 December 2019 в 00:49
поделиться

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

7
ответ дан 3 December 2019 в 00:49
поделиться

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

3
ответ дан 3 December 2019 в 00:49
поделиться

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

2
ответ дан 3 December 2019 в 00:49
поделиться

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

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

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

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

22
ответ дан 3 December 2019 в 00:49
поделиться

Поскольку пол на самом деле не бинарный - существует непрерывный диапазон «интерсексных» состояний между мужчиной и женщиной, а также существами, не имеющими пола вообще - лучше использовать числа с плавающей запятой. тип. 0 для самок (по умолчанию, по крайней мере у млекопитающих), 1 для самцов с промежуточными значениями для промежуточных условий и NaN для тех, у которых нет значения.

Но помните, что это никогда не будет полностью применимо, потому что нет тип для человеческого сердца. Хотя комплекс часто является хорошим приближением.

0
ответ дан 3 December 2019 в 00:49
поделиться

Прочитав все это и проведя небольшое исследование, я пришел к выводу, что:

  • [0,1] поле полезно, потому что его международный и может быть расширен включить дополнительные пункты, когда связан со статической таблицей определения.

  • ["Y", "N"] и ["T", "F"], вероятно, признаны во всем мире, но связаны на английский язык.

  • ["M", "F"] поля гендерного типа На английском, а также ограничить использование при рассмотрении того, кто не хочет упоминать свой пол или чей пол неизвестен (гермафродит)

0
ответ дан 3 December 2019 в 00:49
поделиться

Почему бы не использовать перечисление? Это позволяет вам

  1. гарантировать, что вы всегда должны использовать правильный тип, потенциально уменьшая количество ошибок.
  2. позволяет базе данных потенциально оптимизировать количество используемых битов
  3. иметь удобочитаемый вывод бесплатно
2
ответ дан 3 December 2019 в 00:49
поделиться

Для флагов в записи я предпочитаю "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' означает Ложь / Нет - это не всегда так в электронике и в программном обеспечении, это зависит от того, насколько последовательным был программист и как хорошо названы поля. являются ...

1
ответ дан 3 December 2019 в 00:49
поделиться

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

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

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

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

3
ответ дан 3 December 2019 в 00:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: