Tema 13: Vistas, índices y constraints: el kit de durabilidad
Identificador: PF-013 | XP: 200 | Insignia: 🥇 Oro | Tier: Aprendiz
Tiempo estimado: 90-120 min | Pre-requisitos: PF-009, PF-012
🖼️ Imagen de inicio del tema

[Moka con escudo de obsidiana y llaves. Sofía con llave dorada, Don Carlos con candado, Citlalli con codex.]
🎯 Aprenderás
🏛️ Visión mexica — Por Citlalli
"Los tlacuilos no escribían el mismo dato en 5 codex diferentes. Usaban REFERENCIAS: 'ver codex X, página Y'. Eso es una VISTA: una 'tabla virtual' que es realmente una query guardada con nombre.
Los CONSTRAINTS son las reglas del calmécac: 'no se acepta un registro sin firma del calpixqui', 'los tributos de cacao se miden en jicaras, no en granos sueltos'. Esas reglas garantizaban la integridad de los datos. Las PRIMARY KEY, FOREIGN KEY, CHECK son tus reglas modernas."
📚 Bloque 1: VISTAS (VIEW) — query guardada con nombre
CREATE VIEW clientes_vip AS
SELECT id, nombre, email, ciudad
FROM clientes
WHERE activo = 1 AND fecha_registro < '2025-01-01';-- Usarla es como usar una tabla
SELECT FROM clientes_vip WHERE ciudad = 'Monterrey';
Ventajas:
- Reutilización de queries complejas.
- Seguridad: puedes dar acceso a la vista sin dar acceso a la tabla completa.
- Mantenimiento: cambias la query en un lugar.
📚 Bloque 2: ÍNDICES (INDEX) — acelerar búsquedas
-- Sin índice: escaneo completo de tabla
SELECT FROM clientes WHERE email = 'sofia@example.com';-- Crear índice
CREATE INDEX idx_clientes_email ON clientes(email);
-- Con índice: búsqueda rápida
SELECT FROM clientes WHERE email = 'sofia@example.com';
Reglas para índices:
📚 Bloque 3: CONSTRAINTS — reglas de la tabla
-- PRIMARY KEY: identificador único
CREATE TABLE ejemplo (
id INT PRIMARY KEY AUTO_INCREMENT,
nombre VARCHAR(100) NOT NULL
);-- FOREIGN KEY: relación con otra tabla
CREATE TABLE pedidos (
id INT PRIMARY KEY AUTO_INCREMENT,
cliente_id INT NOT NULL,
FOREIGN KEY (cliente_id) REFERENCES clientes(id) ON DELETE RESTRICT
);
-- UNIQUE: valor único
CREATE TABLE usuarios (
id INT PRIMARY KEY,
email VARCHAR(150) UNIQUE
);
-- CHECK: validación
CREATE TABLE productos (
precio DECIMAL(10,2) CHECK (precio >= 0),
stock INT CHECK (stock >= 0)
);
📚 Bloque 4: ALTER TABLE — modificar estructura
-- Agregar columna
ALTER TABLE clientes ADD COLUMN cumpleanos DATE;-- Modificar columna
ALTER TABLE productos MODIFY COLUMN stock INT NOT NULL;
-- Eliminar columna
ALTER TABLE clientes DROP COLUMN cumpleanos;
-- Agregar constraint
ALTER TABLE pedidos ADD CONSTRAINT fk_cliente FOREIGN KEY (cliente_id) REFERENCES clientes(id);
📚 Bloque 5: DROP, TRUNCATE, DELETE
| Comando | Qué hace | Estructura | Datos | Reversible | |---|---|---|---|---| | `DROP TABLE x` | Borra tabla | Sí | Sí | No | | `TRUNCATE TABLE x` | Borra filas | No | Sí | No | | `DELETE FROM x` | Borra filas | No | Sí (con WHERE) | Sí (con transacción) |
🤖 AI Mission
Pídele: "Tengo una tabla con 10 millones de filas. Las queries con WHERE en una columna específica están lentas. ¿Qué haces? Explica paso a paso."*
⚠️ Errores típicos
🧪 LAB 13.1 — "Crea la infraestructura de Tienda Tlalli"
Paso 1: crea una vista de "clientes premium" (los que tienen más de 3 pedidos). Paso 2: crea un índice en `clientes.email`. Paso 3: crea un índice en `pedidos.cliente_id`. Paso 4: agrega un CHECK constraint a `productos.precio >= 0`. Paso 5: prueba la diferencia de rendimiento con y sin índices (EXPLAIN).
📝 Quest 13
✅ Respuestas
1-B, 2-B, 3-B, 4-B, 5-B, 6-C, 7-B, 8-B, 9-B, 10-A.
🏛️ Tras las huellas — Por Citlalli
"Los tlacuilos no escribían el mismo dato en 5 codex diferentes. Usaban REFERENCIAS. Los CONSTRAINTS son las reglas del calmécac: 'no se acepta un registro sin firma del calpixqui', 'los tributos de cacao se miden en jicaras'. Esas reglas garantizaban la integridad."
📓 Cierre
1. Lo más útil:
2. La vista que voy a usar:
3. El índice más importante:
4. Cómo voy a aplicar constraints:
🚀 ¿Qué sigue?
Tema 14 — Modelado ER: del mundo real al diagrama.