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).


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow