Integrità referenziale

Integrità referenziale

L'integrità referenziale è discussa in questo tutorial nel contesto del database relazionale. L'integrità referenziale è una proprietà di dati, affermando che tutti i suoi riferimenti sono validi. Qui sono preoccupati due tavoli. Uno è chiamato tabella di riferimento o genitore. Questa tabella di riferimento ha una chiave primaria, che può essere composta da una o più colonne. L'altra tabella ha una chiave esterna i cui valori sono uguali a quelli della chiave primaria della tabella di riferimento. L'altra tabella viene definita tabella figlio alla tabella principale.

Il numero di colonne che compongono la chiave esterna nella tabella dei bambini è lo stesso di quelle che compongono la chiave primaria nella tabella di riferimento (genitore). Tutti i valori della chiave estera si trovano nella colonna della chiave primaria. Tuttavia, i valori nella colonna chiave esterna possono ripetere nella tabella dei bambini.

La tabella dei bambini ha una propria chiave primaria che è diversa dalla colonna chiave estera che ha. La tabella dei bambini è anche chiamata tabella di riferimento.

"Tutti i suoi riferimenti sono validi" significa che una chiave estera nella tabella dei bambini indica una riga nella tabella di riferimento. Quella chiave esterna nella tabella dei figli e la chiave primaria nella tabella di riferimento (genitore) hanno lo stesso valore. Più di una chiave esterna nella tabella dei bambini può indicare una sola riga nella tabella di riferimento.

Questo articolo spiega i vincoli che sono naturalmente associati alla chiave estera della tabella dei bambini e alla stessa chiave primaria della tabella di riferimento. Se i vincoli sono rispettati, i dati (righe corrispondenti) in entrambe le tabelle formano l'integrità, senza errori, tutto è uguale; Da qui il termine integrità referenziale."

Illustrazione con due tabelle

La notazione della tabella delle due tabelle può essere:

Vendite (Saleid, Datedold, CustomerId, dipendente)


E

Clienti (CustomerID, CustomerName, Telefono, Indirizzo, Città, Regione, Ccodi postali, Paese)


CustomerId nella tabella delle vendite è una chiave esterna con un trattino sottolineato. CustomerId nella tabella dei clienti è una chiave primaria con un singolo sottolinea. La chiave primaria per la tabella delle vendite è SaleId, con una sola sottoline. SaleID nella tabella delle vendite dipende da CustomerID e dipende dall'attributo DateSold e dall'attributo dei dipendenti (colonna).

Le tabelle con i dati sono le seguenti:

Tavolo di vendita

Saleid Datedold identificativo del cliente dipendente
1 07/06/23 1 John Jones
2 07/07/23 2 Barbara Baker
3 07/07/23 2 Peter Lewis
4 07/08/23 1 John Jones
5 07/09/23 3 Barbara Baker
6 07/10/23 1 Barbara Baker
7 07/11/23 1 Barbara Baker
8 07/12/23 1 John Jones
9 13/07/23 2 Peter Lewis

Tabella dei clienti



Per entrambi i tavoli, i clienti (individui) vanno in un negozio e acquistano prodotti diversi in giorni diversi. I prodotti acquistati non sono mostrati. La tabella dei clienti ha gli indirizzi dei clienti nella stessa città. La tabella di vendita ha i nomi dei dipendenti che hanno servito i singoli clienti e hanno altri dati.

Nel tavolo delle vendite, CustomerId è una chiave estera. Nella tabella dei clienti, CustomerID è una chiave primaria. Ogni chiave esterna nella tabella delle vendite si verifica nella tabella dei clienti una volta. Cioè, ogni chiave estera nella tabella di vendita fa riferimento a una chiave primaria e quindi fa riferimento a una riga distinta nella tabella dei clienti. L'integrità dei dati (referenziali) fallisce se non è così.

Valore nullo e chiavi esteri

Una chiave esterna nella tabella dei figli deve fare riferimento a una riga, attraverso la chiave primaria, della tabella principale. Tutte le chiavi primarie della tabella principale sono uniche. Le chiavi estere nella colonna chiave estera nella tabella dei bambini, tutte trovate nella tabella dei genitori, non devono essere univoci. Si dovrebbero prevedere ripetizioni di chiavi straniere. Sopra, la tabella delle vendite è una tabella dei bambini e la tabella dei clienti è una tabella dei genitori. Considera queste due tabelle come appartenenti al database di un negozio di alimentari. I clienti sono persone che acquistano dal negozio.

