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íaEjemplosUso Principal
NuméricosINT, DECIMAL, FLOATAlmacenar números enteros o decimales.
TextoCHAR, VARCHAR, TEXTAlmacenar cadenas de texto de diferentes tamaños.
Fechas y HoraDATE, TIME, DATETIMEAlmacenar fechas, horas o ambos.
BinariosBLOB, BYTEAAlmacenar 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 INT para números enteros pequeños.
  • Usa BIGINT para números muy grandes (ejemplo: conteos globales o identificadores).
  • Usa DECIMAL para valores monetarios (ya que asegura precisión en los decimales).
  • Usa FLOAT o DOUBLE para 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 CHAR si el tamaño del texto es fijo (por ejemplo, códigos postales de 5 caracteres).
  • Usa VARCHAR si el tamaño varía (por ejemplo, nombres o descripciones).
  • Usa TEXT solo 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 DATE para almacenar solo fechas.
  • Usa TIME para almacenar solo horas.
  • Usa DATETIME o TIMESTAMP para 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 BLOB para 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

  1. Elegir tipos innecesariamente grandes:

    • Usar TEXT en lugar de VARCHAR para datos pequeños.
    • Usar BIGINT para valores que caben en un INT.
  2. Ignorar restricciones:

    • No definir NOT NULL cuando el dato es obligatorio.
  3. 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

AspectoSQLNoSQL
EstructuraTipos predefinidos.Tipos flexibles (basados en JSON).
ValidaciónRígida (esquema fijo).Dinámica (puede variar entre registros).
AlmacenamientoColumnas 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

  1. Los tipos de datos determinan cómo se almacenan y manejan los datos en la base de datos.
  2. Elegir el tipo adecuado optimiza espacio y mejora el rendimiento.
  3. Las bases relacionales (SQL) tienen tipos más rígidos, mientras que las NoSQL son más flexibles.
  4. Es importante evitar errores comunes al seleccionar tipos de datos, como sobredimensionarlos.
  • Loading...