Auditoría de datos.
Guardar datos es fácil. Mantenerlos correctos es el verdadero trabajo de quien administra una base. Con el tiempo aparecen filas huérfanas, duplicados, valores imposibles y campos vacíos. Auditar es buscar esos problemas con consultas — y arreglarlos.
01Por qué los datos se ensucian
Ninguna base nace sucia: se ensucia de a poco. Una app con un bug inserta un pedido sin fecha; una integración carga dos veces el mismo cliente; alguien borra una categoría pero deja los productos que la usaban. El motor no siempre lo impide —sobre todo cuando faltan restricciones— así que la integridad termina dependiendo de que alguien la vigile.
02Los problemas clásicos
id foráneo) a otra que ya no existe. Un pedido de un cliente fantasma.IS NULL.Una auditoría real tiene dos tiempos: primero detectás el problema con un SELECT que lo aísla, y después lo reparás con un UPDATE, un DELETE o un INSERT corregido. Los desafíos de abajo practican ambos.
03Explorá la base sucia
Esta tienda tiene problemas plantados a propósito en sus cuatro tablas. Corré las consultas de ejemplo y mirá qué encontrás antes de pasar a los desafíos.
-- Mirá todos los pedidos: ¿notás algo raro? SELECT * FROM pedidos;
| idINT🔑 | nombreVARCHAR(60) | emailVARCHAR(120) |
|---|---|---|
| 1 | Ana Torres | [email protected] |
| 2 | Luis Pérez | [email protected] |
| 3 | María Gómez | [email protected] |
| 4 | Carla Ruiz | NULL |
| idINT🔑 | nombreVARCHAR(60) | categoriaVARCHAR(30) | precioDECIMAL(10,2) |
|---|---|---|---|
| 1 | Café Sierra | Café | 32000 |
| 2 | Café Huila | café | 28000 |
| 3 | Té verde | Té | 12000 |
| 4 | Galletas | Snack | -5000 |
| 5 | Chocolate | Snack | 0 |
| idINT🔑 | cliente_idINT | fechaDATE | totalDECIMAL(10,2) |
|---|---|---|---|
| 1 | 1 | 2024-01-10 | 64000 |
| 2 | 2 | NULL | 28000 |
| 3 | 99 | 2024-02-01 | 12000 |
| 4 | 1 | 2024-02-15 | 99999 |
| idINT🔑 | pedido_idINT | producto_idINT | cantidadINT | precio_unitDECIMAL(10,2) |
|---|---|---|---|---|
| 1 | 1 | 1 | 2 | 32000 |
| 2 | 4 | 3 | 1 | 12000 |
| 3 | 4 | 1 | 1 | 32000 |
fecha = NULL nunca es verdadero, ni siquiera cuando la fecha es nula. NULL significa “desconocido”, así que se compara con IS NULL / IS NOT NULL. Es el error de auditoría más común.
04Desafíos · auditá y repará
Seis retos sobre la base sucia: unos te piden detectar el problema con una consulta, otros te dan una operación que falla con un error y tenés que corregirla. Escribí tu solución y dale Comprobar.
- Detección: el editor arranca vacío — vos escribís la consulta que aísla el problema.
- Reparación: el editor trae la consulta rota. Corréla para ver el error del motor, después arreglala.
Auditá los pedidos incompletos: listá el id de los pedidos que no tienen fecha registrada.
Encontrá los productos con precio inválido: mostrá nombre y precio de los que tienen precio menor o igual a 0.
Detectá emails duplicados entre clientes: mostrá el email y cuántas veces aparece (columna 'veces'), solo los que se repiten.
Este INSERT falla con el error: La columna "nombre" no admite NULL. Registrá al cliente correctamente con id 5, nombre 'Diego Soto' y email '[email protected]'.
INSERT INTO clientes (id, nombre, email) VALUES (5, NULL, '[email protected]');
Encontrá los pedidos huérfanos: aquellos cuyo cliente_id no corresponde a ningún cliente real. Mostrá el id del pedido y su cliente_id.
El pedido 4 tiene un total mal cargado (99999) que no coincide con la suma real de sus ítems. Corregí el total del pedido 4 para que sea la suma de cantidad × precio_unit de sus ítems.
-- El total del pedido 4 no cuadra con sus items. Corregilo: UPDATE pedidos SET total = 0 WHERE id = 4;