Modellare relazioni 1:N con chiavi esterne

Introduzione ai database relazionali in SQL

Timo Grossenbacher

Data Journalist

Modello di database attuale

Introduzione ai database relazionali in SQL

Prossimo modello di database

Introduzione ai database relazionali in SQL

Implementare relazioni con chiavi esterne

  • Una chiave esterna (FK) punta alla chiave primaria (PK) di un'altra tabella
  • Il dominio della FK deve coincidere col dominio della PK
  • Ogni valore della FK deve esistere nella PK dell'altra tabella (vincolo FK o «integrità referenziale»)
  • Le FK non sono vere chiavi
Introduzione ai database relazionali in SQL

Una query

SELECT * FROM professors LIMIT 8;
 id |    firstname    |  lastname   | university_s..
  --+-----------------+-------------+-------------
  1 | Karl            | Aberer      | EPF
  2 | Reza Shokrollah | Abhari      | ETH
  3 | Georges         | Abou Jaoudé | EPF
  4 | Hugues          | Abriel      | UBE
  5 | Daniel          | Aebersold   | UBE
  6 | Marcelo         | Aebi        | ULA
  7 | Christoph       | Aebi        | UBE
  8 | Patrick         | Aebischer   | EPF
SELECT * FROM universities;
 id  |   university   | university_city
<hr />--+----------------+-----------------
 EPF | ETH Lausanne   | Lausanne
 ETH | ETH Zürich     | Zurich
 UBA | Uni Basel      | Basel
 UBE | Uni Bern       | Bern
 UFR | Uni Freiburg   | Fribourg
 UGE | Uni Genf       | Geneva
 ULA | Uni Lausanne   | Lausanne
 UNE | Uni Neuenburg  | Neuchâtel
 USG | Uni St. Gallen | Saint Gallen
 USI | USI Lugano     | Lugano
 UZH | Uni Zürich     | Zurich
Introduzione ai database relazionali in SQL

Definire chiavi esterne

CREATE TABLE manufacturers (
 name varchar(255) PRIMARY KEY);

INSERT INTO manufacturers 
VALUES ('Ford'), ('VW'), ('GM');

CREATE TABLE cars ( model varchar(255) PRIMARY KEY, manufacturer_name varchar(255) REFERENCES manufacturers (name)); INSERT INTO cars VALUES ('Ranger', 'Ford'), ('Beetle', 'VW');
-- Genera un errore!
INSERT INTO cars 
VALUES ('Tundra', 'Toyota');
Introduzione ai database relazionali in SQL

Definire chiavi esterne su tabelle esistenti

ALTER TABLE a 
ADD CONSTRAINT a_fkey FOREIGN KEY (b_id) REFERENCES b (id);
Introduzione ai database relazionali in SQL

Applichiamolo!

Introduzione ai database relazionali in SQL

Preparing Video For Download...