将计算出的数据存储在每一行中是不好的做法,还是每次从数据库读取时在应用程序层进行计算更好。
存储在数据库中避免了多次计算的需要,但如果出现错误,则需要更新数据,而不仅仅是更改应用程序级别的计算。
我认为后者更好,但是有一般的经验法则吗?
例如,我需要计算食物的每日总营养摄入量。因此,各种portions
的energy
的foods
。我可以portion
根据相应计算能量food
并将energy
每个的能量存储portion
在portions
表中,或者我可以food
每次从与相应的连接中计算。
您可以想象,如果您必须在很长一段时间内计算年平均值、月平均值、日平均值等,它可能会变得非常笨拙。
如果使用物化视图,每次旧数据(例如一周或更早)根据触发器或类似内容进行更新时都会重新计算,那又如何呢?
总的来说,我知道即使有加入成本,规范化通常也是有益的。然而,我最近想到了一个有趣的困境。
如果数据重复但不太可能改变怎么办。这是可能的,但我不会预料到。
我有一个nutrients
表,一unit
列和单位将g
,kg
,ug
,等。
我看不到这些值每次都在变化。
我很想将它们作为表中的一列,而不是规范化并拥有一个units
表并使用外键并且在从nutrients
表中获取一行时必须加入。同时,我知道总的来说,即使有加入币,我们也应该正常化。
我应该怎么做(以及为什么)?