2017-10-02 18 views
0

I와 다음 데이터 구조를 가지고다중 동일한 상위 테이블 외래 키 있지만 고유 식별자

  • Statestate_idname 가진다. (실시 예 : California)
  • Town
  • town_id, area_id, state_idname을 갖는다 (일부 마을 샌프란시스코 포함 Area of San Francisco 예)
  • Areastate_id는, area_idname있다. (실시 예 : Town of San Francisco)
  • Streetstreet_id는, town_id, area_id, state_idname있다.

다음 참고

  • state_id가 (자동 증가 INT와 같은) 실제 ID 아니지만, 각각의 상태에 대한 고정 된 수.
  • area_id은 자동 증분 int가 아니라 고정 숫자입니다. 이것은 두 개의 서로 다른 주 (여러 영역을 가질만큼 충분히 큼)가 동일한 ID를 가진 주를 가질 것임을 의미합니다. (샌프란시스코의 상태는 (area_id = 1를 샌프란시스코있을 것이다)과 국가 뉴욕 NY있을 것이다 (area_id = 1을).
  • town_id ... 당신이 그것을 짐작, state_idarea_id와 동일합니다.

하지 마십시오 왜 데이터가 그런 식으로 구성되어 있는지 주장하고,이 질문의 범위를 넘어서서 내가 리팩터링 할 수있는 것 이상으로 넘어 간다. 그래서 내가 그것을 바꾸라고 제안하는 데 시간을 낭비하지 말라. 나는 이미 그것이 잘못되었다는 것을 알고 있지만, 완전히 멈출 수 없음. 전체 중지

즉, 도시에는 area_id과이 둘 다 있어야합니다.그것은 식별 할 수 있습니다. 거리에는 town_id, area_idstate_id이 있어야합니다.

Django 모델과의 관계를 표현하려면 어떻게해야합니까? area.towns을 수행하고 해당 지역의 마을을 모두 가져 오거나 state.streets, 그 상태로 모든 거리를 얻을 수 있습니까?

질문이 명확하지 않으면 필요한 정보를 기꺼이 업데이트하여 기꺼이 알려주십시오.

+0

ManyToManyField를 살펴 보셨습니까? https://docs.djangoproject.com/ko/1.11/topics/db/examples/many_to_many/ –

+0

이 질문은 약간 이해하기 쉽습니다. 내가 맞으면, 아마도 unique_togather가 당신을 도울 수 있습니다 : https://docs.djangoproject.com/en/1.11/ref/models/options/#unique-together –

답변

1

데이터 모델의 다른 측면을 언급하고 싶지만, 설명 할 때 제약 조건을 이해한다고 생각합니다. 나는 state_id 또는 duplicitive id를 정의 할 때 약간의 차이가있을 수 있습니다. 나는 그것들을 얻지는 못하지만 사용자 정의 저장 기능을 통해 이러한 정의를 달성 할 수 있다고 가정합니다.

class State(models.Model): 
    #implicit autoincrement id 
    name = models.CharField(max_length=200) 
    state_id = models.IntegerField() 

    def listAreasByState(self): 
     return Area.objects.filter(state=self) 

    def listAreasByStateID(self): 
     return Area.objects.filter(state_id=self.state_id) 


class Area(models.Model): 
    #implicit autoincrement id 
    name = models.CharField(max_length=200) 
    state = models.ForeignKey(State, blank=True, null=Tru) 
    state_id = models.IntegerField() 
    area_id = models.IntegerField() 

.... 

질문의 요지가 있습니다. state_id, area_id vice Area의 자동 증가 ID를 정의하는 위치 또는 방법에 대해 명확하지 않습니다. 그러나 모든 부모에 대해 모든 하위 항목을 반환하는 사용자 지정 함수를 작성하는 것이 좋습니다.

+0

오, 알았어요. 그래서 당신의 제안은 멤버 대신에 함수를 사용하는 것입니다. 그럴거야, 네. 나는 너무 일원에 그것을하는 것을 시도에 집중했다. 좋아, 그 일을 확인해 볼까. Btw, state ids, area ids 및 townids는 수동으로 선택/하드 코드됩니다. 왜 그런지 모르지만 다른 응용 프로그램과의 호환성과 관련이 있다고 생각합니다. – alexandernst