외래 키로 1:N 관계 모델링

SQL로 배우는 관계형 데이터베이스 입문

Timo Grossenbacher

Data Journalist

현재 데이터베이스 모델

SQL로 배우는 관계형 데이터베이스 입문

다음 데이터베이스 모델

SQL로 배우는 관계형 데이터베이스 입문

외래 키로 관계 구현하기

  • 외래 키(FK)는 다른 테이블의 기본 키(PK)를 가리킵니다
  • FK의 도메인은 PK의 도메인과 같아야 합니다
  • FK의 각 값은 상대 테이블의 PK에 존재해야 합니다(참조 무결성, FK 제약)
  • FK는 실제 ‘키’는 아닙니다
SQL로 배우는 관계형 데이터베이스 입문

쿼리 예시

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
SQL로 배우는 관계형 데이터베이스 입문

외래 키 지정하기

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');
-- 오류 발생!
INSERT INTO cars 
VALUES ('Tundra', 'Toyota');
SQL로 배우는 관계형 데이터베이스 입문

기존 테이블에 외래 키 지정하기

ALTER TABLE a 
ADD CONSTRAINT a_fkey FOREIGN KEY (b_id) REFERENCES b (id);
SQL로 배우는 관계형 데이터베이스 입문

이제 구현해 봅시다!

SQL로 배우는 관계형 데이터베이스 입문

Preparing Video For Download...