¿Existen razones para no almacenar valores booleanos en SQL como tipos de datos de bit sin NULL? Los veo a menudo almacenados como enteros sin restricciones para limitar los valores a 0 y 1, y como cadenas con cosas como T/F, Verdadero/Falso, sí/no, etc., de nuevo sin restricciones. ¿No es mejor guardarlos como bits y no tener que preocuparse por restricciones adicionales? ¿Que me estoy perdiendo aqui?¿Hay razones para no almacenar valores booleanos en SQL como tipos de datos de bit?
Respuesta
Siempre había quedo con el tipo de datos más pequeño que pueda para almacenar esto.
- SQLServer: BIT
- Oracle: NÚMERO (1) (o BOOLEANA en PL/SQL)
- MySQL: TINYINT (mapas IIRC BOOLEANAS a esto automáticamente)
Editar: BOOLEANA de Oracle es PL/SQL solamente, no definición de tabla. Respuesta actualizada para reflejar esto
Una de las razones es que la gente no sabe de poco o cree que y/n es más fácil de formatear. otra razón es que a veces piensas: hmm quizás con el tiempo esto será más que un campo bool. y lo haces int por si acaso.
usted no está perdiendo nada :)
lo que normalmente ocurre en el camino es que alguien quiere añadir también un tal vez para sí y no, si usted tiene un poco, entonces ahora hay que cambiar todo el código a tinyint
si tuviera tinyint para comenzar con entonces no ... crea que esto sucede más de lo que piensas
Cuando quiero booleanos en la base de datos siempre uso el tipo de datos de bit. En SQL, pueden ser NULL. Pero cuando ejecuta su programa, tendrá que considerar que un bool (por ejemplo, en C#) es un tipo de valor que en este caso no puede ser NULL. Tendrá que comparar con el valor de System.DBNull.
¿No podría simplemente designar la variable como Nullable
lo convierten en NOT NULL en SQL ....... create table bla (bit de respuesta no nulo) – SQLMenace
el problema es lo que admite ADO.NET o algún otro marco de acceso a datos. si permite Nullable
Siempre almacenamos los datos como un poco, es pequeño, y más importante, este es el caso para el que está diseñado.
Hemos tenido momentos en los que el usuario final iba a trabajar con los datos directamente, y para ellos, sí/no o Y/N era más legible. En este caso, acabamos de crear una vista que refleje la visualización de datos más amigable.
Mis últimos 2 trabajos después de entregar mi primer proyecto me hicieron retroceder y cambiar todos los 0 a "N" y 1 a "T". Ambos tenían la misma razón. "Nunca podemos recordar cuál es cuál". Pensé que 0 = falso estaba computando 101 pero aparentemente es bastante común no saber. O tal vez es una señal de que no estoy escogiendo buenos lugares para trabajar. – dwidel
los veo a menudo se almacenan como enteros sin restricciones a los valores límite de 0 y 1, y como cadenas con cosas como T/F, Verdadero/Falso, sí/no, etc., de nuevo sin restricciones ¿No es mejor almacenarlos como bits y no tiene que preocuparse por las restricciones adicionales ?
Sí!
¿Qué es lo que falta aquí?
En realidad debería ser "¿Qué es lo que NO estoy perdiendo aquí?" y la respuesta sería: sentido común.
BIT es el tipo de datos normalmente utilizado para almacenar valores BOOLEAN. Simplemente porque si el BIT es 1, entonces es verdadero y 0, entonces es falso. Es así de simple.
Creo que la tercera forma de normalización indicaría que debe tener una tabla que almacene los valores True y False, y haga referencia a eso. ¡Asegúrate de hacer eso con tus fechas también!
Pero, ¿quién se adhiere por completo a 3NF de todos modos? ;)
Es posible que desee encontrar una fuente diferente para su definición de Tercera forma normal. No hay nada que indique que todos los valores en todas las columnas también se deben almacenar en tablas en alguna parte. –
Uso bit mucho. Pero a veces quiero poder devolver valores falsos o muchos valores verdaderos (como los mensajes de error). Entonces, si uso un int en lugar de booleano, puedo hacer algo como:
0 = Falso 1 = Contraseña incorrecta 2 = El nombre de usuario no existe. 3 = Cuenta bloqueada - para muchos intentos fallidos. 4 = Cuenta deshabilitada.
Y así sucesivamente.
Entonces eso no es un booleano. Es un valor de código. Un booleano por definición es verdadero o falso y no hay múltiples definiciones de verdadero. –
Como dije, uso mucho el bit. Luego di una solución alternativa. Y si lees mi publicación, dije que a veces utilizo un int en lugar de un booleano. –
Algunas de las razones para no hacerlo son:
No todas las bases de datos tienen un tipo de datos bit por lo que utilizar int en lugar de ser capaz de utilizar backends diferentes personas
En algunas bases de datos que no pueden indexar un campo de bits.
Y a menudo lo que tiene no es realmente verdadero/falso, sí/no sin otras posibilidades. Por ejemplo, puede tener un campo de bit para el estado que signifique algo así como abierto o cerrado. Pero luego te das cuenta de que también es necesario que canceles tu estado.
Use Enum si tiene más de dos estados.
- 1. Almacenar valores booleanos en SQL?
- 2. Rieles de base de datos valores booleanos
- 3. Operadores booleanos simples para indicadores de bit
- 4. Los booleanos tienen dos valores posibles. ¿Hay tipos que tienen tres valores posibles?
- 5. Haskell: Seguridad de tipos con diferentes valores booleanos lógicamente
- 6. ¿Cuál es la forma óptima de almacenar indicadores binarios/valores booleanos en cada motor de base de datos?
- 7. Razones para las diferencias SQL
- 8. ¿Cómo almacenar valores decimales en SQL Server?
- 9. ¿Cómo comprime el servidor SQL los tipos de datos de bit NULL?
- 10. Almacenar en Datos de Sesión vs almacenar en Base de Datos Sql para datos temporales
- 11. Estructura de datos de mapa en pl/sql para almacenar el par de valores clave?
- 12. ¿Hay razones para preferir matrices sobre ArrayLists?
- 13. Razones para no usar servidores enlazados en SQL Server?
- 14. ¿Hay un especificador de formato que funcione con valores booleanos?
- 15. Razones para no pasar tipos simples por referencia?
- 16. valores booleanos Objective C
- 17. Para tratar con valores 'booleanos' en PHP y MySQL
- 18. ¿Puede Microsoft almacenar campos de tres valores en un solo bit?
- 19. ¿Cuál es la mejor manera en Postgres para almacenar un grupo de valores booleanos arbitrarios para una fila?
- 20. SQL como valores
- 21. ¿Qué rango de valores pueden almacenar tipos enteros en C++
- 22. para almacenar datos XML como XML o en tablas normalizadas
- 23. ¿Hay alguna manera de almacenar múltiples tipos de datos en una única variable hashtable?
- 24. Cuál es una manera conveniente de almacenar y recuperar valores booleanos en un archivo CSV
- 25. ¿Cómo almacenar diferentes tipos de datos en una lista? (C++)
- 26. En SQL/MySQL, ¿hay razones para no poner una relación uno a uno en la misma tabla?
- 27. Tipo de datos SQL Server para almacenar solo el campo de tiempo como 09:10 etc.
- 28. ¿Qué tipo de datos debo usar para almacenar valores monetarios?
- 29. valores insertar en campos booleanos Solr
- 30. Boolean vs tinyint (1) para valores booleanos en MySQL
Re. "tipo de datos más pequeño disponible": los valores BIT de SQL Server no son realmente un ancho, sino múltiplos de un byte completo. Sin embargo, más de un BIT en la misma tabla se colapsó en el mismo almacenamiento. – Tomalak
MySQL también admite el tipo BIT, y sus requisitos de almacenamiento funcionan exactamente como explicó Tomalak. –
@Chad: columnas MySQL BIT son claramente diferentes de las columnas SQLServer BIT; un campo SQL Server BIT almacena solo un valor, y los campos BIT se combinan juntos cuando se almacenan si hay más de uno. Un campo BIT MySQL es una máscara de bits con 1 a 64 bits (según la declaración). – Powerlord