2012-05-15 5 views
1

내가 특성을하고 어떻게 내 모델을 구성해야 판매 및/또는 임대 (관련 가격으로 각)이 될 수 있다고?장고 모델 - 정상화

A :

class Property(models.Model): 
    name = models.CharField() 
    sale_price = models.DecimalField(max_digits=14, decimal_places=2) 
    rent_price = models.DecimalField(max_digits=14, decimal_places=2) 

B :

class Property(models.Model): 
    name = models.CharField() 

CATEGORY_CHOICES = (
    (u'sale', u'Sale'), 
    (u'rent', u'Rent'), 
) 

class Category(models.Model): 
    property = models.ForeignKey('Property') 
    name = models.CharField(max_length=25, choices=CATEGORY_CHOICES) 
    price = models.DecimalField(max_digits=14, decimal_places=2) 

C : 나는 C 나에게 더 flexibilit을 줄 것이라고 생각

class Property(models.Model): 
    name = models.CharField() 

class Sale(models.Model): 
    property = models.ForeignKey('Property') 
    price = models.DecimalField(max_digits=14, decimal_places=2) 

class Rent(models.Model): 
    property = models.ForeignKey('Property') 
    price = models.DecimalField(max_digits=14, decimal_places=2) 

판매/임대 특정 필드를 추가하려면 어떻게합니까? 구조 B는 쿼리하는 것이 더 좋을지 모르지만 확실하지 않습니다.

C와 함께 가정하면 예를 들어 판매중인 부동산을 어떻게 쿼리 할 수 ​​있습니까? Lookups that span relationships

이 스키마, 당신은 몇 가지가있을 수 있음을 기억하십시오 : 당신이 C로 갈 경우

답변

3

실제로 사용하면 A가 가장 좋습니다. 그것의 짧은 것, B와 같은 것이 괜찮을 것입니다. C는 전혀 좋지 않습니다.

SaleRent은 개체가 아니며 개체의 특성입니다. 그들을 모델로 삼는 것은 무시 무시한 디자인입니다.

+0

내가 어디에서 왔는지 확인합니다. A와 함께 어떤 단점이 있습니까? 이것이 정상화에 반대하지 않겠는가? – RS7

+0

sale_price를 사용하여 예를 들어 판매중인 제품이 있는지 확인해야합니까? 나는 그것이 받아 들일 만하다라고 생각할 것이다. 그러나 만일 1 이상의 판매 관련 들판이 존재하면 그것은 아직도 경우 이냐? – RS7

+0

아니요, 정규화에 반대하지 않습니다. 정규화의 개념은 송장의 고객 연락처 정보와 같이 다시 사용될 가능성이있는 데이터를 분리하는 것입니다. 그러나 물건의 판매/임대 가격은 결코 그 물건 이외에는 사용되지 않습니다. 따라서 그것은 객체와 관련이 있습니다. –

0

,이

properties = Property.objects.filter(sale__isnull=False) 

이 장고 워드 프로세서로 작동합니다 같이 판매 등록 정보를 조회 할 수 있습니다 임대료 또는 판매 가격은 오직 하나의 부동산에 대한 것입니다.