这两种策略中哪一种更适合计算帖子的上票/下票:
以下是模型字段:
ups
downs
total
def save(self, *args, **kwargs): # Grab total value when needed
self.total = self.ups - self.downs
super.(yourmodel, self).save(*args, **kwargs)对比:
ups
downs
def total(ups, downs): # totals will just be computed when needed
return ups - downs # versus saved as a column真的有什么不同吗?速度?风格?
谢谢
发布于 2012-09-24 03:43:55
我会选择后者。通常,我不会在数据库中存储任何可以从其他数据派生的数据,除非计算很耗时。在这种情况下,这是一个微不足道的计算。原因是,如果您存储派生数据,则可能会出现一致性错误。
请注意,我将对类实例执行相同的操作。如果可以将total设置为属性,则无需存储它。变量越少,出错的空间就越小。
发布于 2012-09-24 03:56:10
我完全同意@Caludiu。我会选择第二种方法,但一如既往地有优缺点:
第一种方法看起来是无害的,但它可能会在将来给你带来一些麻烦。考虑一下你的应用程序的演变。如果您想从模型中的值派生出更多的微积分,该怎么办?如果你想保持一致,你必须把它们也保存在你的数据库中,然后你会保存很多“重复的”信息。从您的模型派生的表将不会被标准化,不仅可能不必要地增长,还会增加一致性错误的可能性。
另一方面,如果采用第二种方法,在数据库设计方面不会有任何问题,但可能会遇到许多困难的django查询,因为您需要做大量的微积分来检索所需的信息。这些类型的演算作为对象方法(或消息,如您所愿)非常简单,但是当您想要在django风格中执行这样的查询时,您将看到一些事情是如何变得复杂的。
同样,在我看来,您应该采用第二种方法。但你有责任做出你认为更适合你的需求的决定...
希望它能帮上忙!
https://stackoverflow.com/questions/12555646
复制相似问题