[SQL] Foreign Key(외래키)에 대해 이해하기

Basics 2023. 5. 24.

 

Foreign key(외래키)란?

 

Foreign key는 한 테이블의 컬럼 중에서 다른 테이블의 행(row)을 고유하게 식별할 수 있는 키를 말한다.

 

 

 

 

Foreign Key를 사용하는 이유는?

 

  데이터의 무결성 보장: 외래 키(Foreign Key)를 사용하면 관계를 맺고 있는 두 테이블에서 데이터의 일관성을 유지할 수 있다.

예를 들어, 주문(order) 테이블과 상품(product) 테이블이 있을 때, 주문 테이블에서는 존재하지 않는 상품을 주문하는 것을 막을 수 있다.

 

  중복 데이터 제거: 동일한 정보를 여러 테이블에 중복해서 저장하는 것을 방지할 수 있다. 이는 저장 공간을 절약하고, 데이터의 변경이 필 요할 때 일관성을 유지하는 데 도움이 된다.

 

 

 

 

Foreign Key 설정하기

 

 

테이블 설정에서 하단에 Foreign keys를 누른다

 

 

 

 

 

 

 

 

 

 

 

 

왼쪽 네모부터 차례대로

외래키의 이름, 참조 당하는 테이블 선택,

참조하는 컬럼 선택참조 당하는 컬럼 선택

 

 

ON UPDATE와

ON DELETE는 

참조하는 행(부모)이 변경되었을 때, 참조되는 행(자식)이 어떤 작용을 할지 정의한다.

 

 



 

 


ON DELETE 와 ON UPDATE의 정책

 

  RESTRICT(제한하다): 자신을 참조하고 있는 자식 테이블에 row(행)가 하나라도 있는 부모 테이블의 row는 삭제(혹은 갱신)할 수 없다.

=> Error 1451 발생

 

  CASCADE(연쇄작용을 일크기다): 부모 테이블에서 행이 업데이트 또는 삭제되면, 이 변경사항이 자식 테이블에도 그대로 반영된다.

예를 들어, 부모 테이블에서 행이 삭제되면 자식 테이블에서 해당 부모 행을 참조하는 모든 행도 삭제된다

                부모 테이블에서 행이 변경되면 자식 테이블에서 해당 부모 행을 참조하는 모든 행도 똑같이 변경된다.

 

  SET NULL: 부모 테이블에서 행이 업데이트 또는 삭제되면, 자식 테이블에서 해당 부모 행을 참조하는 외래 키 값들이 모두 NULL로 설정된다. 이 설정을 사용하려면 외래 키 컬럼이 NULL을 허용하도록 설정되어 있어야 한다.

 

  NO ACTION: 'RESTRICT'과 동일하게 동작하지만, 무결성 검사 시점에 차이가 있다. 

RESTRICT는 즉시 무결성 검사를 수행하지만, NO ACTION은 무결성 검사를 더 늦게 수행한다.

 

 

 

 

 

 

  

'Basics' 카테고리의 다른 글

[DevStory] MVC 패턴  (0) 2023.06.14
[JavaScript 지식] ORM이란 무엇인가?  (0) 2023.05.14