Campo bool o booleano en tabla de sql server

09/09/2008 - 16:48 por Pedro | Informe spam
Quiero un campo en una tabla que me represente un flag o valor bool (true o
false). Cuales es la mejor alternativa? Bit? Tinyint? Char?

Preguntas similare

Leer las respuestas

#6 Maxi Accotto
12/09/2008 - 01:39 | Informe spam
Si es cierto, pero bit no siempre es facil de manejar desde las aplicaciones
o bien cuando necesitas ir hacia otros motores, char(1) es mas standard :)


Saludos
Maxi Accotto
Microsoft MVP en SQLServer
SQltotalconsulting
-

"Waldo" <[waldodj2000] a r r o b a [yahoo Punto com Punto ar]> escribió en
el mensaje de noticias:
Para mi lo mas efectivo seria usar Bit.

Segun Libros de SQL:

********************************************************************
Bit:
Tipo de datos entero 1, 0 ó NULL.
Observaciones
Microsoft® SQL ServerT optimiza el almacenamiento que utilizan las
columnas de tipo bit. Si hay 8 ó menos columnas de tipo bit en una tabla,
las columnas se almacenan como 1 byte. Si hay entre 9 y 16 columnas de
tipo bit, se almacenan como 2 bytes y así sucesivamente.

********************************************************************

Osea que si en una tabla tenes hasta 8 columnas bit, solo ocuparas 1 byte.

Pero si lo guardas como char(1) vas a usar 8 bytes.

Saludos

Waldo


Respuesta Responder a este mensaje
#7 Waldo
12/09/2008 - 15:26 | Informe spam
Ah, eso puede ser
Respuesta Responder a este mensaje
#8 Gustavo Larriera (MVP)
13/09/2008 - 01:01 | Informe spam
No comparto tu idea, querido amigo Maxi.

Usar 'S' o 'N' no es demasiado bueno. Imaginemos que la base es usada por
personas que hablen inglés por ejemplo... además de lidiar con la
sensibilidad de mayúsculas/minúsculas, además de tener que poner más
"inteligencia" en las aplicaciones para enteneder que 'S' es verdadero y 'N'
es falso.

Si no se quiere usar BIT por una cuestión de ser un tipo demasiado
propietario de SQL Server, entonces es preferible usar algún tipo integer que
es un tipo de datos disponible en cualquier sistema.

Y luego almacenar con 0 (FALSE) y un valor no-cero para TRUE (prefiero 1),
siguiendo la idea clásica de C90.

Gustavo Larriera, Microsoft MVP
http://www.linkedin.com/in/gustavolarriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Maxi Accotto" wrote:

Hola, yo uso char(1) y pongo S o N.


Saludos
Maxi Accotto
Microsoft MVP en SQLServer
SQltotalconsulting
-

"Pedro" escribió en el mensaje de
noticias:
> Quiero un campo en una tabla que me represente un flag o valor bool (true
> o false). Cuales es la mejor alternativa? Bit? Tinyint? Char?
>
>
>

Respuesta Responder a este mensaje
#9 Carlos M. Calvelo
13/09/2008 - 01:45 | Informe spam
Hola Gustavo,

On 13 sep, 01:01, Gustavo Larriera (MVP)
wrote:
No comparto tu idea, querido amigo Maxi.

Usar 'S' o 'N' no es demasiado bueno. Imaginemos que la base es usada por
personas que hablen inglés por ejemplo... además de lidiar con la
sensibilidad de mayúsculas/minúsculas, además de tener que poner más
"inteligencia" en las aplicaciones para enteneder que 'S' es verdadero y 'N'
es falso.

Si no se quiere usar BIT por una cuestión de ser un tipo demasiado
propietario de SQL Server, entonces es preferible usar algún tipo integer que
es un tipo de datos disponible en cualquier sistema.

Y luego almacenar con 0 (FALSE) y un valor no-cero para TRUE (prefiero 1),
siguiendo la idea clásica de C90.




Otras consideraciones:

Si se tienen muchas columnas de este tipo habrá que considerar el
espacio que ocupan (mejor usar BIT). Si se suelen pedir muchos
registros
a la vez habrá que considerar la eficiencia. Supongo que cuesta mas
'empaquetar' y 'desempaquetar' los BIT (que, creo, resultan en tipo
numérico (int?)), que simplemente tener INT.
(No lo sé. Solo un par de ideas, porque habría que hacer pruebas)

En cuanto al razonamiento del idioma, tambien se puede tener '0' y '1'
(char) en vez de 0 y 1 (int). O 'T' / 'F'

Y, last but no least, no se pueden definir índices con columnas tipo
BIT.

Saludos,
Carlos
Respuesta Responder a este mensaje
#10 Carlos M. Calvelo
13/09/2008 - 02:08 | Informe spam
Ah!
Y crear un User defined type 'Boolean' con una restricción (rule)
y usar ese tipo consecuentemente a la hora de definir las tablas.

Por ejemplo 'Boolean' basado en char(5) y con una restricción
@value IN ('true', 'false')

Saludos,
Carlos
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida