728x90
반응형

https://dev.mysql.com/

 

 

 

안녕하십니까 다제입니다. 

 

지금까지 SQL에 대해서 숨가쁘게 달려왔습니다. 

 

이제 천천히 돌아서 생각을 해보겠습니다. 우리는 Foreign Key를 생성하는 방법에 대해서는 배웠습니다. 

그러나, 부모테이블이나 자식테이블이 변경 또는 삭제될 때 Foreign Key는 어떻게 되는 것일까요?

 

결론부터 말씀을 드리자면,

RESTRICT, SET NULL, CASCADE 중에서 저희가 무엇으로 설정해주는지에 따라서 달라지게 됩니다. 

 

이에, 해당 포스팅에서는 ①Foreign Key 정책②논리적&물리적 Foreign Key에 대해서 알아보도록 하겠습니다. 

 

 

 

 


 

 

1. Foreign Key 정책

 

1) RESTRICT 정책 

 -. 자식테이블에서 부모테이블을 참조하고 있는 것이 하나라도 있다면 그 부모테이블의 해당되는 row(record)는 "삭제"하거나 "업데이트" 할 수 없는 정책입니다. 

 -. 부모테이블이 "삭제"하거나 "업데이트"되었을 때 해당 row를 참조하고 있는 자식테이블에게 영향을 줄 수 있기 때문에 일반적으로 사용됩니다. 

 -. NO ACTION은 RESTRICT과같은 정책입니다.

 

 

2) SET NULL 정책

 -. 부모테이블이 "삭제"하거나 "업데이트"되어도 해당 row를 참조하고 있는 자식테이블은 그대로 유지하고 싶을 때 사용하는 정책입니다. 

 -. "삭제"하거나 "업데이트"되면 자식 데이블에는 NULL값이 들어가게 됩니다. 

 

 

3) CASCADE 정책 

 -. 부모테이블의 row를 "삭제"하거나 "업데이트"될 때 자식테이블의 row도 함께 "삭제"하거나 "업데이트"되는 정책입니다. 

from django.db import models
from core import models as core_models
 
 
class List(core_models.TimeStampedModel):
   """List model Definition"""
 
   name = models.CharField(max_length=80)
   user = models.ForeignKey("users.User", on_delete=models.CASCADE)
   rooms = models.ManyToManyField("rooms.Room", blank=True)
 

 -. 사용되는 예

  * 에어비엔비에서 방이 삭제되면, 해당 리뷰, 사진, 기타 해당 방과 관련된 모든 정보가 삭제될 때 유용하게 사용됨 

  * 인스타그램에서 계정을 삭제하였을 때 그 user의 사진 및 정보를 삭제될 때 유용하게 사용됨 

참조 무결성은 데이터를 추가할 때 데이터를 삭제 할때 발생되는 중요한 특성입니다.

 

 

 

 


 

 

 

2. 논리적 & 물리적 Foreign Key

 

1) 논리적 Foreign Key

  -. Foreign Key로 설정을 해주지 않았으나, 데이터의 논리적인 흐름상 동일한 데이터를 지칭하는 경우를 의미함 

 

2) 물리적 Foreign Key

  -. 논릴적 Foreign Key가 직접적으로 설정되어 있는 경우을 의미함 

 

3) 논리적 Foreign Key를 사용하는 이유(성능문제)

  -. 실제 서비스에서는  단 1초 내에도 수정, 삭제, 업데이트 등 수 많은 작업이 이루어짐

  -. SQL 구문 하나 하나가 얼마나 빨리 실행되는지가 사용자의 편의를 높힐 수 있음 

  -. 물리적 Foreign Key가 많은 경우, 성능저하 문제를 야기시킬 수 있음(참조무결성 검토에 따른 지연)

 

4) 기타 

  -. Legacy : 프로그램의 기존 코드, 기존 데이터 등을 나타낼 때 사용하는 말입니다.

  -. 개념적 스키마(Conceptual Schema) : 데이터베이스에 관한 모든 설계사항

  -. 물리적 스키마(Physical Schema) 데이터를 실제로 컴퓨터의 저장장치에 어떤 방식으로 저장할지를 결정하는 스키마

 

 

 

 

위와 같이 ①Foreign Key 정책 ②논리적&물리적 Foreign Key에 대해 알아보았습니다. 

 

문의사항이 있으시면 언제든 댓글 부탁드립니다. 

 

오늘도 방문해주셔서 감사합니다. 

 

728x90
반응형

+ Recent posts