Esquema y restricciones
16 pasos en 6 series de SQL.
Diseñar el esquema en vez de consultarlo. Restricciones, claves foráneas y lo que ON DELETE hace en realidad, triggers, vistas, y migrar un esquema que ya tiene datos adentro.
Dieciséis pasos. La serie de restricciones es la importante: una regla que la base de datos hace cumplir se mantiene aunque la aplicación se olvide.
Restricciones
- Restricciones CHECKUna restricción es una regla que la base de datos no dejará olvidar a tu código.
- UNIQUE entre columnasUn valor único por sí solo es una regla distinta de un par único en conjunto.
- Claves primarias compuestasLa identidad de una tabla de unión es el par de cosas que une, no un número nuevo.
- Tablas STRICTEl tipado flexible de SQLite es una virtud hasta el día en que preferirías que se negara.
- Columnas generadasUna columna cuyo valor es una fórmula no puede contradecir a las columnas que lee.
Integridad referencial
- ON DELETE y ON UPDATELa clave foránea exige que la referencia sea real. La acción dice qué pasa cuando deja de serlo.
- Encender la integridadSQLite solo aplica las claves foráneas cuando se lo pides, una vez por conexión.
Triggers
- Un trigger que lleva un registroUn trigger es una sentencia que la base de datos corre por ti en cada escritura.
- Un trigger que sella cada cambioEl clásico: mantener honesta una columna updated_at sin confiar en cada llamador.
Vistas y tablas de trabajo
- VistasUna vista es una consulta guardada de la que seleccionas como si fuera una tabla.
- Vistas sobre vistasUna vista es una consulta con nombre, y nombrar el paso intermedio es la mitad del SQL legible.
- Tablas temporalesUna tabla de borrador que desaparece con la conexión: justo lo que un reporte necesita.
Cambiar un esquema
- ALTER TABLECambios de esquema a posteriori: agregar, renombrar y eliminar columnas.
- Una migración de principio a finCambiar una tabla viva son cuatro sentencias pequeñas, cada una re-ejecutable.
Bis
- schema_migration.sqlLa reconstrucción de tabla: la única forma de agregar una restricción que ALTER no puede.
- audit_trail.sqlTres triggers y una vista: cada cambio a una tabla, registrado sin que nadie deba acordarse.