Django의 OneToOneField와 ForeignKey의 차이점

2023. 5. 23. 13:50· Django/DRF
목차
  1. 관계의 유일성
  2. NULL값의 허용
  3. 참조 방향
  4. 삭제 동작
  5. 예시
반응형

Django에서는 데이터베이스 모델 간의 관계를 정의하기 위해서 다양한 필드 타입을 제공하는데 공부를 하던 중 OneToOneField와 ForeignKey의 차이점이 잘 이해가 안갔다. 그래서 공부하면서 알아낸 내용을 정리하려고 한다.

 

 

관계의 유일성

OneToOneField는 관계를 유일하게 만든다. 각 객처는 하나의 관계만 가질 수 있다. ( 1 : 1 )

ForeignKey는 관계를 여러개의 객체사이에서 공유될 수 있다. 하나의 객체는 여러개의 다른 객체와 관계를 맺을 수 있다. ( 1 : N )

 

NULL값의 허용

OneToOneField는 기본적으로 OneToOneField는 관련된 객체가 반드시 존재해야한다.

ForeignKey는 기본적으로 Null값을 허용한다. 관련된 객체가 없을 수 있으며 필요에 따라 Null값을 가질 수 있다.

 

참조 방향

OneToOneFiled는 양방향 참조를 지원한다. 한 객체가 다른 객체를 참조하고 동시에 참조된 객체도 해당 객체를 역 참조할 수 있다. 

ForeignKey는 단방향 참조를 지원한다. 한 객체가 다른 객체를 참조하지만, 참조된 객체에서는 해당 객체로의 직접적인 접근을 할 수 없다.

 

삭제 동작

OneToOneField는 기본적으로 관련된 객체가 사라지면 함께 삭제된다. 

ForeignKey는 기본적으로 관련된 객체가 사라지면 Null로 설정된다.

 

 

예시

사실 나도 위에 내용만 보고 이해하기에는 조금 무리가 있었다. 특히 관계의 유일성 부분이 예시를 들어서 이해하니 그나마 조금 감이 잡혔고 이후 다른 차이점들을 읽어보니 어느정도 이해를 잡혔다. User - UserImage의 관계와 Post - Comment의 관계를 통해서 이해했다.

 

User - UserImage에서는 각 사용자는 하나의 프로필 이미지를 가질 수 있습니다. 

Post - Comment에서는 하나의 Post에 대해서 여러개의 Comment를 가질수 있습니다.

반응형
저작자표시

'Django > DRF' 카테고리의 다른 글

Django 인기글 구현  (1) 2023.09.26
클라우드 타입으로 Django, postgreSQL 서버 배포  (1) 2023.08.09
Django 모델 관계에 대한 이해 - 양방향 참조와 단방향 참조  (0) 2023.05.23
Django 추상화 클래스  (0) 2023.05.11
Django에서 루트파일 밑에 test파일을 만드는 이유  (0) 2023.05.11
  1. 관계의 유일성
  2. NULL값의 허용
  3. 참조 방향
  4. 삭제 동작
  5. 예시
'Django/DRF' 카테고리의 다른 글
  • Django 인기글 구현
  • 클라우드 타입으로 Django, postgreSQL 서버 배포
  • Django 모델 관계에 대한 이해 - 양방향 참조와 단방향 참조
  • Django 추상화 클래스
Jong_seoung
Jong_seoung
기록하자, 머리는 생각하는 곳이지 저장장치가 아니다.
Today_developStory기록하자, 머리는 생각하는 곳이지 저장장치가 아니다.
반응형
Jong_seoung
Today_developStory
Jong_seoung
전체
오늘
어제

블로그 메뉴

  • Home
  • Git Hub
  • 분류 전체보기 (350)
    • Theory (16)
    • Java (3)
      • 알고리즘 (2)
      • 문법 (0)
    • Spring (7)
      • 스프링 입문 (6)
      • PickTalk (0)
      • 에러처리 (1)
    • Python (80)
      • 알고리즘 - 이론 (17)
      • 알고리즘 - 내장함수, 라이브러리 등등 (3)
      • 알고리즘 - 백준 (53)
      • 나도코딩 정리 (2)
      • 기타 (5)
    • Django (159)
      • DRF (105)
      • 인프라 (46)
      • DataBases (2)
      • API Docs (6)
    • FrontEnd (22)
      • htmx (2)
      • React (8)
      • 자바스크립트 (12)
    • GIT (16)
    • 기타 (8)
      • 정리 (2)
      • Flutter (1)
      • 마이크로프로세서 - ATmega128 (2)
      • 개발환경 세팅 (3)
    • 자격증 (37)
      • 정보처리기사 (19)
      • SQLD자격증 (18)

인기 글

최근 글

태그

  • alarm
  • BFS
  • CSRF
  • Django
  • django channels
  • django sse
  • django tutorial
  • django 배포
  • django 스웨거 적용
  • Django 이미지 저장

최근 댓글

hELLO · Designed By 정상우.v4.3.0
Jong_seoung
Django의 OneToOneField와 ForeignKey의 차이점
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.