2016-07-22 5 views
0

데이터베이스 (Django + PostgreSQL)에 Inventory 테이블을 디자인하려고하는데 다른 테이블과의 다형성 관계를 구현하는 데 가장 올바른 방법이 무엇인지 의심스러워졌습니다. 테이블.인벤토리 데이터베이스에서 다형성 연결 구현

기본적으로 각 항목에는 테이블의 외래 키 여야합니다. 또는 그것은 생산/제조되었을 수 있습니다 (즉, ProductionOrder). 마찬가지로 output도 있습니다. 예를 들어 SalesOrder (제품이 판매 된 경우) 또는 ProductionOrder (다른 것을 제조하는 데 사용되는 경우)을 참조 할 수 있습니다.

물론 하나의 외래 키 필드는 다른 테이블의 항목을 참조 할 수 없으므로이를 달성하는 가장 좋은 방법은 무엇입니까? 비슷한 질문에 대한 답변을 읽었지만 제안은 이와 같은 경우에는 적합하지 않은 것으로 보입니다. 중간 테이블을 만드는 것은 판매 및 생산 주문이 적어도 "수퍼 셋"에 속하지 않으므로 적절하지 않습니다.

현재로서는 입력 및 출력 모두 가능한 많은 필드 (예 : idProductionOrder, idSalesOrder)를 사용하고 두 필드가 동시에 데이터를 포함하지 않도록 -NAND- 제약 조건을 추가하는 것이 좋습니다. 나는 이것이 실제적인 해결책이 될 수 있지만, 아마도 아주 깔끔한 해결책은 아닐 것이라고 본다. 더 나은 접근 방법이 있습니까?

답변

0

당신이 찾고있는 것이 GenericForeignKey 필드라고 생각합니다. 이것은 다른 모델을 가리킬 수 있습니다. 여기에 귀하의 의견에 예를 기반으로 : 당신이 그 (것)들을 당신은 또한 장고 - 스마트 선택을 사용하는 것이 좋습니다 관리자에 잘 통합 할 경우

class YourModel(models.Model): 
    limit = (models.Q(app_label = 'YourApp', model = 'ProductionOrder') | 
      models.Q(app_label = 'YourApp', model = 'SalesOrder ') | 
      models.Q(app_label = 'YourApp',model = 'ProductionOrder ')) 

    content_type = models.ForeignKey(ContentType, limit_choices_to = limit) 
    object_id = models.PositiveIntegerField() 
    content_object = GenericForeignKey('content_type', 'object_id') 

docu

를 참조하십시오.