Modelování vztahů 1:N pomocí cizích klíčů

Introduction to Relational Databases in SQL

Timo Grossenbacher

Data Journalist

Aktuální databázový model

Introduction to Relational Databases in SQL

Nový databázový model

Introduction to Relational Databases in SQL

Implementace vztahů pomocí cizích klíčů

  • Cizí klíč (FK) odkazuje na primární klíč (PK) jiné tabulky
  • Doména FK musí být shodná s doménou PK
  • Každá hodnota FK musí existovat v PK druhé tabulky (omezení FK neboli „referenční integrita")
  • FK nejsou skutečné klíče
Introduction to Relational Databases in SQL

Dotaz

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 to Relational Databases in SQL

Definování cizích klíčů

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 to Relational Databases in SQL

Přidání cizích klíčů do existujících tabulek

ALTER TABLE a 
ADD CONSTRAINT a_fkey FOREIGN KEY (b_id) REFERENCES b (id);
Introduction to Relational Databases in SQL

Pojďme to implementovat!

Introduction to Relational Databases in SQL

Preparing Video For Download...