Наилучшим вариантом являются 0 и 1 (в виде чисел - другой ответ предлагает 0 и 1 как CHAR для эффективности использования пространства, но для меня это слишком извращено), используя NOT NULL и проверочное ограничение для ограничить содержимое этими значениями. (Если вам нужно, чтобы столбец обнулялся, то вы имеете дело не с логическим значением, а с перечислением трех значений ...)
Преимущества 0/1:
- Язык не зависит. «Y» и «N» было бы хорошо, если бы все использовали это. Но они этого не делают. Во Франции они используют «O» и «N» (я видел это своими глазами). Я не программировал в Финляндии, чтобы увидеть, используют ли они там «E» и «K» - без сомнения, они умнее этого, но вы не можете быть уверены.
- Соответствует практике в широко используемых языках программирования (C, C ++, Perl, Javascript)
- Лучше играет на прикладном уровне, например Hibernate
- Приводит к более лаконичному SQL, например, чтобы узнать, сколько бананов готово к употреблению
select sum(is_ripe) from bananas
вместо select count(*) from bananas where is_ripe = 'Y'
или даже (юк) select sum(case is_ripe when 'Y' then 1 else 0) from bananas
Преимущества 'Y' / 'N':
- Занимает меньше места, чем 0/1
- Это то, что предлагает Oracle, так что, возможно, некоторые люди более привыкли к
Другой плакат предложил «Y» / ноль для повышения производительности. Если вы доказали , что вам нужна производительность, то достаточно справедливо, но в противном случае избегайте, так как это делает запросы менее естественными (some_column is null
вместо some_column = 0
) и в левом соединении вы будете ошибаться с несуществующими записями.