Modelado físico relacional de bases 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
1.1. 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. |
1.2. 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:
2.1. 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:
1edad TINYINT UNSIGNED -- Ocupa solo 1 byte y permite valores entre 0 y 255.
2.2. 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:
1nombre VARCHAR(50) -- Hasta 50 caracteres, ajustable según el contenido.
2.3. 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
2.4. 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:
1CREATE TABLE Productos ( 2 id INT AUTO_INCREMENT PRIMARY KEY, 3 nombre VARCHAR(100) NOT NULL, 4 precio DECIMAL(10,2) NOT NULL, 5 fecha DATE NOT NULL 6);
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:
1CREATE TABLE Usuarios ( 2 id INT PRIMARY KEY, 3 nombre VARCHAR(50), 4 email VARCHAR(100), 5 fecha_registro DATE 6);
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}
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.
- Loading...