# Proyecto SQL: análisis reproducible con Sakila

Responde preguntas descriptivas sobre pagos, asignación de personal e inventario usando consultas SQL de solo lectura. El conjunto Sakila es ficticio y sirve para practicar; no representa las operaciones actuales de una empresa.

## Preguntas del proyecto

1. ¿Cuántos pagos y qué importe total aparecen por mes en los registros disponibles?
2. ¿Cómo se distribuyen los pagos por tienda principal asignada al personal que los procesó?
3. ¿Cuántos títulos y copias de inventario hay por categoría, y qué títulos no tienen copias registradas?
4. ¿Qué controles ayudan a detectar claves duplicadas, relaciones ausentes o totales que no reconcilian?

`staff.store_id` indica la tienda principal asignada al empleado. No identifica necesariamente la ubicación física del pago.

## Requisitos y fuente

- MySQL 8.x y MySQL Workbench o el cliente `mysql`.
- Los archivos oficiales `sakila-schema.sql` y `sakila-data.sql`, descargados desde la [página de bases de ejemplo de MySQL](https://dev.mysql.com/doc/index-other.html).
- Una instancia local dedicada a práctica. Carga Sakila según la [guía oficial de instalación](https://dev.mysql.com/doc/sakila/en/sakila-installation.html); no ejecutes scripts de instalación en una base compartida o de producción.
- Una cuenta de consulta con permiso `SELECT` sobre el esquema `sakila`.

Este paquete no incluye el dump de Sakila, credenciales, datos de salida ni una conexión pública. Las consultas publicadas se verificaron con el archivo oficial y MySQL Community Server 8.0.46; MySQL 8.4 LTS es la versión objetivo del curso y debe probarse en el entorno local elegido.

## Archivos

```text
sakila-sql-project/
  README.md
  findings-template.md
  sql/
    01_monthly_payments.sql
    02_payments_by_staff_store.sql
    03_inventory_by_category.sql
    04_quality_checks.sql
```

## Ejecución

1. Instala Sakila en una instancia local siguiendo la lección SQL de preparación y la guía oficial enlazada arriba.
2. Confirma la conexión y la base activa con `SELECT VERSION(), DATABASE();`. Selecciona `sakila` si hace falta.
3. En MySQL Workbench, abre cada archivo de `sql/`, ejecútalo por separado y exporta el resultado de la cuadrícula como CSV. También puedes conectarte con el cliente interactivo `mysql` y ejecutar `SOURCE C:/ruta/sin-espacios/sakila-sql-project/sql/01_monthly_payments.sql;`, cambiando el archivo en cada ejecución.
4. Crea una carpeta local `output/` y guarda los cuatro resultados con los nombres indicados debajo. La exportación de la cuadrícula debe usar UTF-8 y conservar los encabezados.
5. Ejecuta `04_quality_checks.sql`; investiga cualquier fila cuyo `issue_count` sea mayor que cero. La fila `rental_id NULL (informativo)` documenta valores opcionales y tiene cero incidencias por definición.
6. Copia `findings-template.md` como `findings.md`, completa tres observaciones respaldadas por los archivos exportados e indica una limitación de interpretación.

No escribas contraseñas en comandos, scripts, CSV, capturas o el informe. No ejecutes `INSERT`, `UPDATE`, `DELETE`, `CREATE`, `ALTER` ni `DROP` sobre el esquema canónico.

## Salidas esperadas

| Archivo | Grano | Columnas |
|---|---|---|
| `01_monthly_payments.csv` | Una fila por mes observado | `payment_month`, `payment_count`, `paying_customer_count`, `total_amount` |
| `02_payments_by_staff_store.csv` | Una fila por tienda principal asignada al personal | `staff_primary_store_id`, `staff_count`, `payment_count`, `total_amount`, `average_amount` |
| `03_inventory_by_category.csv` | Una fila por categoría | `category_id`, `category_name`, `title_count`, `inventory_copy_count`, `titles_without_inventory` |
| `04_quality_checks.csv` | Una fila por control | `control_name`, `observed_count`, `issue_count`, `interpretation` |

Las cantidades dependen de la versión del conjunto importado. Comprueba claves y totales con la versión instalada; no copies cifras de otro servidor como si fueran universales. Los CSV contienen agregados y claves de catálogo, no nombres ni correos de clientes.

## Aceptación

- Las cuatro consultas terminan sin error en la base local autorizada y no modifican Sakila.
- Cada archivo incluye encabezados y respeta el grano de la tabla anterior.
- El total mensual de pagos concuerda con la cantidad y suma de `payment` bajo la misma población.
- Los totales agrupados por personal asignado a tienda reconcilian con los pagos unidos a `staff`.
- Los conteos de copias y títulos usan claves distintas cuando los JOINs pueden repetir filas.
- Cada control queda revisado; cualquier incidencia se explica y se corrige antes de escribir conclusiones.
- `findings.md` contiene tres observaciones vinculadas a un archivo y medida y describe límites; no afirma causalidad.
- No se incluyen credenciales, nombres, correos, el dump, ni resultados personales en el paquete.

## Rúbrica (100 puntos)

| Criterio | Puntos |
|---|---:|
| SQL, claves, cardinalidad y grano correctos | 25 |
| Métricas, controles de calidad y reconciliación | 25 |
| Reproducibilidad e instrucciones seguras | 20 |
| Hallazgos respaldados y límites explicados | 20 |
| Claridad de archivos y resultados | 10 |

Puntaje sugerido de aprobación: 70. Una modificación del esquema canónico, credencial expuesta o dato personal innecesario requiere corregir el proyecto sin importar el puntaje.