Immagina che il cliente con CustomerID 2 ti abbia offeso, il proprietario del negozio; Ad esempio, ha cercato di rubare e lo hai proibito di essere mai tornato a comprare di nuovo nel tuo negozio. Ciò significa che il suo nome deve essere rimosso dalla tua lista di clienti. I suoi acquisti nel tavolo delle vendite sono in passato, è avvenuto senza alcun problema, e quindi deve rimanere.

In questo caso, tutti i clienti di 2 nella tabella delle vendite devono essere sostituiti da null (nulla), il che non significa alcun riferimento alla tabella dei clienti di una riga che è stata eliminata. Per la tabella dei clienti di cui sopra, due righe rimarranno dopo la sua fila (Customerid e il resto delle sue credenziali) è stata eliminata.

Esistono due modi per annullare la riga nella tabella dei clienti, dal computer (sistema di gestione del database) come segue:

    1. In realtà eliminare la riga e i residui di CustomerID sono 1 e 3, mancando il valore automatico di 2 e la sua riga;
    2. effettivamente eliminazione della riga e rinumerando il resto delle righe sotto di esso da 2, incrementazione automatica, e non mancano 2 nella tabella dei clienti. In questo caso, tutte le chiavi esteri da 3 nel tavolo delle vendite sono rinumerate, che incrementano automaticamente da 2 e non mancano 2 nella tabella delle vendite.


Qualunque sia il modo scelto, il valore null rimane nella tabella di vendita come chiave estera per il cliente eliminato le righe corrispondenti. I riferimenti a valore null (punta a) nessuna riga nella tabella dei clienti.

Quindi, per tali motivi, una chiave straniera può avere un valore nullo. Questo ha a che fare con l'integrità referenziale!

Aggiornamento delle tabelle figlio e dei genitori

L'aggiornamento significa modificare. Modifica di qualsiasi cella nella tabella del bambino (vendite) (anche la svendita), ad eccezione della chiave estera, non causa realmente alcun danno alla tabella dei figli o alla tabella dei genitori (clienti). Ad esempio, se la data è stata erroneamente digitata per errore, la data corretta dovrebbe essere digitata.

La modifica di qualsiasi cella nella tabella genitore (clienti), ad eccezione della chiave primaria, non causa realmente alcun danno alla tabella genitore (clienti) o alla tabella del figlio (vendite). Ad esempio, se il cliente ha cambiato la sua strada ma è ancora nel quartiere, cambiando il suo indirizzo nella tabella dei clienti non causa alcun danno alle corrispondenze della tabella figlio e dei genitori.

Tuttavia, modificare il valore della chiave esterna nella tabella dei figli significa che tutti gli stessi valori di chiave estera nella tabella dei figli devono essere modificati in quel particolare valore e anche quello corrispondente del valore della chiave primaria nella tabella dei genitori deve essere modificato , anche allo stesso valore. Questo è a cascata.

Può essere modificata una chiave esterna Null? - Bene, sì: se il cliente sopra esponente torna dopo sei mesi e si scusa, e tu, il proprietario, perdonalo, e se solo le sue righe nella tabella delle vendite avevano valori nulli, allora il suo nome e le sue credenziali saranno inseriti nel Tabella dei clienti, in fondo, con un nuovo customerid; E tutti i valori null come chiavi estere nella tabella figlio (vendite), saranno sostituiti da questo nuovo IDID. Tuttavia, se ci fossero altre righe nella tabella dei bambini con valori nulli non appartenenti a lui, rimarranno tutti i valori nulli, incluso il suo; E tutte le sue nuove vendite saranno inserite di nuovo nella tabella delle vendite, nella parte inferiore del tavolo delle vendite.

Eliminazione nelle tabelle figlio e genitore

Non ha senso eliminare alcun valore della cella della colonna nella tabella figlio o genitore a meno che non sia per una colonna il cui valore della cella può essere vuoto. Vuoto non significa null. Vuoto significa vuoto.

Tuttavia, è possibile eliminare un'intera riga nella tabella figlio o nella tabella dei genitori. Supponiamo che ci siano alcune righe false nella tabella del bambino (vendite); Se queste righe vengono eliminate (comprese le loro vendite e le chiavi esteri), allora non ci saranno problemi. I clienti o hanno altre righe reali nella tabella dei bambini o non hanno semplicemente mostrato la loro volontà di acquistare dal negozio e non hanno mai acquistato nulla. - Compreranno un giorno nel prossimo futuro.

