Tipos de Datos
En este módulo exploraremos los tipos de datos disponibles en los sistemas de gestión de bases de datos (SGBD) y cómo elegirlos correctamente para optimizar el espacio y el rendimiento. Los tipos de datos son fundamentales, ya que definen cómo se almacenará la información y cuánto espacio ocupará.
1. Clasificación de los Tipos de Datos #
Tipos de datos comunes en SQL #
Los SGBD relacionales como MySQL, PostgreSQL y SQL Server ofrecen tipos de datos predefinidos, divididos en las siguientes categorías:
| Categoría | Ejemplos | Uso Principal |
|---|---|---|
| Numéricos | INT, DECIMAL, FLOAT | Almacenar números enteros o decimales. |
| Texto | CHAR, VARCHAR, TEXT | Almacenar cadenas de texto de diferentes tamaños. |
| Fechas y Hora | DATE, TIME, DATETIME | Almacenar fechas, horas o ambos. |
| Binarios | BLOB, BYTEA | Almacenar datos binarios como imágenes o documentos. |
Tipos de datos en NoSQL #
Las bases de datos NoSQL (como MongoDB o DynamoDB) son más flexibles con los tipos de datos. Por ejemplo:
- En MongoDB, puedes usar tipos como:
- String: Cadenas de texto.
- Number: Enteros o decimales.
- Date: Fechas.
- Array: Listas de elementos.
- Object: Documentos anidados (similar a JSON).
Ejemplo en MongoDB:
1{ 2 "nombre": "María", 3 "edad": 25, 4 "fecha_registro": "2024-12-18T10:00:00Z", 5 "intereses": ["viajes", "música"] 6}
2. Selección de Tipos de Datos Óptimos #
Elegir el tipo de dato adecuado puede mejorar significativamente el rendimiento de una base de datos. A continuación, te mostramos cómo elegir:
Datos Numéricos #
- Usa
INTpara números enteros pequeños. - Usa
BIGINTpara números muy grandes (ejemplo: conteos globales o identificadores). - Usa
DECIMALpara valores monetarios (ya que asegura precisión en los decimales). - Usa
FLOAToDOUBLEpara cálculos científicos (permiten mayor flexibilidad, pero menor precisión).
Ejemplo: Si necesitas almacenar la edad de las personas, usa:
Datos de Texto #
- Usa
CHARsi el tamaño del texto es fijo (por ejemplo, códigos postales de 5 caracteres). - Usa
VARCHARsi el tamaño varía (por ejemplo, nombres o descripciones). - Usa
TEXTsolo para textos largos (artículos o comentarios).
Ejemplo: Si estás guardando nombres de usuarios:
Fechas y Hora #
- Usa
DATEpara almacenar solo fechas. - Usa
TIMEpara almacenar solo horas. - Usa
DATETIMEoTIMESTAMPpara registrar eventos con fecha y hora.
Ejemplo: Para guardar la fecha de registro de un usuario:
1fecha_registro DATETIME DEFAULT CURRENT_TIMESTAMP
Datos Binarios #
- Usa
BLOBpara almacenar archivos pequeños como imágenes o documentos. - Usa sistemas externos (como almacenamiento en la nube) para archivos grandes y guarda solo las rutas en la base de datos.
Ejemplo: Guardar la imagen de perfil de un usuario:
1imagen_perfil BLOB
3. Conversión de Tipos Lógicos a Físicos #
Cuando conviertes un modelo lógico a uno físico, debes mapear los tipos genéricos a los específicos del SGBD que uses.
Ejemplo Práctico: #
Supongamos que en tu modelo lógico tienes:
id: Un identificador único.nombre: Una cadena de texto.precio: Un valor decimal.fecha: Una fecha.
Al mapearlo a un modelo físico en MySQL, podría ser:
Al mapearlo a MongoDB:
1{ 2 "_id": 1, 3 "nombre": "Producto A", 4 "precio": 12.50, 5 "fecha": "2024-12-18" 6}
4. Errores Comunes al Seleccionar Tipos de Datos #
-
Elegir tipos innecesariamente grandes:
- Usar
TEXTen lugar deVARCHARpara datos pequeños. - Usar
BIGINTpara valores que caben en unINT.
- Usar
-
Ignorar restricciones:
- No definir
NOT NULLcuando el dato es obligatorio.
- No definir
-
Subestimar el impacto del tamaño:
- Tipos más grandes consumen más memoria, lo que afecta el rendimiento.
Ejemplo de optimización:
Si tienes una columna para edades y usas INT, estarás desperdiciando espacio si el rango de valores es pequeño. Usa TINYINT en su lugar.
5. Comparación entre SQL y NoSQL en Tipos de Datos #
| Aspecto | SQL | NoSQL |
|---|---|---|
| Estructura | Tipos predefinidos. | Tipos flexibles (basados en JSON). |
| Validación | Rígida (esquema fijo). | Dinámica (puede variar entre registros). |
| Almacenamiento | Columnas estructuradas. | Documentos o claves-valor. |
Ejemplo Comparativo: Un registro de usuario en SQL:
El mismo registro en MongoDB:
1{ 2 "_id": 1, 3 "nombre": "María", 4 "email": "maria@gmail.com", 5 "fecha_registro": "2024-12-18" 6}
6. Resumen del Módulo 3 #
- Los tipos de datos determinan cómo se almacenan y manejan los datos en la base de datos.
- Elegir el tipo adecuado optimiza espacio y mejora el rendimiento.
- Las bases relacionales (SQL) tienen tipos más rígidos, mientras que las NoSQL son más flexibles.
- Es importante evitar errores comunes al seleccionar tipos de datos, como sobredimensionarlos.
Resumen del tema
Conceptos clave #
- Tipos de Datos Numéricos: enteros (
TINYINT,SMALLINT,INT,BIGINT) y decimales exactos (DECIMAL/NUMERIC) o aproximados (FLOAT,DOUBLE). - Tipos de Cadena: longitud fija (
CHAR) vs. variable (VARCHAR) y grandes textos (TEXT/CLOB). - Fechas y Tiempo:
DATE,TIME,DATETIMEyTIMESTAMPpara registro cronológico preciso. - Tipos Binarios y Especiales:
BOOLEAN,BLOB,JSON,UUIDy arrays (según el SGBD). - Optimización de Tipos: evitar sobredimensionar columnas (ej. no usar
BIGINToTEXTsi bastaINToVARCHAR(50)) para ahorrar memoria e I/O en disco. - SQL vs. NoSQL: validación de esquema estricto en SQL frente a tipado dinámico basado en documentos JSON/BSON en NoSQL.
Qué debes recordar #
La elección precisa del tipo de dato más pequeño y adecuado para cada columna ahorra espacio en disco y memoria RAM, acelerando drásticamente el rendimiento de las consultas.