2014-03-27 2 views
0

장고는 각 모델을 테이블에 매핑하기 때문에. 내 코드에 패키지를 만들 수 없습니다. 클래스의 섹션을 래핑하여보다 논리적으로 만들고 커플 링을 늘릴 수 있습니다. 예를장고 모델에서 클래스를 만드는 방법

class Employee(models.Model): 

    #personal information 
    first_name = models.CharField(max_length=20) 
    middle_initial = models.CharField(max_length=1) 
    last_name = models.CharField(max_length=20) 
    dob = models.DateField() 

    #job contract information 
    full_time = models.BooleanField() 
    hours_per_day = models.PositiveSmallIntegerField() 
    #.. and more 

를 들어

는 내가 뭘하려고 그러나 이것이 내가 새로운 모델을 만들고 OneToOneField를 사용하여 직원 모델과 연결해야 함을 의미이

employee.job.is_full_time 
employee.job.get_hours_per_day 
# and more 

입니다. 나는 그것을하고 싶지 않다. 데이터베이스의 조인은 비싸다. 이런 식으로 뭔가를 만들 수 있습니까?

class Employee(models.Model): 

    class PersonalInformation: 
     first_name = models.CharField(max_length=20) 
     middle_initial = models.CharField(max_length=1) 
     last_name = models.CharField(max_length=20) 
     dob = models.DateField() 

    class Job: 
     full_time = models.BooleanField() 
     hours_per_day = models.PositiveSmallIntegerField() 
     #.. and more 

대답의 주요 핵심은 데이터베이스에 테이블에 매핑 될 예정 여러 클래스를 포함하는 모델을 만드는 것입니다.

+0

음,이 모델 접근법은 mongodb/nosql을위한 것이 아니므로 실제로 이런 모델을 중첩 할 수는 없습니다. 만약 당신이 가입하고 싶지 않다면 하나의 테이블을 가져야하며 모든 것이 같은 레벨이어야합니다. –

+0

@AntoinePelisse 적어도 하나의 테이블에 여러 클래스를 매핑하는 방법이어야합니다. 이것은 모든 시스템 분석 및 설계의 기본 사항 중 하나입니다. – Othman

답변

2

장고와 함께 할 방법이 없습니다. Django 모델은 평면 관계형 데이터베이스를 나타냅니다. 백엔드가 수행 할 수없는 기능을 제공하도록 모델 프레임 워크를 확장하는 것은 불필요하므로 기본 프레임 워크에서는 구현되지 않습니다.

원하는 것을 제공하는 타사 패키지가 있지만 이러한 패키지가 이러한 데이터 구조를 사용할 수있는 데이터베이스 백엔드를 사용한다는 것을 알고있는 한 알 수 있습니다.

개인적으로 첫 번째 예는 모든 Employee 데이터를 나타내는 단일 평면 모델입니다. 필드 이름의 모호성을 방지하고 중첩 모델을 사용하여 플랫 모델을 사용하는 데 드는 비용은 없습니다.

조기 최적화는 조인 문보다 훨씬 비쌉니다.

+0

+1을 사용합니다. 아마도 나중에 비정상적인 부분을 제거 할 수 있다면 정규화를 시작해야합니다 (누군가 두 가지 작업을하는 경우 등) –

관련 문제