Найкращий варіант - 0 і 1 (як цифри - інша відповідь пропонує 0 і 1 як ЗАРІБ для просторової ефективності, але це для мене трохи закручено), використовуючи NOT NULL і обмеження перевірки, щоб обмежити вміст цими значеннями. (Якщо вам потрібно, щоб стовпчик був нульовим, то це не булева ситуація, з якою ви маєте справу, а перерахування з трьома значеннями ...)
Переваги 0/1:
- Мова незалежна. "Y" і "N" було б добре, якби всі користувалися ним. Але вони цього не роблять. У Франції вони використовують "O" і "N" (я це бачив на власні очі). Я не програмував у Фінляндії, щоб побачити, чи вони там використовують "E" і "K" - без сумніву, вони розумніші за це, але ви не можете бути впевнені.
- Погоджується з практикою широко використовуваних мов програмування (C, C ++, Perl, Javascript)
- Краще грає з шаром програми, наприклад, в сплячому режимі
- Приводить, наприклад, більш лаконічний 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" / null для підвищення продуктивності. Якщо ви довели, що вам потрібна продуктивність, то досить справедливо, але в іншому випадку уникайте, оскільки це робить запит менш природним ( some_column is null
замість some_column = 0
), а в лівому приєднанні ви будете суперечити помилковості з неіснуючими записами.
wall
тип даних, щоб я міг бити голову об нього під час використання булів.