La mejor opción es el 0 y el 1 (como números), usando NOT NULL y una restricción de verificación para limitar los contenidos a esos valores. (Si necesitas que la columna sea nula, entonces no se trata de una booleana sino de una enumeración con tres valores...)
Ventajas del 0/1:
- Independiente del idioma. La 'Y' y la 'N' estarían bien si todos la usaran. Pero no lo hacen. En Francia usan la 'O' y la 'N' (lo he visto con mis propios ojos). Supongo que los finlandeses no son tan tontos como para usar 'E' y 'K', pero yo no apostaría demasiado por ello.
- Congruente con la práctica en los lenguajes de programación ampliamente utilizados (C, C++, Perl, Javascript)
- Juega mejor con la capa de aplicación, por ejemplo, Hibernar
- Lleva a un SQL más sucinto, por ejemplo, para averiguar cuántos plátanos están listos para comer
select sum(is_ripe) from bananas
en lugar de select count(*) from bananas where is_ripe = 'Y'
o incluso (yuk) select sum(case is_ripe when 'Y' then 1 else 0) from bananas
Ventajas del 'Y'/'N':
- Ocupa menos espacio que 0/1
- Es lo que sugiere el Oráculo, así que podría ser lo que algunas personas están más acostumbradas a
Otro póster sugería 'Y'/null para mejorar el rendimiento. Si usted ha probado que necesita la actuación, entonces es justo, pero por lo demás evítelo ya que hace que la consulta sea menos natural ( some_column is null
en lugar de some_column = 0
) y en una unión a la izquierda mezclarás la falsedad con los registros inexistentes.