728x90
- Foreign Key (외부 키)
- 관계형 데이터베이스에서 한 테이블의 필드 중 다른 테이블의 행을 식별할 수 있는 키
- 참조하는 테이블에서 속성(필드)에 해당하고, 이는 참조되는 테이블의 기본 키를 가리킴
- ex) 게시글(참조되는), 댓글(참조하는)
- 참조하는 테이블의 외래 키는 참조되는 테이블 행 1개에 대응, 존재하지 않는 행 참조X
- 참조하는 테이블의 행 여러 개가 참조되는 테이블의 동일한 행을 참조할 수 있음
- 외부 키 특징
- 키를 사용하여 부모 테이블의 유일한 값 참조 (참조 무결성)
- 외래 키의 값이 반드시 부모 테이블의 기본 키일 필요는 없지만 유일한 값이어야 함
- 외부 키 필드
- 2개의 위치 인자가 반드시 필요
- 참조하는 model class
- on_delete 옵션
- CASCADE : 부모 객체(참조되는 객체)가 삭제 됐을 때 이를 참조하는 객체도 삭제
- migrate 작업 시 필드 이름에 _id를 추가하여 데이터베이스 열 이름을 만듦
- 2개의 위치 인자가 반드시 필요
# 예시
class Comment(models.Model):
article = models.ForeignKey(Article, on_delete=models.CASCADE)
...
- admin site에서 작성된 댓글 확인
from .models import Comment
admin.site.register(Comment)
# python manage.py creatsuperuser
- 1:N 관계 related manager
- 역참조('ㅇㅇㅇ_set')
- 1->N
- ex) 게시글에 댓글이 있을 수도 있고 없을 수도 있다.
- 실제로는 1의 클래스에는 N의 클래스와의 어떠한 관계도 작성 X
- 역참조 시 사용할 이름을 변경할 수 있는 옵션 : related_name
- 참조
- N->1
- 역참조('ㅇㅇㅇ_set')
- .save(commit=False)
- 아직 데이터베이스에 저장되지 않은 인스턴스를 반환
- 저장하기 전에 객체에 대한 사용자 지정 처리를 수행할 때 유용하게 사용
728x90
반응형
'TIL - 프로그래밍 > 개념, 설정' 카테고리의 다른 글
Django Handling HTTP requests (0) | 2022.04.18 |
---|---|
[Python] User (0) | 2022.04.18 |
[Python] ORM aggregate (0) | 2022.04.16 |
[Python] 데이터베이스 (0) | 2022.04.15 |
[Python] Tree3 - heap (0) | 2022.04.05 |
댓글