본문 바로가기
TIL - 프로그래밍/개념, 설정

[Python] 외부 키, 참조

by chaemj97 2022. 4. 17.
728x90
  • Foreign Key (외부 키)
    • 관계형 데이터베이스에서 한 테이블의 필드 중 다른 테이블의 행을 식별할 수 있는 키
    • 참조하는 테이블에서 속성(필드)에 해당하고, 이는 참조되는 테이블의 기본 키를 가리킴
    • ex) 게시글(참조되는), 댓글(참조하는)
    • 참조하는 테이블의 외래 키는 참조되는 테이블 행 1개에 대응, 존재하지 않는 행 참조X
    • 참조하는 테이블의 행 여러 개가 참조되는 테이블의 동일한 행을 참조할 수 있음
  • 외부 키 특징
    • 키를 사용하여 부모 테이블의 유일한 값 참조 (참조 무결성)
    • 외래 키의 값이 반드시 부모 테이블의 기본 키일 필요는 없지만 유일한 값이어야 함
  • 외부 키 필드
    • 2개의 위치 인자가 반드시 필요
      • 참조하는 model class
      • on_delete 옵션
        • CASCADE : 부모 객체(참조되는 객체)가 삭제 됐을 때 이를 참조하는 객체도 삭제
    • migrate 작업 시 필드 이름에 _id를 추가하여 데이터베이스 열 이름을 만듦
# 예시

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
  • .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

댓글