Es muy corriente que cuando en una columna se almacenarán solamente números se la defina como numérica. Pero…¿es eso correcto?

Por ejemplo, el Número del Documento de Identidad, el Número de Teléfono, el Código de Barras de un producto mucha gente los define como numéricos.

¿Es correcto hacer así?

La ventaja es que en general ocupará menos espacio en el disco duro ya que casi siempre un valor numérico ocupa menos espacio que su equivalente alfanumérico. Además debemos recordar que si una columna es de tipo CHAR usará siempre la cantidad total de caracteres que se le definió, en cambio si es VARCHAR usará los necesarios para guardar los caracteres insertados más un carácter adicional cuyo valor ASCII es cero y que sirve para indicar donde termina la cadena alfanumérica.

Ejemplo 1:

Se quiere guardar números entre 0 y 9.

Como SMALLINT se usarán 2 bytes

Como CHAR se usará 1 byte

Como VARCHAR se usarán 2 bytes (el número introducido más el caracter con código ASCII igual a cero)

Ejemplo 2:

Se quieren guardar números entre 0 y 100.

Como SMALLINT se usarán 2 bytes

Como CHAR se usarán 3 bytes

Como VARCHAR se usarán 2 bytes (cuando el número esté entre 0 y 9), 3 bytes (cuando el número esté entre 10 y 99), ó 4 bytes (cuando el número sea 100)

Ejemplo 3:

Se quieren guardar números entre 0 y 10.000

Como SMALLINT se usarán 2 bytes

Como CHAR se usarán 5 bytes

Como VARCHAR se usarán 2 bytes (cuando el número esté entre 0 y 9), 3 bytes (cuando el número esté entre 10 y 99), 4 bytes (cuando el número esté entre 100 y 999), 5 bytes (cuando el número esté entre 1.000 y 9.999), ó 6 bytes (cuando el número sea 10.000)

Como podemos ver, salvo que los números a guardar estén entre 0 y 9 lo conveniente es usar SMALLINT.

Sin embargo, no tiene sentido definir una columna como numérica si no se la utilizará en operaciones matemáticas. Si no vas a estar sumando o restando Documentos de Identidad o Números de Teléfono lo correcto es que esa columna la definas como alfanumérica, aún cuando ocupará más espacio en el disco duro. Con los discos duros gigantescos que tenemos ahora eso no es un problema.

Índices numéricos

Cuando una columna numérica se usa en un índice siempre (con excepción de BIGINT) se guarda como doble precisión. ¿Por qué? porque entonces si se cambia la precisión o la escala de esa columna no será necesario recrear el índice correspondiente. Y eso te ahorrará mucho tiempo en tablas que tienen millones de filas.

Como doble precisión se almacena con 64 bits (o sea: 8 bytes) si el número tiene menos de 8 dígitos y no lo vas a usar en operaciones matemáticas guardarlo como CHAR te permitirá ahorrar espacio en el disco duro y además hará a tu índice un poco más rápido.

Espacio en el disco duro

Si necesitas tener un índice por Número de Documento de Identidad o por Número de Teléfono y la cantidad de dígitos es mayor que 8 entonces definir la columna como numérica ahorrará espacio en el disco duro. Pero si la cantidad de dígitos es menor que 8 entonces es mejor que la columna sea CHAR o VARCHAR.

Conclusión:

Elegir el tipo de datos adecuado depende de tres factores:

  1. si la columna usará en operaciones matemáticas
  2. de la cantidad de dígitos que se guardarán
  3. si se usará la columna en un índice o no

Si no se usará la columna en operaciones matemáticas, por claridad y para evitar confusiones lo mejor es definirla como alfanumérica aún cuando en algunos casos se desperdicie espacio en el disco duro

Si se la usará en operaciones matemáticas, debería ser numérica

Si el número tiene menos de 8 dígitos y se lo usará en un índice y no se lo usará en operaciones matemáticas entonces es mejor definirlo como CHAR o VARCHAR.

Artículo relacionado:

El índice del blog Firebird21

 

Anuncios