M09L03Semana 1~5 h
L03 — Cardinalidades y reglas de negocio
~5.0 h · Semana 1
Una FK sin regla de negocio es decoración. Hoy fijas cardinalidades y constraints que el dueño del salón entendería.
Objetivo
Dejar en er-agenda.md las cardinalidades 1:N y un bloque de reglas verificables (algunas ya están en 001_init.sql).
Pasos
1. Lectura (45 min)
Cardinalidad mínima/máxima y participación total/parcial en Elmasri.
2. Escribe cardinalidades (40 min)
En er-agenda.md:
- Cliente 1 — 0..N Citas
- Servicio 1 — 0..N Citas
- Una Cita exactamente 1 Cliente y exactamente 1 Servicio (MVP )
Si más adelante quieres varios servicios por cita, documenta la tabla puente como cambio futuro, no lo inventes ya.
3. Reglas de negocio (90 min)
Completa una lista numerada. Mínimo:
termina_en > inicia_en(ya hayCHECK).estado ∈ {programada, confirmada, completada, cancelada, no_show}.- Una regla tuya (ej. no solapar dos citas del mismo staff — si aún no hay staff, anótala como pendiente M17).
Verifica en SQL :
-- Debe fallar:
INSERT INTO citas (cliente_id, servicio_id, inicia_en, termina_en, estado)
SELECT id, (SELECT id FROM servicios LIMIT 1), now(), now() - interval '1 hour', 'programada'
FROM clientes LIMIT 1;
4. Participación (30 min)
¿Puede existir un cliente sin citas? (sí — parcial). ¿Una cita sin cliente? (no — total hacia cliente). Anótalo.
5. Commit (15 min)
git commit -am "docs(m09): cardinalidades y reglas de negocio"
Lectura de esta lección
| Fuente | Qué leer | Enlace |
|---|---|---|
| Fundamentos de BD — Elmasri & Navathe (ed. ES) | Elmasri: relaciones, cardinalidad, participación | Tutorial PostgreSQL |
| Catálogo | Entrada de esta materia | Bibliografía · M09 |
Hecho cuando
Marca la lección solo si:
- Cardinalidades Cliente–Cita y Servicio–Cita escritas (1:N).
- Al menos 3 reglas de negocio (estados,
termina_en > inicia_en, una más tuya). - Commit descriptivo.
Errores comunes
- Dibujar N:M Cliente–Servicio sin tabla puente cuando el MVP es cita con un servicio.
- Reglas solo en la cabeza / en el front, nunca en ER ni en CHECK.
- Olvidar no-show como estado distinto de cancelada.