logo

Vincoli di integrità referenziale nei DBMS

Un vincolo di integrità referenziale è anche noto come vincolo di chiave esterna . Una chiave esterna è una chiave i cui valori derivano dalla chiave primaria di un'altra tabella.

La tabella da cui derivano i valori è nota come Master o Referenziato La tabella e la tabella in cui i valori vengono inseriti di conseguenza sono note come Bambino o riferimento Tabella, In altre parole, possiamo dire che la tabella che contiene il chiave esterna è chiamato il tavolo per bambini e la tabella contenente il file Chiave primaria/chiave candidata è chiamato il tabella di riferimento o padre . Quando parliamo del modello relazionale del database, la chiave candidata può essere definita come un insieme di attributi che può avere zero o più attributi.

La sintassi della tabella principale o della tabella di riferimento è:

tokenizzatore di stringhe java
 CREATE TABLE Student (Roll int PRIMARY KEY, Name varchar(25) , Course varchar(10) ); 

Qui la colonna Roll agisce come Chiave primaria, che aiuterà a ricavare il valore della chiave esterna nella tabella figlio.

Vincolo di integrità referenziale

La sintassi della tabella figlio o della tabella di riferimento è:

 CREATE TABLE Subject (Roll int references Student, SubCode int, SubName varchar(10) ); 

Vincolo di integrità referenziale

Nella tabella sopra, la colonna Roll agisce come Chiave esterna, i cui valori sono derivati ​​utilizzando il valore Roll della chiave primaria dalla tabella Master.

Vincolo di chiave esterna O vincolo di integrità referenziale.

Esistono due vincoli di integrità referenziale:

Inserisci vincolo: Il valore non può essere inserito nella tabella CHILD se il valore non si trova nella tabella MASTER

Elimina vincolo: Il valore non può essere eliminato dalla tabella MASTER se il valore si trova nella tabella CHILD

Supponiamo di voler inserire Roll = 05 con altri valori di colonne nella tabella SUBJECT, quindi vedrai immediatamente un errore ' Vincolo di chiave esterna violato ' cioè eseguendo un comando di inserimento come:

Inserisci nei valori SUBJECT (5, 786, OS); non sarà intrattenuto da SQL a causa del vincolo di inserimento (Poiché non è possibile inserire un valore in una tabella figlia se il valore non si trova nella tabella principale, poiché Roll = 5 non è presente nella tabella principale, quindi non sarà consentito inserire Roll = 5 nella tabella figlia)

Allo stesso modo, se vuoi eliminare Roll = 4 dalla Tabella STUDENT, vedrai immediatamente un errore ' Vincolo di chiave esterna violato ' cioè eseguendo un comando di eliminazione come:

Cancella da STUDENTE dove Roll = 4; non sarà intrattenuto da SQL a causa del vincolo di eliminazione. (Poiché non è possibile eliminare il valore dalla tabella principale se il valore si trova nella tabella secondaria, poiché Roll = 5 è presente nella tabella secondaria, quindi non sarà consentito eliminare Roll = 5 dalla tabella principale, lasciamo se in qualche modo siamo riusciti a eliminare Roll = 5, quindi Roll = 5 sarà disponibile nella tabella figlia che alla fine violerà il vincolo di inserimento).

ON ELIMINA CASCATA.

npm pulisci la cache

Come da vincolo di eliminazione: il valore non può essere eliminato dalla tabella MASTER se il valore si trova nella tabella CHILD. Sorge la domanda successiva: possiamo eliminare il valore dalla tabella principale se il valore si trova nella tabella figlio senza violare il vincolo di eliminazione? cioè nel momento in cui eliminiamo il valore dalla tabella principale, anche il valore corrispondente dovrebbe essere eliminato dalla tabella figlia.

La risposta alla domanda precedente è SÌ, possiamo eliminare il valore dalla tabella principale se il valore si trova nella tabella secondaria senza violare il vincolo di eliminazione, dobbiamo apportare una leggera modifica durante la creazione della tabella secondaria, ovvero aggiungendo su Elimina cascata .

SINTASSI DELLA TABELLA

 CREATE TABLE Subject (Roll int references Student on delete cascade, SubCode int, SubName varchar(10) ); 

