DBA Junior Ciberecus MX
Temas · Capítulo 2 · PF-014

Tema 14: Modelado ER: del mundo real al diagrama

Identificador: PF-014 | XP: 200 | Insignia: 🥇 Oro | Tier: Aprendiz
Tiempo estimado: 80-100 min | Pre-requisitos: PF-013

🖼️ Imagen de inicio del tema

Cartoon Tema 14 - Moka con mapa de altépetl conectado por cuerdas

[Moka con mapa de Tenochtitlan mostrando altépetl conectados. Sofía con diagramas, Don Carlos con código, Citlalli con planos de la ciudad.]


🎯 Aprenderás

    Entidades, atributos, relaciones. Cardinalidad: 1:1, 1:N, N:M. Diagrama ER con notación crow's foot. Convertir ER a tablas SQL.

🏛️ Visión mexica — Por Citlalli

"El altépetl mexica era una ciudad-estado con barrios (calpulli), templos, mercados y tributos. Cada elemento tenía un lugar, una relación con los demás. Un mapa del altépetl era un DIAGRAMA ENTIDAD-RELACIÓN: barrios (entidades), relaciones (los barrios pertenecen al altépetl, los tributos van al templo), atributos (nombre, población, ubicación).

Un buen modelo ER es como un buen mapa del altépetl: muestra todo lo esencial sin abrumar, y te permite navegar la información de un vistazo. El modelo ER es el puente entre el MUNDO REAL (tu tienda, tu negocio) y el MUNDO DE DATOS (las tablas SQL)."


📚 Bloque 1: Entidades, atributos y relaciones

  • Entidad: una "cosa" del mundo real que queremos representar. Ejemplo: Cliente, Producto, Pedido.
  • Atributo: una propiedad de la entidad. Ejemplo: nombre, email, precio.
  • Relación: cómo se conectan dos entidades. Ejemplo: un Cliente tiene muchos Pedidos.
Don Carlos: "Un error común del junior es confundir ATRIBUTO con ENTIDAD. '¿La dirección del cliente es un atributo o una entidad?' Depende. Si solo necesitas guardar la dirección como texto, es atributo. Si después quieres gestionar múltiples direcciones por cliente (envío, facturación, trabajo), es entidad propia con su propia tabla."


📚 Bloque 2: Cardinalidad

  • 1:1 (uno a uno): cada A se conecta con exactamente un B. Ejemplo: cada cliente tiene un único perfil.
  • 1:N (uno a muchos): cada A se conecta con muchos B. Ejemplo: un cliente tiene muchos pedidos.
  • N:M (muchos a muchos): cada A se conecta con muchos B y viceversa. Ejemplo: clientes y productos (un cliente compra muchos productos, un producto es comprado por muchos clientes).
Para N:M, se crea una tabla intermedia (tabla pivote). En Tienda Tlalli: `pedido_items` une `pedidos` con `productos`.


📚 Bloque 3: Diagrama ER de Tienda Tlalli

CLIENTE (1) ----< (N) PEDIDO (1) ----< (N) PEDIDO_ITEM >---- (N) ---- (1) PRODUCTO
                                                                          |
                                                                          |
                                                                          v
                                                                       (N) ---- (1) CATEGORIA
                                                                          ^
                                                                          |
                                            RESENA (N) >---- (1) PRODUCTO   |
                                            RESENA (N) >---- (1) CLIENTE ---+

Reglas:

  • CLIENTE (1) -- (N) PEDIDO: un cliente tiene muchos pedidos.
  • PEDIDO (1) -- (N) PEDIDO_ITEM: un pedido tiene muchos items.
  • PRODUCTO (1) -- (N) PEDIDO_ITEM: un producto aparece en muchos items.
  • CATEGORIA (1) -- (N) PRODUCTO: una categoría tiene muchos productos.
  • CLIENTE (1) -- (N) RESENA: un cliente escribe muchas reseñas.
  • PRODUCTO (1) -- (N) RESENA: un producto tiene muchas reseñas.

📚 Bloque 4: Convertir ER a tablas SQL

Por cada entidad, una tabla. Por cada relación 1:N, una llave foránea en la tabla hija. Por cada N:M, una tabla intermedia.

-- Entidades principales
CREATE TABLE clientes (
    id INT PRIMARY KEY,
    nombre VARCHAR(120) NOT NULL,
    email VARCHAR(150) UNIQUE
);

