numérico o varchar???

27/11/2003 - 11:59 por Miguel Tubía | Informe spam
Hola,
una preguntita... cuando diseño una BD intento optimizar los tipos de datos,
y no poner un int cuando con un tinyint basta y sobra. Por eso, valores
numéricos grandes uso poquitos, e incluso soy reticente a ponerlos. Ahora
bien, me he dado cuenta que en algunos sitios se ponen, para valores grandes
(un número de 10 dígitos, como la cuenta bancaria) tipos varchar. Claro,
para uno de 10 cifras, q aguante hasta 9999999999 hace falta un bigint, q
son 8 bytes (lo q puede parecer mucho si la tabla va a tener muchos
registros). Mi pregunta es, ¿el tipo de datos varchar como lo almacena? ¿No
es un byte por cada carácter? (creo q sí pero no estoy seguro del todo). Es
q, en este caso, si se pone varchar pq bigint suena a mucha, no se ocuparán
8 bytes, sino 10 bytes!! y hay casos en los q puede ser peor... ¿Hay alguna
razón para usar alfanuméricos en vez de numéricos puros y duros?
Espero me saquen de la duda pq creo que es un mal ejemplo de diseño de BD q,
por lo q he visto, es más común de lo q pensamos. Espero q posteando esta
pregunta muchos nos demos cuenta de si en realidad hacemos mal poniendo como
varchar lo q se puede poner mucho mejor como numérico (yo lo he hecho muchas
veces por inercia, e incluso en la uni los profesores lo hacían!!)
Muchas gracias
un saludo

Preguntas similare

Leer las respuestas

#1 Accotto Maximiliano D.
27/11/2003 - 13:22 | Informe spam
Hola Miguel!! yo tengo otro criterio para hacer las cosas que es el
siguiente:

Si los datos q quiero en un campo seran numericos, entonces usare campos
numerircos
Si seran Alfanumericos usare Char o Varchar (no hacer mucho uso de este q no
es una panacea tampoco)

Esto lo hago porque lo primero q pongo como regla es una cosa basica q es mi
integridad y si pongo un varchar ahi voy a poder poner no solo numeros y
para q eso no suceda seguro q tendre entonces q hacer un chek o un trigger,
por lo cual lo veo en condiciones peores.

El char y Varchar guardan de a un Byte y tienen un maximo de 8.000, la
diferencia entre estos es que por ej:

Si un Char(20) solo se llenan 10 caracteres, este igual ocupara para el
motor 20Bytes
Ahora si un varchar(20) solo se llenan 10 caracteres, para el motor ocupara
10Bytes.

En el unico caso q cambio es en el siguiente:

Tipo de datos Booleano (yes,no,1-0) Esto es un quilombo siempre y mas cuando
pasas de motor en motor.

Entonces aca lo q si hago es un char(1) donde podes poner Y o N, listo el
pollo.

Un saludo como siempre


Maximiliano Damian Accotto
"Miguel Tubía" escribió en el mensaje
news:
Hola,
una preguntita... cuando diseño una BD intento optimizar los tipos de


datos,
y no poner un int cuando con un tinyint basta y sobra. Por eso, valores
numéricos grandes uso poquitos, e incluso soy reticente a ponerlos. Ahora
bien, me he dado cuenta que en algunos sitios se ponen, para valores


grandes
(un número de 10 dígitos, como la cuenta bancaria) tipos varchar. Claro,
para uno de 10 cifras, q aguante hasta 9999999999 hace falta un bigint, q
son 8 bytes (lo q puede parecer mucho si la tabla va a tener muchos
registros). Mi pregunta es, ¿el tipo de datos varchar como lo almacena?


¿No
es un byte por cada carácter? (creo q sí pero no estoy seguro del todo).


Es
q, en este caso, si se pone varchar pq bigint suena a mucha, no se


ocuparán
8 bytes, sino 10 bytes!! y hay casos en los q puede ser peor... ¿Hay


alguna
razón para usar alfanuméricos en vez de numéricos puros y duros?
Espero me saquen de la duda pq creo que es un mal ejemplo de diseño de BD


q,
por lo q he visto, es más común de lo q pensamos. Espero q posteando esta
pregunta muchos nos demos cuenta de si en realidad hacemos mal poniendo


como
varchar lo q se puede poner mucho mejor como numérico (yo lo he hecho


muchas
veces por inercia, e incluso en la uni los profesores lo hacían!!)
Muchas gracias
un saludo


Respuesta Responder a este mensaje
#2 Miguel Tubía
27/11/2003 - 13:32 | Informe spam
Hola!
nos vemos en todas :)
Gracias por responder.
Los booleanos yo los pongo como bit (1-0). El problema es q, según el
lenguaje del cliente, en algunos sitios el 1 es false y en otros (creo q la
mayoría) es true...
Como dices, es un pollo. Pensé lo del char(1), pero me comprendía cambiar
toda la base de datos en derarrollo y su código en el cliente... pero queda
apuntada para la próxima.
Ahora voy a comer... hasta la próxima!
Un saludo!
Respuesta Responder a este mensaje
#3 Accotto Maximiliano D.
27/11/2003 - 13:41 | Informe spam
justamente por eso uso char(1) entonces se acaban esos problemas que vos
comentas :-)



Maximiliano Damian Accotto
"Miguel Tubía" escribió en el mensaje
news:%23e8g$
Hola!
nos vemos en todas :)
Gracias por responder.
Los booleanos yo los pongo como bit (1-0). El problema es q, según el
lenguaje del cliente, en algunos sitios el 1 es false y en otros (creo q


la
mayoría) es true...
Como dices, es un pollo. Pensé lo del char(1), pero me comprendía cambiar
toda la base de datos en derarrollo y su código en el cliente... pero


queda
apuntada para la próxima.
Ahora voy a comer... hasta la próxima!
Un saludo!


Respuesta Responder a este mensaje
#4 Miguel Egea
27/11/2003 - 14:37 | Informe spam
Algunas veces hay motivos que sobrepasan la lógica, un teléfono por ejemplo
es número, pero algunos clientes no entienden que delante no les dejes poner
letras o parentesis o espacios. El criterio que dices es el correcto en mi
opinión, pero un varchar no ocupa lo que dice su número, solo lo ocuparía si
está lleno, por lo que al final puedes ganar un poco de espacio.
En cualquier caso lo mejor en estos casos según mi opinión es usar la
lógica.


Saludos

Miguel Egea
Microsoft SQL-SERVER MVP
Brigada Anti-Cursores
"Miguel Tubía" escribió en el mensaje
news:#e8g$
Hola!
nos vemos en todas :)
Gracias por responder.
Los booleanos yo los pongo como bit (1-0). El problema es q, según el
lenguaje del cliente, en algunos sitios el 1 es false y en otros (creo q


la
mayoría) es true...
Como dices, es un pollo. Pensé lo del char(1), pero me comprendía cambiar
toda la base de datos en derarrollo y su código en el cliente... pero


queda
apuntada para la próxima.
Ahora voy a comer... hasta la próxima!
Un saludo!


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida