将计算的数据保存到数据库记录中而不是仅输入用于计算的做法是不好的做法吗?
示例:
如果我们将语言测试的结果保存为数据库记录,并且测试有 3 个部分需要保存在单独的列中:listening_score
、speaking_score
, writing_score
第四列名为 overall_score
是否可以,等于
( listening_score + speaking_score + writing_score )/3
?
或者每次 current_user
想要查看历史结果时,是否应该重新计算 overall_score
。
我的想法是,这会导致数据库中的数据出现不必要的重复。但这会使提取数据变得更简单。
这有通用规则吗?
最佳答案
这还不错,但也不好。这里没有最佳实践,因为每种情况下的答案都不同。保留计算的属性而不是根据需要计算它们需要权衡取舍。决定是在需要时计算还是坚持的重要因素是:
- 计算的复杂度
- 相关字段的更改频率
- 要用作搜索条件的计算字段
- 计算数据量
- 计算字段的使用(例如:操作/一次查看一条记录与大数据样式报告)
- 计算过程中对其他过程的影响
- 查看计算字段的频率。
关于这件事,众说纷纭。每种情况都不同。你必须确定持久化你的属性和维护它们的值的开销是否值得付出额外的努力,而不是仅仅根据需要计算它。
使用上述因素,我对持久化计算属性的偏好随着
的增加而增加- 计算复杂度上升
- 依赖字段的更改频率下降
- 用于搜索条件的计算字段上升
- 计算字段用于复杂的报告
- 查看计算字段的频率会上升。
我从第二个列表中省略的因素取决于外部因素,并且会发生更大的变化。
关于ruby-on-rails - 将计算的数据保存到数据库而不是计算的输入是不好的做法吗? ( rails ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36854556/