CREATE TABLE productos ( id INT PRIMARY KEY, nombre VARCHAR(150) NOT NULL, precio DECIMAL(10,2) NOT NULL, categoria_id INT, FOREIGN KEY (categoria_id) REFERENCES categorias(id) );

-- Relación N:M CREATE TABLE pedido_items ( pedido_id INT, producto_id INT, cantidad INT, PRIMARY KEY (pedido_id, producto_id), FOREIGN KEY (pedido_id) REFERENCES pedidos(id), FOREIGN KEY (producto_id) REFERENCES productos(id) );


📚 Bloque 5: Tipos de relaciones en cardinalidad

Cardinalidad 1:1 (rara):

CREATE TABLE usuarios_perfil (
    usuario_id INT PRIMARY KEY,
    bio TEXT,
    FOREIGN KEY (usuario_id) REFERENCES usuarios(id)
);

Cardinalidad N:M (con atributos propios): A veces la relación N:M tiene datos propios. Por ejemplo, `pedido_items` no es solo una relación: tiene `cantidad` y `precio_unitario`.


🤖 AI Mission

Pídele: "Diseña el modelo ER para un sistema de biblioteca. Incluye libros, usuarios, préstamos y multas. Dibuja el diagrama y convierte a SQL."


⚠️ Errores típicos

    Confundir atributo con entidad. No crear tabla intermedia para N:M. Cardinalidad incorrecta. No documentar las relaciones.

🧪 LAB 14.1 — "Modela una nueva funcionalidad"

Tarea: agrega al modelo de Tienda Tlalli un sistema de direcciones de envío. Cada cliente puede tener múltiples direcciones (casa, oficina, etc.). Cada pedido se envía a una de esas direcciones.

    Diseña las entidades. Dibuja el diagrama ER. Escribe el SQL para crear las tablas. Identifica las llaves primarias y foráneas.

📝 Quest 14

    ¿Qué es una entidad? A) Atributo. B) "Cosa" del mundo real. C) Tabla. D) Relación. ¿Cardinalidad 1:N? A) Uno a uno. B) Uno a muchos. C) Muchos a muchos. D) Cero a muchos. ¿Relación N:M requiere? A) Llave foránea. B) Tabla intermedia. C) Trigger. D) Nada. ¿Atributo vs entidad? A) Sinónimos. B) Atributo es propiedad, entidad es "cosa". C) Entidad es texto. D) Atributo es número. ¿Llave foránea va en? A) Tabla padre. B) Tabla hija. C) Cualquiera. D) Tabla intermedia. ¿Relación 1:1 común? A) Muy común. B) Rara. C) Solo en MySQL. D) Solo en PostgreSQL. ¿Diagrama crow's foot? A) Notación. B) Tipo de BD. C) Error. D) Lenguaje. ¿Entidad débil? A) Sin PRIMARY KEY. B) Con PRIMARY KEY. C) No se puede modelar. D) Solo en MySQL. ¿Atributo multivaluado? A) Un solo valor. B) Múltiples valores (se modela como tabla aparte). C) Error. D) Llave foránea. ¿Documentar modelo ER? A) Opcional. B) Obligatorio para el equipo. C) Solo en diseño. D) Solo en producción.
Abiertas:
    ¿Por qué N:M requiere tabla intermedia? Da un ejemplo de cardinalidad 1:1. ¿Cómo diferencias atributo de entidad?

✅ Respuestas

1-B, 2-B, 3-B, 4-B, 5-B, 6-B, 7-A, 8-A, 9-B, 10-B.


🏛️ Tras las huellas — Por Citlalli

"El altépetl mexica era una ciudad-estado con barrios, templos, mercados y tributos. Un buen mapa del altépetl era un DIAGRAMA ER: barrios (entidades), relaciones (los barrios pertenecen al altépetl, los tributos van al templo), atributos (nombre, población, ubicación)."


📓 Cierre

1. El concepto más útil fue:
2. La cardinalidad más difícil:
3. Mi propio modelo de un proyecto:
4. Cómo voy a aplicar modelado ER:

🚀 ¿Qué sigue?

Tema 15 — Normalización 1FN, 2FN, 3FN, BCNF: por qué las tablas no deben repetirse.