Ricerca…
Creazione di una tabella con una chiave esterna
In questo esempio abbiamo una tabella esistente, SuperHeros
.
Questa tabella contiene un ID
chiave primaria.
Aggiungeremo un nuovo tavolo per memorizzare i poteri di ciascun supereroe:
CREATE TABLE HeroPowers
(
ID int NOT NULL PRIMARY KEY,
Name nvarchar(MAX) NOT NULL,
HeroId int REFERENCES SuperHeros(ID)
)
La colonna HeroId
è una chiave estranea al tavolo SuperHeros
.
Chiavi esterne
I vincoli Foreign Keys assicurano l'integrità dei dati, facendo rispettare i valori in una tabella che devono corrispondere ai valori di un'altra tabella.
Un esempio di dove è richiesta una chiave straniera è: in un'università, un corso deve appartenere a un dipartimento. Il codice per questo scenario è:
CREATE TABLE Department (
Dept_Code CHAR (5) PRIMARY KEY,
Dept_Name VARCHAR (20) UNIQUE
);
Inserire valori con la seguente dichiarazione:
INSERT INTO Department VALUES ('CS205', 'Computer Science');
La seguente tabella conterrà le informazioni degli argomenti offerti dalla sezione Informatica:
CREATE TABLE Programming_Courses (
Dept_Code CHAR(5),
Prg_Code CHAR(9) PRIMARY KEY,
Prg_Name VARCHAR (50) UNIQUE,
FOREIGN KEY (Dept_Code) References Department(Dept_Code)
);
(Il tipo di dati della chiave esterna deve corrispondere al tipo di dati della chiave di riferimento.)
Il vincolo di chiave esterna nella colonna Dept_Code
consente valori solo se sono già presenti nella tabella di riferimento, Department
. Ciò significa che se provi ad inserire i seguenti valori:
INSERT INTO Programming_Courses Values ('CS300', 'FDB-DB001', 'Database Systems');
il database genererà un errore di violazione di chiave esterna, poiché CS300
non esiste nella tabella del Department
. Ma quando provi un valore chiave che esiste:
INSERT INTO Programming_Courses VALUES ('CS205', 'FDB-DB001', 'Database Systems');
INSERT INTO Programming_Courses VALUES ('CS205', 'DB2-DB002', 'Database Systems II');
quindi il database consente questi valori.
Alcuni suggerimenti per l'utilizzo di chiavi esterne
- Una chiave esterna deve fare riferimento a una chiave UNICA (o PRIMARIA) nella tabella padre.
- L'inserimento di un valore NULL in una colonna Chiave esterna non genera un errore.
- I vincoli di chiave esterna possono fare riferimento a tabelle all'interno dello stesso database.
- I vincoli di chiave esterna possono fare riferimento a un'altra colonna nella stessa tabella (riferimento automatico).