Chiave esterna di SQL Server: come crearla con un esempio
โก Riepilogo intelligente
In SQL Server, una chiave esterna garantisce l'integritร referenziale collegando una tabella figlia a una tabella padre. Ogni valore della chiave esterna deve giร esistere nella chiave primaria della tabella padre a cui fa riferimento.

Cos'รจ una CHIAVE ESTERA?
Una chiave esterna fornisce un modo per imporre l'integritร referenziale all'interno SQL ServerIn parole semplici, una chiave esterna garantisce che i valori presenti in una tabella debbano essere presenti anche in un'altra tabella.
Regole per la CHIAVE ESTERA
- Nei campi delle chiavi esterne SQL รจ consentito il valore NULL.
- La tabella a cui si fa riferimento รจ chiamata tabella padre.
- La tabella con la chiave esterna รจ chiamata tabella figlia.
- La chiave esterna nella tabella figlia fa riferimento a chiave primaria nella tabella principale.
- Questo rapporto genitore-figlio rafforza la regola nota come "integritร referenziale".
Il diagramma seguente riassume tutti i punti sopra descritti relativi alla chiave esterna.
Come creare una CHIAVE ESTERA in SQL
ร possibile creare una chiave esterna in SQL Server in due modi:
SQL Server Management Studio
Tabella principale: Supponiamo di avere una tabella principale esistente chiamata 'Course'. Course_ID e Course_name sono due colonne, con Course_ID come chiave primaria.
Tabella figlia: Dobbiamo creare la seconda tabella come tabella figlia. Le sue due colonne saranno 'Course_ID' e 'Course_Strength'. Tuttavia, 'Course_ID' sarร la chiave esterna.
Passaggio 1) Fare clic con il pulsante destro del mouse su Tabelle > Nuovo > Tabellaโฆ
Passaggio 2) Inserire due nomi di colonna: 'Course_ID' e 'Course_Strength'. Fare clic con il pulsante destro del mouse sulla colonna 'Course_ID', quindi fare clic su Relazione.
Passaggio 3) In 'Relazioni chiave esterna', fare clic su 'Aggiungi'.
Passaggio 4) In 'Specifiche di tabelle e colonne', fare clic sull'icona 'โฆ'.
Passaggio 5) Selezionare "COURSE" come "Tabella chiave primaria" e la nuova tabella da creare come "Tabella chiave esterna" dal menu a tendina.
Passaggio 6) Per la 'Tabella chiave primaria', selezionare la colonna 'Course_Id' come colonna della tabella chiave primaria.
Per la "Tabella delle chiavi esterne", selezionare la colonna "Course_Id" come colonna della tabella delle chiavi esterne. Fare clic su OK.
Passaggio 7) Fare clic su Aggiungi.
Passaggio 8) Assegnare alla tabella il nome 'Course_Strength' e fare clic su OK.
Risultato: Abbiamo stabilito una relazione padre-figlio tra 'Course' e 'Course_Strength'.
T-SQL: Creare una tabella padre-figlio utilizzando T-SQL
Tabella padre: Consideriamo di avere giร una tabella padre denominata 'Course'. Course_ID e Course_name sono due colonne, con Course_ID come chiave primaria.
Tabella figlia: Dobbiamo creare una seconda tabella come tabella figlia con il nome 'Course_Strength_TSQL'. Le sue due colonne saranno 'Course_ID' e 'Course_Strength'. Tuttavia, 'Course_ID' sarร la chiave esterna.
Di seguito รจ riportata la sintassi per creare una tabella con una CHIAVE ESTERNA.
Sintassi:
CREATE TABLE childTable ( column_1 datatype [ NULL |NOT NULL ], column_2 datatype [ NULL |NOT NULL ], ... CONSTRAINT fkey_name FOREIGN KEY (child_column1, child_column2, ... child_column_n) REFERENCES parentTable (parent_column1, parent_column2, ... parent_column_n) [ ON DELETE { NO ACTION |CASCADE |SET NULL |SET DEFAULT } ] [ ON UPDATE { NO ACTION |CASCADE |SET NULL |SET DEFAULT } ] );
Ecco una descrizione dei parametri di cui sopra:
- childTable รจ il nome della tabella da creare.
- column_1 e column_2 sono le colonne da aggiungere alla tabella.
- fkey_name รจ il nome del vincolo di chiave esterna da creare.
- child_column1, child_column2 โฆ child_column_n sono le colonne della tabella figlia che fanno riferimento alla chiave primaria nella tabella padre.
- parentTable รจ il nome della tabella padre la cui chiave รจ referenziata nella tabella figlia.
- parent_column1, parent_column2 โฆ parent_column_n sono le colonne che costituiscono la chiave primaria della tabella padre.
- ON DELETE รจ un parametro opzionale che specifica cosa accade ai dati figlio dopo l'eliminazione dei dati padre. I valori possibili sono NO ACTION, SET NULL, CASCADE o SET DEFAULT.
- ON UPDATE รจ un parametro opzionale che specifica cosa accade ai dati del figlio dopo l'aggiornamento dei dati del padre. I valori possibili sono NO ACTION, SET NULL, CASCADE o SET DEFAULT.
- NESSUNA AZIONE significa che non accade nulla ai dati del figlio dopo l'aggiornamento o la cancellazione dei dati del padre.
- CASCADE significa che i dati del figlio vengono eliminati o aggiornati dopo che i dati del padre sono stati eliminati o aggiornati.
- SET NULL significa che i dati del figlio vengono impostati su null dopo che i dati del genitore sono stati aggiornati o eliminati.
- L'opzione IMPOSTA DEFAULT significa che i dati del figlio vengono ripristinati al loro valore predefinito dopo un aggiornamento o una cancellazione dei dati del padre.
Vediamo un esempio di chiave esterna che crea una tabella con una colonna come CHIAVE ESTERNA, utilizzando una tipo di dati per ogni colonna.
Esempio di chiave esterna in SQL
Query:
CREATE TABLE Course_Strength_TSQL ( Course_ID Int, Course_Strength Varchar(20) CONSTRAINT FK FOREIGN KEY (Course_ID) REFERENCES COURSE (Course_ID) )
Passaggio 1) Eseguire la query facendo clic su Esegui.
Risultato: Abbiamo stabilito una relazione padre-figlio tra 'Course' e 'Course_Strength_TSQL'.
Utilizzando ALTER TABLE
Ora impareremo come aggiungere una chiave esterna in SQL Server a una tabella giร esistente utilizzando l'istruzione ALTER TABLE. Useremo la sintassi riportata di seguito:
ALTER TABLE childTable ADD CONSTRAINT fkey_name FOREIGN KEY (child_column1, child_column2, ... child_column_n) REFERENCES parentTable (parent_column1, parent_column2, ... parent_column_n);
Ecco una descrizione dei parametri utilizzati sopra:
- childTable รจ il nome della tabella da creare.
- column_1 e column_2 sono le colonne da aggiungere alla tabella.
- fkey_name รจ il nome del vincolo di chiave esterna da creare.
- child_column1, child_column2 โฆ child_column_n sono le colonne della tabella figlia che fanno riferimento alla chiave primaria nella tabella padre.
- parentTable รจ il nome della tabella padre la cui chiave รจ referenziata nella tabella figlia.
- parent_column1, parent_column2 โฆ parent_column_n sono le colonne che costituiscono la chiave primaria della tabella padre.
Esempio di ALTER TABLE aggiunta di chiave esterna:
ALTER TABLE department ADD CONSTRAINT fkey_student_admission FOREIGN KEY (admission) REFERENCES students (admission);
Abbiamo creato una chiave esterna denominata fkey_student_admission nella tabella del dipartimento. Questa chiave esterna fa riferimento alla colonna di ammissione della tabella degli studenti.
Esempio di query CHIAVE ESTERA
Innanzitutto, diamo un'occhiata ai dati della nostra tabella principale, COURSE.
Query:
SELECT * from COURSE;
Ora proviamo a inserire alcune righe nella tabella secondaria 'Course_Strength_TSQL'. Cercheremo di inserire due tipi di righe:
- Il primo tipo, per cui Course_Id nella tabella figlia esiste in Course_Id nella tabella padre, ovvero Course_Id = 1 e 2.
- Il secondo tipo, per il quale Course_Id nella tabella figlia non esiste in Course_Id nella tabella padre, ovvero Course_Id = 5.
Query:
Insert into COURSE_STRENGTH values (1,'SQL'); Insert into COURSE_STRENGTH values (2,'Python'); Insert into COURSE_STRENGTH values (5,'PERL');
Risultato: Eseguiamo insieme la query per visualizzare le tabelle padre e figlio.
Le righe con Course_ID 1 e 2 sono presenti nella tabella Course_Strength. Course_ID 5, tuttavia, costituisce un'eccezione, poichรฉ non ha una riga corrispondente nella tabella principale.

















