ruby-on-rails - 将计算的数据保存到数据库而不是计算的输入是不好的做法吗? ( rails )

标签 ruby-on-rails database

将计算的数据保存到数据库记录中而不是仅输入用于计算的做法是不好的做法吗?

示例:

如果我们将语言测试的结果保存为数据库记录,并且测试有 3 个部分需要保存在单独的列中:listening_scorespeaking_scorewriting_score

第四列名为 overall_score 是否可以,等于 ( listening_score + speaking_score + writing_score )/3?

或者每次 current_user 想要查看历史结果时,是否应该重新计算 overall_score

我的想法是,这会导致数据库中的数据出现不必要的重复。但这会使提取数据变得更简单。

这有通用规则吗?

最佳答案

这还不错,但也不好。这里没有最佳实践,因为每种情况下的答案都不同。保留计算的属性而不是根据需要计算它们需要权衡取舍。决定是在需要时计算还是坚持的重要因素是:

  1. 计算的复杂度
  2. 相关字段的更改频率
  3. 要用作搜索条件的计算字段
  4. 计算数据量
  5. 计算字段的使用(例如:操作/一次查看一条记录与大数据样式报告)
  6. 计算过程中对其他过程的影响
  7. 查看计算字段的频率。

关于这件事,众说纷纭。每种情况都不同。你必须确定持久化你的属性和维护它们的值的开销是否值得付出额外的努力,而不是仅仅根据需要计算它。

使用上述因素,我对持久化计算属性的偏好随着

的增加而增加
  • 计算复杂度上升
  • 依赖字段的更改频率下降
  • 用于搜索条件的计算字段上升
  • 计算字段用于复杂的报告
  • 查看计算字段的频率会上升。

我从第二个列表中省略的因素取决于外部因素,并且会发生更大的变化。

关于ruby-on-rails - 将计算的数据保存到数据库而不是计算的输入是不好的做法吗? ( rails ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36854556/

相关文章:

iOS “Add to Home Screen” - 文件下载将用户踢出

ruby-on-rails - 如何使用 ruby​​ on rails 查看 UTC 时间

ruby-on-rails - PG gem 不会安装在 Rails 应用程序中:Gem::Ext::BuildError: ERROR: Failed to build gem native extension

java - 当用户刷新浏览器时停止多个数据库访问

javascript - 带有 JavaScript 的 SQLite

python - 操作参数在sql/python中必须是str

database - 如何制作 CRON 作业以使用 phpmyadmin 的导出功能导出数据库

jquery - Rails 的 jquery 移动布局的一个很好的例子是什么?

ruby-on-rails - Rails Join 不显示相关表中的字段

php - 了解并跟踪 Apache 错误 : Wordpress database