這是一個比特定的Django更多的數據庫設計問題。Django DB Design - 維護常見和歷史數據
我們有一個小型的Django應用程序來管理年度會議。
會議每年都有一些常見的模式。例如,研討會通常每年重複一次,我們也經常使用相同的房間(研討會或住宿房間)。
對於這些模型,其中一些領域每年都很常見,而其他領域則有所不同。
例如,每個AccomodationRoom
都有一個名稱,建築物和功能,這在每年都會很常見。然而,其他的事情,如實際的牀位可用性將每年不同。
需要每年保留歷史數據,但我們也希望儘可能減少冗餘重複,並且每年不必重新輸入一次(例如,房間名稱,其網站及其名稱功能。同樣適用於研討會)
我最初的做法是創建一個AccomodationRoom,用於存儲常用數據,然後有例如BedAvailability存儲瞬時年度信息,並提供每年的鏈接會議。例如:
class AccommodationRoom(models.Model):
name = models.CharField(max_length=50)
site = models.ForeignKey(Site)
features = models.ManyToManyField(AccommodationFeature, null=True, blank=True)
class BedAvailability(models.Model):
number_of_single_beds = models.IntegerField()
number_of_double_beds = models.IntegerField()
conference = models.ForeignKey(Conference)
accommodation_room = models.ForeignKey(AccommodationRoom)
class Conference(models.Model):
year = models.CharField(max_length=4) # Example
然而,另一種方法是簡單地廢除了兩款車型,並有一個AccomodationRoom模型,它包含了一切,直接鏈接此向大會型號,然後執行有關AccomodationRoom獨特性.name和AccomodationRoom.Conference。
class AccommodationRoom(models.Model):
name = models.CharField(max_length=50)
site = models.ForeignKey(Site)
features = models.ManyToManyField(AccommodationFeature, null=True, blank=True)
conference = models.ForeignKey(Conference)
number_of_single_beds = models.IntegerField()
number_of_double_beds = models.IntegerField()
class Meta:
ordering = ['conference', 'name']
unique_together = (("name", "conference"),)
或者有沒有更好的方法可以做到這一點,我沒有想到?打開這裏的建議。
乾杯, 維克多
這是一個古老的問題,但我有類似的情況,並會很高興聽到更多的意見(寫作時沒有答案)。 – 2013-02-16 23:17:27
您是否打算使用Django管理應用程序來管理這些模型? – sul4bh 2013-02-19 14:05:11