Django DB Design – 维护常用和历史数据

Django DB Design – 维护常用和历史数据,第1张

概述这是一个数据库设计问题,而不是特定的Django问题. 我们有一个小型Django应用程序来管理年度会议. 每年的会议都有一些共同的模型.例如,研讨会经常每年重复,我们经常使用相同的房间(研讨会或住宿室). 对于这些模型,他们的一些领域每年都很常见,而其他领域则会有所不同. 例如,每个AccomodationRoom都有一个名称,一个建筑物和每年都很常见的功能.但是,实际的床位供应等其他因素每年都 这是一个数据库设计问题,而不是特定的Django问题.

我们有一个小型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模型,将其直接链接到Conference模型,然后在AccomodationRoom.name和AccomodationRoom.Conference上强制执行唯一性.

class AccommodationRoom(models.Model):    name = models.CharFIEld(max_length=50)    site = models.ForeignKey(Site)    features = models.ManyToManyFIEld(AccommodationFeature,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"),)

或者也许有一种更好的方法可以做到这一点,我没想过?在这里打开建议.

干杯,
胜利者

解决方法 对您的第一个解决方案的一个小修改(我认为它是更好的解决方案,因为它比第二个解决方案更规范化)

class AccommodationRoom(models.Model):    name = models.CharFIEld(max_length=50)    site = models.ForeignKey(Site)    features = models.ManyToManyFIEld(AccommodationFeature,blank=True)    bed_availability = models.ForeignKey(bedAvailability)class bedAvailability(models.Model):    number_of_single_beds = models.IntegerFIEld()    number_of_double_beds = models.IntegerFIEld()class Conference(models.Model):    year = models.CharFIEld(max_length=4) # Example    accommodation = models.ForeignKey(AccommodationRoom)

使用Django管理员后端,您可以首先使用床的规格创建bedAvailability对象.然后,您可以创建AccomodationRoom对象并将bedAvailability对象与其关联.然后,您最终可以创建一个Conference对象,并将AccommodationRoom对象与此关联.

如果您需要在同一个AccommodationRoom中使用一组新的bedAvailability一年,您可以使用新规范创建一个新的bedAvailability对象并将其与AccommodationRoom链接.即使bedAvailability规范发生变化,您也无需为下次会议重新输入AccommodationRoom数据.

总结

以上是内存溢出为你收集整理的Django DB Design – 维护常用和历史数据全部内容,希望文章能够帮你解决Django DB Design – 维护常用和历史数据所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1196465.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存