A melhor opção é 0 e 1 (como números - outra resposta sugere 0 e 1 como CHAR para eficiência de espaço, mas isso é um pouco distorcido para mim), usando NOT NULL e uma restrição de verificação para limitar o conteúdo a esses valores. (Se você precisa que a coluna seja anulável, não é um booleano com o qual você está lidando, mas uma enumeração com três valores ...)
Vantagens de 0/1:
- Linguagem independente. 'Y' e 'N' ficariam bem se todos usassem. Mas eles não. Na França, eles usam 'O' e 'N' (eu já vi isso com meus próprios olhos). Não programei na Finlândia para ver se eles usam 'E' e 'K' lá - sem dúvida, são mais espertos do que isso, mas você não pode ter certeza.
- Congruente com a prática em linguagens de programação amplamente usadas (C, C ++, Perl, Javascript)
- Joga melhor com a camada de aplicação, por exemplo, Hibernate
- Leva a SQL mais sucinto, por exemplo, para descobrir quantas bananas estão prontas para comer em
select sum(is_ripe) from bananas
vez de select count(*) from bananas where is_ripe = 'Y'
ou mesmo (yuk)select sum(case is_ripe when 'Y' then 1 else 0) from bananas
Vantagens de 'Y' / 'N':
- Ocupa menos espaço que 0/1
- É o que a Oracle sugere, então pode ser o que algumas pessoas estão mais acostumadas
Outro pôster sugeria 'Y' / nulo para ganhos de desempenho. Se você provou que precisa do desempenho, é justo o suficiente, mas evite, pois isso torna a consulta menos natural (em some_column is null
vez de some_column = 0
) e em uma junção esquerda, você confundirá a falsidade com registros inexistentes.
wall
tipo de dados para poder esmagar minha cabeça ao usar booleanos.