Papel y SQL; solo el último ejercicio toca tu TicketFlow real. No mires solutions.md hasta entregar.
Ejercicio 1 — Auditoría de normalización
Revisa el modelo v1 de la 00b campo a campo y responde:
- ¿Hay alguna dependencia transitiva (3FN rota)? Justifica cada sospecha.
Payment.gateway_reference(lo que devuelve la pasarela): ¿dato, snapshot o derivado? ¿Y si la pasarela permite actualizar la referencia después?- ¿Dónde pondrías
event.slug(para URLs) y qué constraint exige?
Ejercicio 2 — Snapshot vs derivado
- Añadir "total de la reserva" (
reservation.total) — ¿snapshot, derivado o calculado al vuelo? Decide y justifica con el patrón de lectura/escritura de TicketFlow. - Propón cómo mantenerlo si lo materializas (trigger, save() del modelo, o nunca) y qué invariante protege.
Ejercicio 3 — Tarjeta regalo (nueva entidad)
TicketFlow quiere vender tarjetas regalo: código canjeable por saldo, aplicable a una reserva como método de pago parcial.
- Modela la entidad (campos, claves, estados) y su relación con Payment.
- ¿Puede una tarjeta pagarse en dos reservas (saldo parcial)? ¿Qué constraint lo permite/prohíbe?
- ¿Dónde registras los movimientos de saldo y por qué NO en un solo campo
balance?
Ejercicio 4 — Polimórfico bajo juicio
Un compañero propone añadir descuentos con una tabla discount(code, related_type, related_id, pct), donde related_* apunta a evento, a usuario o a "global".
- Enumera los problemas concretos de ese diseño (integridad, consultas, índices).
- Rediseña: qué tablas crearías y cómo aplicarías un descuento a una reserva.
- ¿Y si el descuento se aplica a UNA reserva concreta (cupón de uso único)? ¿Cambia el diseño?
Ejercicio 5 — Auditoría en tu BD real
En tu TicketFlow:
\d+ events_seat(o introspección por Django): ¿los tipos son los elegidos conscientemente o heredados?- ¿Hay columnas NULL que en realidad nunca son NULL? ¿Hay
is_*que ya son estados escondidos? - Escribe una lista "para la revisión del modelo" de 3 mejoras concretas (no las apliques todavía: la Lección 11 las convierte en migraciones).
Entrega
Pega el diseño de la tarjeta regalo (SQL o descripción) y la lista de mejoras. Después: Lección 09 — Índices y EXPLAIN.