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 |