ASSERTION
SQL ASSERTION (cross-table constraint)
L’ASSERTION è un costrutto previsto dallo standard SQL — fin dagli anni ‘90 — per esprimere vincoli che attraversano più tabelle, validati direttamente dal motore del database a livello transazionale. Sulla carta è una soluzione elegante a problemi che oggi si risolvono con trigger o con check applicativi. Nella pratica, fino al 2026, nessun DBMS mainstream l’aveva implementata davvero. Oracle l’ha annunciata per la 26ai.
Come funziona (sulla carta) #
CREATE ASSERTION nome CHECK (<condizione>) definisce una condizione che il database garantisce sempre vera. A differenza di un CHECK di tabella (che valuta una singola riga al momento dell’INSERT/UPDATE), una ASSERTION può fare riferimento a più tabelle, fare aggregazioni, contare righe. Esempio: “almeno una riga in stati_x deve avere attivo='Y'”, oppure “la somma di importi in riga_ordine non può superare il totale in ordine”.
Perché ha tardato tanto #
Implementare le ASSERTION in modo efficiente è difficile. Ad ogni modifica delle tabelle coinvolte il motore deve rivalidare l’asserzione — e farlo senza serializzare tutte le transazioni richiede meccanismi sofisticati di incremental checking o di lock cross-tabella. Nessun vendor ha mai trovato la formula vincente. Oracle 26ai sarà il primo tentativo serio su un DBMS commerciale di rilievo.
Cosa cambia per chi modella enumerazioni #
Per le tassonomie gestite con lookup table, le ASSERTION aprono uno scenario nuovo: vincoli che oggi vivono come trigger applicativi (es. “la tassonomia non può restare senza stati attivi”) diventeranno esprimibili in DDL, validati a livello transazionale, gestiti dal motore. È materia che si sviluppa quando l’implementazione 26ai sarà disponibile in test.