首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哪种策略最好:将值保存为字段还是仅使用方法计算

哪种策略最好:将值保存为字段还是仅使用方法计算
EN

Stack Overflow用户
提问于 2012-09-24 03:40:27
回答 2查看 71关注 0票数 2

这两种策略中哪一种更适合计算帖子的上票/下票:

以下是模型字段:

代码语言:javascript
复制
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)

对比:

代码语言:javascript
复制
ups
downs

def total(ups, downs): # totals will just be computed when needed
    return ups - downs # versus saved as a column

真的有什么不同吗?速度?风格?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-24 03:43:55

我会选择后者。通常,我不会在数据库中存储任何可以从其他数据派生的数据,除非计算很耗时。在这种情况下,这是一个微不足道的计算。原因是,如果您存储派生数据,则可能会出现一致性错误。

请注意,我将对类实例执行相同的操作。如果可以将total设置为属性,则无需存储它。变量越少,出错的空间就越小。

票数 4
EN

Stack Overflow用户

发布于 2012-09-24 03:56:10

我完全同意@Caludiu。我会选择第二种方法,但一如既往地有优缺点:

第一种方法看起来是无害的,但它可能会在将来给你带来一些麻烦。考虑一下你的应用程序的演变。如果您想从模型中的值派生出更多的微积分,该怎么办?如果你想保持一致,你必须把它们也保存在你的数据库中,然后你会保存很多“重复的”信息。从您的模型派生的表将不会被标准化,不仅可能不必要地增长,还会增加一致性错误的可能性。

另一方面,如果采用第二种方法,在数据库设计方面不会有任何问题,但可能会遇到许多困难的django查询,因为您需要做大量的微积分来检索所需的信息。这些类型的演算作为对象方法(或消息,如您所愿)非常简单,但是当您想要在django风格中执行这样的查询时,您将看到一些事情是如何变得复杂的。

同样,在我看来,您应该采用第二种方法。但你有责任做出你认为更适合你的需求的决定...

希望它能帮上忙!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12555646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档