# Plantilla: Modelado de Datos de tu Negocio

> Curso **Crear Páginas Web con Lógica de Negocio** · Módulo 03
> Método: sustantivos → tablas · relaciones → llaves foráneas · reglas → restricciones.

---

## Paso 1 — Describe el negocio en 3-5 frases

Escribe cómo funciona el negocio como se lo contarías a un amigo. Sin tecnicismos.

> _Ejemplo (barbería): "Ofrezco cortes, barba y combos. Cada barbero maneja su silla. Los clientes agendan un servicio con un barbero a una hora, pagan anticipo y a veces cancelan."_

Tu descripción:

>

## Paso 2 — Subraya los sustantivos → candidatos a tabla

| Sustantivo | ¿Merece tabla propia? | Nombre de la tabla |
|---|---|---|
| | Sí / No (¿por qué?) | |
| | | |
| | | |
| | | |

**Pista:** si una "celda" tendría que guardar una lista ("corte,barba,combo"), falta una tabla.

## Paso 3 — Define las columnas de cada tabla

Para cada tabla, completa:

### Tabla: `____________`

| Columna | Tipo | ¿Obligatoria? | Regla (check/unique/default) |
|---|---|---|---|
| id | uuid | sí | primary key |
| | | | |
| | | | |
| creado_en | timestamptz | sí | default now() |

_(Repite esta sección por cada tabla.)_

## Paso 4 — Conecta las tablas (relaciones)

Completa las frases; cada una es una llave foránea:

- Un/a `________` pertenece a un/a `________` → columna `_________id` en la tabla `________`
- Un/a `________` pertenece a un/a `________` → columna `_________id` en la tabla `________`
- Un/a `________` pertenece a un/a `________` → columna `_________id` en la tabla `________`

**Caso especial — muchos a muchos:** si "un pedido tiene muchas prendas y una prenda está en muchos pedidos", necesitas una tabla intermedia (`pedido_items`) con las dos llaves foráneas y la cantidad.

## Paso 5 — Convierte las reglas del negocio en restricciones

| Regla del negocio (en palabras) | Restricción SQL |
|---|---|
| _"El precio nunca es negativo"_ | `check (precio_cop > 0)` |
| _"Un barbero no atiende dos citas a la misma hora"_ | `unique (barbero_id, inicia_en)` |
| | |
| | |
| | |

## Paso 6 — Estados: la vida de tus registros

¿Qué entidades tienen ciclo de vida? Escribe sus estados y qué los dispara:

| Entidad | Estados posibles | Qué dispara cada cambio |
|---|---|---|
| _cita_ | _pendiente_pago → confirmada → completada / cancelada_ | _webhook de pago / el barbero / el cliente_ |
| | | |

## Paso 7 — Seguridad por fila (RLS)

Para cada tabla, responde: ¿quién puede **ver** y quién puede **modificar**?

| Tabla | ¿Quién lee? | ¿Quién escribe? |
|---|---|---|
| | público / dueño de la fila / solo admin | |
| | | |

## Paso 8 — Checklist antes de ejecutar el SQL

- [ ] Toda tabla tiene `id uuid primary key default gen_random_uuid()`
- [ ] Toda regla expresable como `check` o `unique` está en la tabla, no solo en el código
- [ ] Los borrados son **suaves** (columna `activo`) donde hay historial que proteger
- [ ] Los precios se **congelan** en la transacción (columna propia), no se consultan del catálogo
- [ ] `enable row level security` en cada tabla + políticas escritas
- [ ] Índice en las columnas de la consulta más frecuente

---

**Siguiente paso:** en el Módulo 04 le pondrás pagos a este modelo — la tabla `pagos` con su máquina de estados.