D'altra parte, se c'è un cliente falso con vendite false quando la sua riga nella tabella dei clienti viene eliminata, tutte le sue false righe di vendita nel tavolo delle vendite devono essere eliminate. Questo è a cascata. Ciò può accadere quando un dipendente esegue vendite reali, registra informazioni false e segni come un altro dipendente nella stessa tabella. Poiché le corrispondenti chiavi esterne nella tabella figlio sono uguali alla chiave primaria nella tabella principale, lo stesso valore collega le due tabelle.

Per risolvere questo problema, ogni dipendente dovrebbe avere il proprio libro di esercizi di vendita se il computer non viene utilizzato. Se viene utilizzato il computer, ogni dipendente dovrebbe avere un nome utente di accesso e una password all'applicazione del sistema di gestione del database, che registra automaticamente il nome del dipendente da tutte le sue azioni.

Citazioni

I seguenti tre paragrafi sono citazioni di Wikipedia:

“L'integrità referenziale è una proprietà di dati, affermando che tutti i suoi riferimenti sono validi.

Nel contesto dei database relazionali, richiede che se un valore di un attributo (colonna) di una relazione (tabella) riferisce un valore di un altro attributo (nella stessa o una relazione diversa), il valore di riferimento deve esistere.

L'integrità referenziale è un concetto di database che garantisce che le relazioni tra le tabelle rimangono coerenti. Quando una tabella ha una chiave esterna per un'altra tabella, il concetto di integrità referenziale afferma che non si può aggiungere un record alla tabella che contiene la chiave esterna a meno che non vi sia un record corrispondente nella tabella collegata."

Azioni referenziali

Senza il computer, è difficile far rispettare l'integrità referenziale. Questo porta a errori contabili. Con il computer, l'integrità referenziale può essere applicata applicando a cascata e altre azioni programmando il sistema di gestione del database.

CASCATA

Ciò significa: aggiornamento o eliminazione a cascata.

LIMITARE

Ciò significa: non aggiornare o eliminare le righe connesse nella tabella figlio e genitore.

NESSUNA AZIONE

Limitare i controlli le connessioni delle righe in entrambe le tabelle prima di provare ad aggiornare o eliminare. Nessuna azione è simile a limitare, ma cerca di aggiornare o eliminare prima di controllare le connessioni in entrambe le tabelle.

Limitare emetterà un messaggio di errore che è stato fatto un tentativo di aggiornare o eliminare una riga, nonostante il fatto che vi sia una riga corrispondente nell'altra tabella che non sarebbe stata aggiornata o cancellata. Nessuna azione aggiornerebbe o eliminerebbe la riga e quindi emette un messaggio di errore che la riga è stata aggiornata o eliminata, nonostante il fatto che esista una riga corrispondente nell'altra tabella. Naturalmente, ciò comporterebbe una contabilità errata a meno che l'utente non fosse in procinto di gestire manualmente entrambe le modifiche alla tabella.

Se non esiste una riga corrispondente nell'altra tabella, aggiornare o eliminare la riga, indipendentemente dal fatto che l'applicazione fosse limitata o nessuna azione.

Imposta NULL

Con questa azione applicata, se viene eliminata una riga nella tabella principale, tutte le chiavi estere delle righe corrispondenti nella tabella dei figli sarebbero impostate su NULL su NULL.

IMPOSTA DEFAULT

Con questa azione applicata, se viene eliminata una riga nella tabella principale, tutte le chiavi esterne delle righe corrispondenti nella tabella figlio verrebbero impostate sul valore predefinito scelto dall'utente del database.

Conclusione

L'integrità referenziale è un concetto di database che garantisce che le relazioni tra le tabelle rimangono coerenti. Quando una tabella ha una chiave esterna per un'altra tabella, il concetto di integrità referenziale afferma che non si può aggiungere un record alla tabella che contiene la chiave esterna a meno che non vi sia un record corrispondente nella tabella collegata.

Quando le tabelle sono mantenute nei registri, diventa difficile far rispettare l'integrità referenziale. Tuttavia, quando un DBMS mantiene le tabelle in un computer, quelle azioni referenziali vengono applicate da un programmatore.