M09L08Semana 2~5 h
L08 — Trade-offs de desnormalización
~5.0 h · Semana 2
3FN no es religión: a veces el reporte del dueño necesita un snapshot. Hoy decides con criterio.
Objetivo
Documentar una desnormalización consciente (implementada o aplazada) en er-agenda.md.
Pasos
1. Lectura corta (30 min)
Secciones de diseño físico / desnormalización. Alternativa: notas PG sobre costos de JOIN vs almacenamiento.
2. Caso Agenda Ops (60 min)
Si el precio del “Corte” sube mañana, las citas completadas ayer ¿deben mostrar $150 o $180?
- Opción A: siempre JOIN a
servicios(precio actual). - Opción B:
citas.precio_centavos_snapshotal crear la cita.
Elige y justifica en la sección L08 de er-agenda.md.
3. (Opcional) Migración (60–90 min)
Si eliges B:
ALTER TABLE citas
ADD COLUMN IF NOT EXISTS precio_centavos_snapshot integer;
Versiona en migrations/002_… o un archivo nuevo numerado. Rellena snapshot en seeds después.
4. Regla de equipo (30 min)
Una frase en README: “Desnormalizamos X; la fuente de verdad de Y sigue siendo Z”.
5. Commit (15 min)
git commit -am "docs(m09): trade-off desnormalizacion precio"
Lectura de esta lección
| Fuente | Qué leer | Enlace |
|---|---|---|
| Fundamentos de BD — Elmasri & Navathe (ed. ES) | Elmasri: desnormalización / diseño físico intro | Tutorial PostgreSQL |
| Catálogo | Entrada de esta materia | Bibliografía · M09 |
Hecho cuando
Marca la lección solo si:
- Escribes un trade-off concreto (ej.
precio_centavos_snapshotencitas). - Listas costo (consistencia) vs beneficio (historial / reportes).
- Decides para M09: ¿lo implementas en una migración o lo dejas documentado?
Errores comunes
- Desnormalizar “por si acaso” sin query que lo pida.
- Copiar
nombre_clientea la cita sin decir cómo se actualiza. - Confundir caché de lectura con modelo canónico.