Skip to content

Latest commit

 

History

History
94 lines (70 loc) · 2.76 KB

데이터베이스관계2.md

File metadata and controls

94 lines (70 loc) · 2.76 KB

Intro

데이터 모델링

  • 주어진 개념으로부터 논리적인 데이터 모델을 구성하는 작업
  • 물리적인 데이터베이스 모델로 만들어 고객의 요구에 따라 특정 정보 시스템의 데이터베이스에 반영하는 작업

용어 정리

target model

  • 관계 필드를 가지지 않은 모델

source model

  • 관계 필드를 가진 모델

중개 모델

  • 두 모델을 중개하는 모델
  • 두 모델과 각각 N:1 관계를 가짐
  • 장고는 ManyToManyField를 통해 중개 테이블을 자동으로 생성



ManyToManyField Argument

개요

ManyToManyField란?

  • ManyToManyField(to, **options)
  • 다대다 관계 설정시 사용하는 모델필드
  • 하나의 필수위치인자(관계 설정을 할 모델 클래스)가 필요
  • 모델 필드의 RelatedManager를 사용하여 관련 개체를 관리
    • add(), remove(), create(), clear()

데이터베이스에서의 표현

  • 장고는 다대다 관계를 나타내는 중개 테이블을 만듦
  • 테이블이름은 관계를 설정한 두 테이블의 이름을 조합해서 만듦
  • db_table 인자를 사용해 중개 테이블의 이름 변경 가능

Argument

related_name

  • target model이 source model을 참조할 때 사용할 manager name
  • ForeignKey()related_name과 동일

through

  • 중개 테이블을 수동으로 지정할 때 사용
  • 중개테이블에 추가 데이터를 사용해 다대다 관계와 연결

symmetrical

  • default: True
  • ManyToManyField가 동일한 모델을 가리키는 정의에서만 사용
  • True인 경우
    • _set 매니저 추가 X
    • source 모델이 target 모델을 참조하면 자동으로 반대 방향의 참조 성립
  • False인 경우
    • 대칭을 원하지 않는 경우 사용

Related Manager

  • N:1 혹은 M:N 관계에서 사용 가능한 문맥
  • 자동으로 역참조시 사용할 수 있는 manager 생성
  • N:1에서는 target 모델 객체만 사용 가능
  • M:M 관계에서는 관련된 두 객체 모두 사용 가능
  • methods 종류
    • add(), remove(), create(), clear(), set()

add()

  • 지정된 객체를 관련 객체 집합에 추가
  • 이미 존재하는 관계에 사용하면 관계 복제 X
  • 모델 인스턴스, 필드 값(pk)를 인자로 허용

remove()

  • 관련 객체 집합에서 지정된 모델 개체를 제거
  • 내부적으로 QuerySet.delete()를 사용하여 관계가 삭제됨
  • 모델 인스턴스, 필드 값(PK)를 인자로 허용

중개 테이블 필드 생성 규칙

소스 및 대상 모델이 다른 경우

  • id
  • [containing_model]_id
  • [other_model]_id

ManyToManyField가 동일한 모델을 가리키는 경우

  • id
  • from_model_id
  • to_model_id