2016-10-23 4 views
1

나는 장고에서 응용 프로그램을 작성하고 있는데, 나는 하나의 계층을 상속받은 여러 하위 클래스에 모델을 만들고 싶습니다. 즉 :모델 하위 클래스를 결합하고 사용하지 않는 필드를 사용하거나 구체적인 하위 클래스를 만드는 것이 더 좋습니까?

차량 -> 자동차, 자전거, 버스들

내가 검색 할 수 및 저장 차량의 슈퍼 클래스와 같은 항목하지만, 서브 클래스로 내리 뜬 대부분의 경우 추가 필드를 사용할 수 있어야합니다

. Django에서는 데이터베이스에 많은 히트가 발생하여 하위 모델을 검색하거나 대규모 조인과 쿼리를 검색합니다.

구체적인 하위 클래스를 사용하고 성능에 문제가 있습니까? 아니면 하나의 차량 모델에 추가 필드를 추가 한 다음 여러 가지 개체에서 사용하지 않는 필드를 사용해야합니까?

나는 추가 필드는이 질문에 대한 4 개 서브 클래스 (최대 모델 당 9 개 사용되지 않는 필드)

답변

1

기본 대답의 총이다 작은 크기의 1-3 필드 즉, 숯불 문자열은 일반적으로, 그리고 있음을 유의 - SQL 데이터베이스 스키마에서 'JOIN'을 피할 수있는 곳이면 이어야합니다.

이유는 JOIN 명령의 복잡성이 가장 높고 가장 많은 시간이 걸리기 때문입니다. 그래서 일반적으로 권장 사항은 다음과 같습니다 : 관계가 OneToOne, 당신은 다음 같은 테이블에있는 모든 넣어이 관계가 OTM (OneToMany)가되지 않을 것을 알고

  1. 합니다.
  2. 관계가 OTO이지만 위험한 콘텐츠 (예 : 암호 해시 등)가 포함 된 경우 보안상의 이유로 동일한 테이블에 보관하지 않아야합니다.
  3. 관계가 OTM 또는 MTM 인 경우 실제로 분할하는 것 외에 다른 선택 사항이 없습니다.
+0

이것은 관계가 OTM이지만 작은 수 (다수)와 거대한 테이블이 될 것에 대한 조인을 피할 수있는 선택 사항입니다. – pypypy

+0

하나의 수퍼 클래스를 사용하고 postgres DB가있는 JSON 필드에 추가 필드를 덤프 할 것이라고 생각합니다. 아직 성능 저하없이 쿼리 할 수 ​​있으며 사용되지 않는 필드가있는 공간을 차지하지 않습니다. – pypypy

+0

그렇습니다. JSON 필드는 Postgres DB를 사용하는 경우 좋은 해결책입니다 - NoSQL의 장점과 결합 된 SQL의 장점 : – idik