Java 派生值是否应该持久化?

Java 派生值是否应该持久化?,java,Java,我有点困惑我们是否应该将派生值存储在DB中?例如:-如果要对员工工资进行计算并在UI上显示 有两种方法:- 方法1:-每次需要在UI上显示时,我都会计算派生值 方法2:-在保留薪资本身时,将派生值保留在单独的列中 方法2从性能角度看是好的,但从可维护性角度看是坏的。从可维护性的角度来看,这很糟糕,因为我必须维护额外的列。 类似地,从可维护性的角度来看,方法1是好的,但从性能的角度来看,方法1是坏的,而且每次我需要导出值时,都需要额外的工作 哪种方法更好?根据我方理解,如果计算复杂且在多个地方使用

我有点困惑我们是否应该将派生值存储在DB中?例如:-如果要对员工工资进行计算并在UI上显示

有两种方法:-

方法1:-每次需要在UI上显示时,我都会计算派生值

方法2:-在保留薪资本身时,将派生值保留在单独的列中

方法2从性能角度看是好的,但从可维护性角度看是坏的。从可维护性的角度来看,这很糟糕,因为我必须维护额外的列。 类似地,从可维护性的角度来看,方法1是好的,但从性能的角度来看,方法1是坏的,而且每次我需要导出值时,都需要额外的工作


哪种方法更好?根据我方理解,如果计算复杂且在多个地方使用,我们应接近2,否则为1。是吗?

通常不应存储派生值,除非:

  • 计算复杂/昂贵(例如,需要许多其他记录的值)

  • 您需要一个关于该值的索引,以便快速查找

  • 存储派生数据称为非规范化。为了进一步研究,您应该阅读关于为什么要使用数据的文章


    另请参见此问题:

    将其存储在var中如何?在计算派生值时,您真正希望消耗多少性能?现在是2017年,计算机又快又快。(i)很难猜测性能=>measure(正确),您可能会惊讶(ii)您可以在数据库中创建一个视图而不创建新列。(iii)如果公式因任何原因发生变化,您是否更愿意更改您的数据库模式或更改您的应用程序代码?除非您正在计算生命、宇宙和其他一切的意义,否则您应该先使用第一种方法尝试最简单的方法。然后,如果有必要,对其进行优化。不要试图猜测性能问题:你会发疯的!谢谢你,安德烈亚斯。但是方法2有什么问题?如果您能提供方法2的信息,我将不胜感激。@Emily我已经这样做了,在您上次询问方法2时更新了答案,添加了讨论数据库非规范化利弊的文章链接。