Django ManyToMany 관계테이블 모델

HS L·2023년 5월 31일
0

내일배움캠프

목록 보기
58/73

django ManyToMany -> 관계테이블 모델

실무에서는 ManyToManyField를 사용하지 않고 관계테이블을 직접 만들어서 관리한다고 들었다.
이는 데이터 관리를 좀 더 직관적으로 설계할 수 있다고 한다.

ManyToManyField를 사용했을 경우 django에서 자동적으로 관계테이블을 생성해주는 편리함이 있지만 다대다 관계를 좀더 직관적으로 보고자 하는것과 추가적인 요소를 넣기에 제한적이다.

프로젝트 기능구현과정에서 emoticon모델과 이모티콘을 사용하는 user모델의 관계를 나타내는 테이블을 작성했다.

# 이모티콘 구매자 테이블
class UserBoughtEmoticon(CommonModel):
    buyer = models.ForeignKey(User, on_delete=models.CASCADE, related_name='emoticon_list')
    emoticon = models.ForeignKey(Emoticon, on_delete=models.CASCADE, related_name='sold_emoticon')

이전 프로젝트에서 사용한 ManyToManyField의 db를 확인하면 다음과 같다

product모델과 category모델을 ManyToManyField로 연결했을때 db에 생성되는 테이블에는 각각의 id와 테이블 고유의 id 세가지 필드로만 구성 된다.

아래는 테이블 모델을 추가적으로 작성했을때의 결과다.

ManyToManyField사용과는 다르게 추가적인 field가 생성된 것을 확인할 수 있다.
위 코드에서는 작성되지 않았지만 created_at, updated_at, db_status필드는 본 프로젝트에서 모든 모델에 공통적으로 사용하고자하는 필드를 미리 작성해둔 Common모델을 상속하게 된 필드들이다.

이처럼 다대다 관계를 가진 모델들의 관계테이블을 작성하면 좀더 직관적이고 필요에 따라 추가적인 필드를 구성할 수 있다.

추가적인 필드를 활용하여 필요한 객체를 반환하는 작업도 가능하기 때문에 데이터관리에서도 이점을 가져올 수 있게 된다.

profile
식이

0개의 댓글