La meilleure option est 0 et 1 (en tant que chiffres), en utilisant NOT NULL et une contrainte de contrôle pour limiter le contenu à ces valeurs. (Si vous avez besoin que la colonne soit nullable, alors ce n'est pas à un booléen que vous avez affaire mais à une énumération à trois valeurs...)
Avantages de 0/1 :
- Indépendant de la langue. "Y" et "N" seraient parfaits si tout le monde les utilisait. Mais ce n'est pas le cas. En France, ils utilisent "O" et "N" (je l'ai vu de mes propres yeux). Je suppose que les Finlandais ne sont pas assez stupides pour utiliser le " E " et le " K ", mais je ne m'y fierais pas trop.
- Congruence avec la pratique de langages de programmation largement utilisés (C, C++, Perl, Javascript).
- Joue mieux avec la couche applicative, par exemple Hibernate.
- conduit à un SQL plus succinct, par exemple, pour savoir combien de bananes sont prêtes à être consommées.
select sum(is_ripe) from bananas
au lieu de select count(*) from bananas where is_ripe = 'Y'
ou même (yuk) select sum(case is_ripe when 'Y' then 1 else 0) from bananas
Avantages de 'Y'/'N' :
- Occupe moins d'espace que 0/1
- C'est ce qu'Oracle suggère, et c'est peut-être ce à quoi certaines personnes sont plus habituées.
Une autre affiche a suggéré 'Y'/null pour des gains de performance. Si vous avez prouvé que vous avez besoin des performances, alors c'est normal, mais sinon évitez-la car elle rend les requêtes moins naturelles ( some_column is null
au lieu de some_column = 0
) et dans une jointure gauche vous allez confondre la fausseté avec des enregistrements inexistants.