Использование [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 ]

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

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

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

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

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

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

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

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

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

0 голосов
/ 16 декабря 2009

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

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

0 голосов
/ 16 декабря 2009

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

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

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

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

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

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

  • SQL Server использует бит
  • MySQL использует tinyint
  • Хранение T / F будет, по крайней мере, символом (1)
...