ASSERTION
SQL ASSERTION (cross-table constraint)
La ASSERTION es un constructo previsto por el estándar SQL — desde los años 90 — para expresar vínculos que atraviesan múltiples tablas, validados directamente por el motor del database a nivel transaccional. Sobre el papel es una solución elegante a problemas que hoy se resuelven con trigger o con check aplicativos. En la práctica, hasta 2026, ningún DBMS mainstream lo había implementado realmente. Oracle lo ha anunciado para la 26ai.
Cómo funciona (sobre el papel) #
CREATE ASSERTION nombre CHECK (<condición>) define una condición que el database garantiza siempre verdadera. A diferencia de un CHECK de tabla (que evalúa una sola fila en el momento del INSERT/UPDATE), una ASSERTION puede hacer referencia a múltiples tablas, hacer agregaciones, contar filas. Ejemplo: “al menos una fila en estados_x debe tener activo='Y'”, o “la suma de importes en linea_pedido no puede superar el total en pedido”.
Por qué ha tardado tanto #
Implementar las ASSERTION de manera eficiente es difícil. En cada modificación de las tablas implicadas el motor debe revalidar la aserción — y hacerlo sin serializar todas las transacciones requiere mecanismos sofisticados de incremental checking o de lock cross-tabla. Ningún vendor ha encontrado nunca la fórmula ganadora. Oracle 26ai será el primer intento serio en un DBMS comercial de relevancia.
Qué cambia para quien modela enumeraciones #
Para las taxonomías gestionadas con lookup table, las ASSERTION abren un escenario nuevo: vínculos que hoy viven como trigger aplicativos (ej. “la taxonomía no puede quedar sin estados activos”) se volverán expresables en DDL, validados a nivel transaccional, gestionados por el motor. Es material que se desarrolla cuando la implementación 26ai esté disponible en test.