인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

inspireworld님의 프로필 이미지
inspireworld

작성한 질문수

파이썬/장고로 결제 시작하기 (Feat. 아임포트) - 기본편

mall 앱 Category/Post 모델 추가 및 마이그레이션 등록

product model에서 category는 FK로 주셨는데, status는 왜 chocies로 주신 이유?

작성

·

33

0

category는 동적으로 추가할 가능성이 있지만,

status는 상태가 추가될 가능성이 드물기 때문에 이렇게 모델 설계를 하신게 맞을까요?

답변 2

0

이진석님의 프로필 이미지
이진석
지식공유자

안녕하세요.

추측하신 내용이 맞습니다.

  • status 필드는 정상, 품절, 단종, 비활성화와 같이 미리 정의된 값들을 가지며, 이러한 값들은 시간이 지나도 변경될 가능성이 매우 낮습니다. 비즈니스 로직에서 각 목록을 직접 참조해야하는 경우가 많아, 외래키 방식에 비해 코드의 가독성과 유지보수성을 높일 수 있습니다.

  • choices는 별도의 테이블없이 모델 정의 내에서 목록을 관리할 수 있어 구조가 단순해지며, 데이터베이스 조인없이 필드의 값을 바로 사용할 수 있어 조회 성능이 더 좋습니다.

  • 개발자가 코드 상에서 직접 값을 참조할 수 있어 코드의 의도가 더 명확해집니다. ex) Product.objects.filter(status=Product.Status.ACTIVE)

  • 그리고, 지정된 값만 사용할 수 있어 데이터 일관성을 보장받을 수 있습니다.

  • 목록 변경이 필요할 경우, 별도의 데이터베이스 수정없이 모델 정의만 수정하면 되므로 마이그레이션이 간단합니다.

어떤 시스템에서는 "공통코드"라는 이름으로 이러한 선택지들을 모두 데이터베이스에 넣어두는 데요. 저는 공통코드 테이블보다 // 이러한 이유로, 변경 가능성이 낮고 직접 참조가 필요한 필드는 외래키보다 choices를 사용하는 것이 더 좋다고 생각하며, 추천드립니다.

0

안녕하세요, 인프런 AI 인턴입니다. inspireworld님.
비슷한 주제를 다룬 질문과 답변을 찾을 수 있었습니다. Django 모델 설계 시 ForeignKey와 TextChoices를 사용하는 이유와 차이가 설명된 내용을 소개드리니 참조해보세요.

  1. 모델 설계, 데이터 저장 - 데이터 정규화에 대한 토론과 다양한 필드 유형 선택의 중요성을 다룬 게시물입니다.
    이 답변에서는 Django 모델과 폼의 장점과 단점을 어떻게 활용할 수 있는지에 대해 설명하고 있습니다. 특히 유사한 상황에서 텍스트 기반 필드와 ForeignKey를 사용하는 이유에 대해 논의하고 있습니다.

  2. 외래키 설정을 다르게 하는 경우 - ForeignKey를 어디에 설정하는지와 어떤 이유로 그렇게 설정하는지에 대한 예제와 설명이 포함된 게시물입니다.
    이 답변에서는 외래 키 설정이 모델 관계에서 어떻게 중요한 역할을 하는지와 다양한 설정 방법에 대해 설명하고, 텍스트 기반 필드와의 비교 설명도 일부 제공하고 있습니다.

  3. 옵션 설계에 관해서 - 특정 상황에서 다형성, 외래 키 및 다양한 필드 선택에 대해 상세히 논의한 게시물입니다. 주제와 직접적으로 연결되지는 않지만, 데이터베이스 모델링에 대한 고려 사항을 폭넓게 다루고 있습니다.
    이 예제는 다양한 모델링 방식과 그 결정의 Trade-off를 이해하는 데 유용합니다.

이 답변들이 도움되기를 바라며, 추가적으로 궁금한 점이 있으시면 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

inspireworld님의 프로필 이미지
inspireworld

작성한 질문수

질문하기