giovedì 17 aprile 2008

L'importanza delle chiavi esterne

Mi sono trovato a lavorare su un database PostgreSQL progettato da altre persone, e purtroppo ho notato come questo non implementava nessun meccanismo di foreign key. Ovviamente questo non è per via di PostgreSQL, che anzi supporta in modo eccellente i vincoli di integrità referenziali.

Perché è importante implementare i vincoli di integrità referenziale? Diciamo che in linea di massima, se la propria applicazione (PHP, Java, C, ...) implementa bene la logica di gestione dei dati, allora le foreign key non sono strettamente necessarie. Almeno a prima vista. Ebbene si, perché non bisogna scordarsi che un RDBMS è un sistema a se stante, un motore per la gestione dei dati che può essere interrogato e usato anche senza un applicativo (o addirittura da applicativi differenti). Ecco allora che se si accede alla base di dati tramite l'interfaccia del proprio RDBMS, o tramite un applicativo implementato male, si rischia di incappare in incoerenza dei dati, cancellazioni sbagliate e distruzione dei dati stessi.

Le foreign key, come pure i vincoli di tipo check e altri simili, sono importantissimi perché consentono di mantenere la base di dati coerente indipendentemente dal modo in cui i dati stessi sono acceduti. Un RDBMS è uno strumento potentissimo in questo, le sue caratteristiche devono essere sfruttate a pieno, specialmente su sistemi di produzione.

Nessun commento: