Gli effetti di riferimenti sé in DBMS

May 3

Gli effetti di riferimenti sé in DBMS


Alcune applicazioni di gestione di database che fare con informazioni gerarchiche, come ad esempio gli stati costituiti da contee che a loro volta contengono città. Si potrebbe essere tentati di organizzare queste informazioni in tabelle separate in DBMS - uno per ogni livello della gerarchia - ma una soluzione più elegante utilizza una tabella autoreferenziale, che è più facile da gestire e può ospitare una più ampia varietà di dati.

Tabella autoreferenziale

Per creare una tabella autoreferenziale, si inizierà con due campi, un numero ID e un numero ID genitore. Per questi campi, è possibile aggiungere tutti gli altri appropriati per l'applicazione, come il nome, la descrizione, la posizione o di una popolazione. Per comodità, è possibile impostare il numero di ID di un tipo di campo numerazione automatica in modo che il database di numeri automaticamente i nuovi record in ordine crescente. L'ID genitore fa riferimento al numero ID del record padre nella gerarchia; Se il record non ha nessun genitore, è possibile impostare questo campo a zero. Ad esempio, il record per California ha un ID di uno e un ID genitore zero. Il record per la contea di San Francisco ha un ID di due e un ID madre di uno. Ogni record del bambino nelle registrazioni riferimenti tabella padre nella stessa tabella; il tavolo è autoreferenziale.

Consolidamento

Un effetto di tabelle autoreferenziali è un consolidamento di più tabelle in un'unica tabella. Avere un minor numero di tabelle del database semplifica e facilita la sua manutenzione. I moderni sistemi di database ospitare facilmente milioni di record per tabella, in modo da mantenere tutti gli elementi di dati di una gerarchia in una singola tabella non è un problema. Impostando il campo ID di una chiave primaria e l'ID genitore di un indice, si può facilmente individuare tutti i record su uno qualsiasi ramo della gerarchia.

Flessibilità

Un database che dispone di una tabella per ogni livello in una gerarchia funziona bene fino a quando appare un nuovo livello, come si deve poi aggiungere un nuovo tavolo per accogliere il cambiamento e modificare tutti i programmi applicativi che utilizzano il database. Al contrario, un tavolo autoreferenziale adatta a qualsiasi numero di livelli gerarchici. Il campo ID genitore punta sempre al livello successivo della gerarchia, in modo che i record di formare una catena coerente. Il numero di livelli di gerarchia può essere la stessa per tutti i record padre o può variare; la tavola di auto-riferimento gestisce entrambi i casi.

Cascading Delete

Quando una tabella autoreferenziale contiene record molti dati, ci si potrebbe chiedere che cosa fare quando si elimina un record padre. A meno che non si eliminano anche tutti i record figlio, si rischia di creare "orfani", o record con ID genitore non validi. Fortunatamente, esiste un meccanismo per gestire questa situazione automaticamente. Quando si crea il campo ID genitore, è possibile specificare che essa ha un campo chiave esterna, e utilizzare il campo ID come chiave principale della tabella. Una volta che avete fatto questo, è possibile aggiungere il vincolo, "ON DELETE CASCADE" al campo. Con il vincolo e impostazioni delle chiavi esterne in atto, il database eliminerà tutti i record figlio corrispondenti ogni volta che si elimina un record genitore.