Nella sintassi precedente, subito dopo la parola chiave dei riferimenti (utilizzata per creare una chiave esterna), abbiamo aggiunto la funzione delete cascade, aggiungendola ora, possiamo eliminare il valore dalla tabella principale se il valore si trova nella tabella figlio senza violare l'eliminazione vincolo. Ora, se volessi eliminare Roll = 5 dalla tabella principale anche se Roll = 5 si trova nella tabella figlia, è possibile perché nel momento in cui dai il comando per eliminare Roll = 5 dalla tabella principale, la riga che ha Roll = Anche 5 dalla tabella figlio verrà eliminato.

stringa java
Vincolo di integrità referenziale
Vincolo di integrità referenziale

Vengono mostrate le due tabelle precedenti STUDENT e SUBJECT con quattro valori ciascuna, ora supponiamo che tu stia cercando di eliminare Roll = 4 dalla tabella STUDENT (Master) scrivendo un comando SQL: cancella da STUDENTE dove Roll = 4;

Nel momento in cui SQL esegue il comando precedente, anche la riga con Roll = 4 dalla tabella SUBJECT( Child ) verrà eliminata, il risultante STUDENTE e SOGGETTO la tabella sarà simile a:

Vincolo di integrità referenziale
Vincolo di integrità referenziale

Dalle due tabelle sopra STUDENT e SUBJECT, puoi vedere che in entrambe le tabelle Roll = 4 viene cancellato in una volta sola senza violare il vincolo di cancellazione.

A volte nelle interviste viene posta una domanda molto importante: la chiave esterna può avere valori NULL?

Java per il ciclo

La risposta alla domanda precedente è SI, può avere valori NULL, mentre la chiave primaria non può essere NULL ad ogni costo. Per comprendere praticamente la domanda di cui sopra, comprendiamo di seguito il concetto di eliminazione nulla.

SU CANCELLAZIONE NULL.

Come da vincolo di eliminazione: il valore non può essere eliminato dalla tabella MASTER se il valore si trova nella tabella CHILD. Sorge la domanda successiva: possiamo eliminare il valore dalla tabella principale se il valore si trova nella tabella figlio senza violare il vincolo di eliminazione? cioè nel momento in cui eliminiamo il valore dalla tabella principale, anche il valore corrispondente dovrebbe essere eliminato dalla tabella figlio o può essere sostituito con il valore NULL.

La risposta alla domanda precedente è SÌ, possiamo eliminare il valore dalla tabella principale se il valore si trova nella tabella secondaria senza violare il vincolo di eliminazione inserendo NULL nella chiave esterna, dobbiamo apportare una leggera modifica durante la creazione della tabella secondaria, ovvero aggiungendo all'eliminazione null .

SINTASSI DELLA TABELLA:

 CREATE TABLE Subject (Roll int references Student on delete null, SubCode int, SubName varchar(10) ); 

Nella sintassi precedente, subito dopo la parola chiave references (utilizzata per creare una chiave esterna), abbiamo aggiunto delete null, aggiungendolo ora, possiamo eliminare il valore dalla tabella principale se il valore si trova nella tabella figlio senza violare l'eliminazione vincolo. Ora, se volessi eliminare Roll = 4 dalla tabella principale anche se Roll =4 si trova nella tabella figlia, è possibile perché nel momento in cui dai il comando per eliminare Roll = 4 dalla tabella principale, la riga che ha Roll = 4 dalla tabella figlio verrà sostituito da un valore NULL.

Vincolo di integrità referenziale
Vincolo di integrità referenziale

Vengono mostrate le due tabelle precedenti STUDENT e SUBJECT con quattro valori ciascuna, ora supponiamo che tu stia cercando di eliminare Roll = 4 dalla tabella STUDENT (Master) scrivendo un comando SQL: cancella da STUDENTE dove Roll = 4;

Nel momento in cui SQL esegue il comando precedente, la riga con Roll = 4 dalla tabella SUBJECT( Child ) verrà sostituita da un valore NULL, il risultante STUDENTE e SOGGETTO la tabella sarà simile a:

Vincolo di integrità referenziale
Vincolo di integrità referenziale

Dalle due tabelle sopra STUDENT e SUBJECT, puoi vedere che nella tabella STUDENT Roll = 4 viene cancellato mentre il valore di Roll = 4 nella tabella SUBJECT viene sostituito da NULL. Ciò dimostra che la chiave esterna può avere valori nulli. Se nel caso della tabella SUBJECT, la colonna Roll è la chiave primaria insieme alla chiave esterna, in quel caso non potremmo fare in modo che una chiave esterna abbia valori NULL.