Como la cantidad de datos de una empresa típica ha crecido exponencialmente, se ha vuelto aún más crítico optimizar el almacenamiento de datos. El tamaño de sus datos no solo afecta el tamaño y los costos del almacenamiento, sino que también afecta el rendimiento de las consultas. Un factor clave para determinar el tamaño de sus datos es el tipo de datos que seleccione. Este tutorial explicará cómo seleccionar los tipos de datos correctos.
¿Qué son los tipos de datos?
Tipos de datos defina qué tipo y rango de datos se pueden almacenar en un campo (o columna) determinado.
Considere una tabla de ventas con estos registros de muestra:
Cada campo tiene su propio tipo y rango de valores:
tiempo_de_compra :fecha y hora de la ventasale_id :valores enteros que se incrementan en uno por cada nueva venta customer_id :valores enteros que se incrementan en uno por cada nueva moneda del cliente :texto siempre en el código de moneda de 3 caracteres amount_paid :valores numéricos reales monetarios entre $0.00 y $1,000.00dispositivo :texto, donde los valores pueden ser:'escritorio', 'aplicación móvil' y 'web móvil'has_discount :booleano donde las entradas pueden ser TRUE
o FALSE
notas :texto, donde la entrada puede ser tan larga como lo permite nuestra herramienta de entrada de agentes (250 caracteres)
El tipo de datos (enteros, texto, números reales, etc.) y los rangos de valores posibles (0 a 1000; 3 caracteres cualesquiera; etc.) corresponden a tipos de datos específicos de la base de datos. .
¿Cuáles son los tipos de datos posibles?
Diferentes bases de datos tienen diferentes tipos de datos disponibles, pero la mayoría encaja en estas categorías:
Numérico:
- enteros :para números sin fracciones. Puede estar firmado (permite valores positivos y negativos) o sin firmar (solo permite números positivos). Comúnmente utilizado para campos de identificación y recuentos de algo
- decimal(x,y) :para números con fracciones que requieren precisión exacta. Puede estar firmado (permite valores positivos y negativos) o sin firmar (solo permite números positivos). Comúnmente utilizado para campos monetarios. El usuario especifica el número de dígitos significativos permitidos en total (x) y después del punto decimal (y) entre paréntesis
- flotante / dobles :para números con fracciones que no requieren precisión exacta. Puede estar firmado (permite valores positivos y negativos) o sin firmar (solo permite números positivos). Comúnmente utilizado para todos los números reales excepto los campos monetarios
Fecha/hora:
fecha :para valores de fecha
- tiempo :para valores de tiempo
- marca de tiempo/fechahora :para valores de fecha y hora
Texto:
- personaje(s) :para cadenas de caracteres de longitud fija, donde el valor entre paréntesis dicta el tamaño fijo de cada entrada
- varchar(n) :para cadenas de caracteres de longitud variable, donde el valor entre paréntesis dicta el tamaño máximo aceptado de cada entrada
Booleano:
- booleano :para valores booleanos (verdadero/falso). Algunas bases de datos (como MySQL) no tienen un tipo de datos booleano y en su lugar convierten los valores booleanos en números enteros (1=VERDADERO, 0 =FALSO)
La mayoría de las bases de datos ofrecen variaciones de tamaño para cada tipo. Por ejemplo, MySQL proporciona estos posibles tipos de datos enteros:
Cómo seleccionar los tipos de datos correctos
La estrategia básica para seleccionar el mejor tipo de datos es seleccionar el tipo de datos más pequeño que coincida con el tipo de datos que tiene y que permita todos los valores factibles de sus datos.
Por ejemplo, customer_id
en nuestra tabla de ventas de muestra hay un número entero que comienza con 0. Hoy en día, nuestra empresa ficticia solo tiene 15,000 clientes. Usando la tabla de tipos de datos enteros de MySQL de la sección anterior, podemos tener la tentación de seleccionar SMALLINT
unsigned como el tipo de datos, ya que ese es el tipo de datos más pequeño que aceptará nuestros valores enteros actuales de 0 a 15,000. Sin embargo, esperamos llegar a 100.000 clientes en los próximos 6 a 12 meses. Cuando superamos los 65.535, el SMALLINT
ya no será suficiente. Por lo tanto, una mejor selección es MEDIUMINT
sin firmar, que debería cubrirnos durante los próximos años.
Puede dejar que su base de datos seleccione los tipos de datos por usted al crear su tabla con registros de muestra. Sin embargo, esto rara vez le dará la mejor selección de tipo de datos. Por ejemplo, dejar que MySQL seleccione los tipos de datos para una tabla de ventas con los valores de muestra mostrados anteriormente genera varios problemas.
Los problemas que encontramos con los tipos de datos que MySQL selecciona automáticamente son:
- tipo de datos incorrecto :no podrá utilizar el campo de la forma esperada. Por ejemplo, tener
purchase_time
como una cadena y no como un tipo de datos de tiempo significa que no podrá realizar operaciones de tiempo (como calcular cuánto tiempo ha pasado desde la compra) en el campo - demasiado restringido :MySQL dará errores cuando intente ingresar valores que son más grandes de lo que permite el tipo de datos. Por ejemplo, obtendremos errores si tenemos una venta con un monto_pagado de $100.00 o más o un comentario_agente que tiene más de 65 caracteres
- demasiado conservador :si bien nada se romperá por ser demasiado conservador con los tipos de datos, estará desperdiciando espacio de almacenamiento. Con nuestros datos de ejemplo, podríamos ahorrar un 15 % de almacenamiento si usamos las opciones preferidas menos conservadoras
A pesar de lo inteligentes que son las bases de datos modernas, los propietarios de los datos aún saben mejor qué tipo de datos se almacenan y cuáles son los posibles valores que los datos pueden tomar en el futuro previsible. Por lo tanto, debe especificar cuidadosamente los tipos de datos para cada uno de sus campos.
Aquí se proporciona documentación sobre tipos de datos para diferentes bases de datos comunes:
- MySQL
- Desplazamiento al rojo de Amazon
- Colmena Apache
- Teradata
Conclusión
Para que su base de datos funcione correctamente y esté lo más optimizada posible, es importante seleccionar cuidadosamente los tipos de datos para cada campo en sus tablas.