En iyi seçenek 0 ve 1'dir (sayı olarak - başka bir cevap, alan verimliliği için CHAR olarak 0 ve 1'i önerir, ancak bu benim için biraz fazla bükülmüş), NOT NULL ve içeriği bu değerlerle sınırlamak için bir kontrol kısıtlaması kullanır. (Sütunun null yapılabilir olması gerekiyorsa, o zaman uğraştığınız bir boole değil, üç değerli bir numaralandırma ...)
0/1 avantajları:
- Dilden bağımsız. Herkes kullansaydı 'Y' ve 'N' iyi olurdu. Ama yapmıyorlar. Fransa'da 'O' ve 'N' kullanıyorlar (bunu kendi gözlerimle gördüm). Finlandiya'da orada 'E' ve 'K' kullanıp kullanmadıklarını görmek için program yapmadım - şüphesiz bundan daha akıllılar, ama emin olamazsınız.
- Yaygın olarak kullanılan programlama dillerinde (C, C ++, Perl, Javascript) pratikle uyumlu
- Uygulama katmanıyla daha iyi oynar, örneğin Hazırda Bekletme
- Örneğin, kaç muzun, hatta (yuk)
select sum(is_ripe) from bananas
yerine yemeye hazır olduğunu bulmak için daha kısa ve öz SQL'e select count(*) from bananas where is_ripe = 'Y'
götürür.select sum(case is_ripe when 'Y' then 1 else 0) from bananas
"Y" / "N" nin avantajları:
- 0 / 1'den daha az yer kaplar
- Oracle'ın önerdiği gibi, bazı insanların daha alışkın olduğu şey de olabilir
Başka bir poster performans kazanımları için 'Y' / null önerdi. Eğer ettiyseniz kanıtlanmış sonra performans, adil yeterli gerekir, ancak daha az doğal (sorgulama yapar beri aksi kaçınmanızı some_column is null
yerine some_column = 0
) ve bir sol Eğer varolmayan kayıtlarla sahtelik conflate edeceğiz katılmak.
wall
veri türü olsaydı, böylelikle booleleri kullanırken kafamı ona karşı parçalayabilirdim.