Modéliser les relations 1 :N avec des clés étrangères

Introduction aux bases de données relationnelles en SQL

Timo Grossenbacher

Data Journalist

Modèle de base de données actuel

Introduction aux bases de données relationnelles en SQL

Prochain modèle de base de données

Introduction aux bases de données relationnelles en SQL

Implanter des relations avec des clés étrangères

  • Une clé étrangère (FK) pointe vers la clé primaire (PK) d'une autre table
  • Le domaine de la FK doit être égal à celui de la PK
  • Chaque valeur de FK doit exister dans la PK de l'autre table (contrainte de FK ou « intégrité référentielle »)
  • Les FK ne sont pas de vraies clés
Introduction aux bases de données relationnelles en SQL

Une requête

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
Introduction aux bases de données relationnelles en SQL

Définir des clés étrangères

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');
-- Throws an error!
INSERT INTO cars 
VALUES ('Tundra', 'Toyota');
Introduction aux bases de données relationnelles en SQL

Définir des clés étrangères sur des tables existantes

ALTER TABLE a 
ADD CONSTRAINT a_fkey FOREIGN KEY (b_id) REFERENCES b (id);
Introduction aux bases de données relationnelles en SQL

Implémentons cela !

Introduction aux bases de données relationnelles en SQL

Preparing Video For Download...