首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储“派生”值与在提取时计算它们

存储“派生”值与在提取时计算它们
EN

Stack Overflow用户
提问于 2010-04-21 15:22:54
回答 2查看 2.8K关注 0票数 7

当您的值仅依赖于一个或多个其他字段+/-常量(例如零售价格和折扣价格)时,在检索数据时,是也存储这些值还是“即时”计算它们更好?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-21 15:44:45

我同意Tomislav的观点-尽量避免冗余,因为你最终可能会得到多个表上的数据彼此不一致。这使得更新更加痛苦。

不过,也有一些与数据库性能无关的例外情况值得考虑。

  • 当计算值很痛苦时(例如,一些复杂的数学函数),那么存储起来就很有意义(您可以将该列想象为“最后计算的值”)。
  • 您的输入可能会随着时间的推移而发生变化,例如,费用源自费用费率,但是费率作为单个值存储在配置表中。您可能希望记录费用,因为历史费用仅从当前费用费率计算。或者,您也可以按时间存储速率,以避免此问题。
  • 如果派生的值可以被用户输入或其他过程覆盖,则再次存储是有意义的。或者,您可以使用两个状态“计算”和“覆盖”对此进行建模,以便只在后一个状态中存储一个值。
票数 6
EN

Stack Overflow用户

发布于 2010-04-21 15:26:44

默认情况下不存储冗余信息:third normal form通常是一个合理的初始目标。冗余是在出现“足够好”的原因时引入的,例如,当您必须计算派生值并且计算密集时,您会受到“足够大”的性能影响。

显然,“足够好”和“足够大”是限定词,它们只在给定的上下文中表示某些东西。就其价值而言,零售/折扣价格计算似乎太便宜和简单,无法保证在大多数(显然不是所有)情况下引入多余的列。

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

https://stackoverflow.com/questions/2680999

复制
相关文章

相似问题

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