最佳实践:我应该在数据库中存储哪些信息?

萨拉索特拉

目前,我正在开发一个小型图书评价应用,用户可以在其中对图书进行评价和评论。

我当然有一个书本模型:

class Book < ActiveRecord::Base
  has_many :ratings
end

和评级模型:

class Rating < ActiveRecord::Base
  belongs_to :book
end

评级对象的“总体评级值”是通过不同的评级类别(例如,可读性,...)来计算的。此外,一本书的整体评分应由所有给定的评分计算得出。

现在我要问自己一个问题:我是否应该每次有人访问我的页面时都计算/查询每本书的总体评分,还是应该在我的图书模型中添加(定期)计算和保存总体评分的字段?

编辑:在这种情况下,我将使用的“计算”是一个简单的平均确定值。

示例:一本书的评分约为200。每个评分由10个类别评分组成。因此,我想确定一个评分的平均值,然后确定所有200个评分的平均值。

尼尔·阿特金森

如果这些评级的平均值在计算上并不昂贵(即,不需要很长时间),则可以即时进行计算。这与不过早优化的想法保持一致(请参阅http://c2.com/cgi/wiki?PrematureOptimization)。

但是,如果您确实想优化此计算,则可以将其存储在书本模型上,并根据评级写入更新计算。这就是所谓的“缓存”结果。这是一些将平均评分缓存在数据库中的代码。(还有其他缓存方式)。

class Book < ActiveRecord::Base
  has_many :ratings, after_add :update_average_rating

  def update_average_rating
    update_attribute(:average_rating, average_rating)
  end

  def average_rating
    rating_sum / ratings.count
  end

  def rating_sum
    ratings.reduce(0) {|sum, rating|
      sum + rating.value # assuming rating model has a value attribute
    }
  end
end

class Rating < ActiveRecord::Base
  belongs_to :book
end

注意:上面的代码假定average_rating数据库中书表上存在一列。记住要在迁移中添加此列。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我应该在数据库中存储桌面应用程序的本地化数据吗?

来自分类Dev

我应该在我的数据库中存储其他实体的用户特定信息吗?

来自分类Dev

我应该在数据库中输入什么日期

来自分类Dev

我应该在数据库中输入什么日期

来自分类Dev

在数据库中存储语言的最佳实践

来自分类Dev

我应该在本地数据库中存储从贝宝交易中获得的哪种数据?

来自分类Dev

我应该在本地数据库中存储从贝宝交易中获得的哪种数据?

来自分类Dev

如何从数据库中搜索用户输入的名称。示例[email protected]。它应该在数据库中搜索[email protected]并给我abc的详细信息

来自分类Dev

在数据库中存储嵌套信息的最佳方法

来自分类Dev

我应该在数据库端还是在客户端捕获异常?

来自分类Dev

我应该在网站上使用 JavaScript 数组来存储数据库中的项目数据吗?

来自分类Dev

我应该在git中存储用于自动化测试的数据库备份吗?

来自分类Dev

在Flask-SQLAlchemy中,我应该在哪里初始化和存储数据库对象?

来自分类Dev

Phonegap数据库加密:我应该在哪里存储密码?

来自分类Dev

我应该在Electron中使用本地存储进行数据库配置吗?

来自分类Dev

我们的应用程序应该将图像属性存储在数据库中吗?还是应用程序应该在运行时生成它们?

来自分类Dev

我应该在哪里放置具有数据库属性的文件,以及应该在其上写入哪些属性?

来自分类Dev

2 个存储过程结果集的合并应该在数据库端还是在 API 端完成?

来自分类Dev

我想在数据库列中添加一个检查,以便输入数据的人应该在大写并修剪

来自分类Dev

Rails-我应该在模型级别还是在数据库级别定义默认属性值?

来自分类Dev

Rails-我应该在模型级别还是在数据库级别定义默认属性值?

来自分类Dev

我应该在iOS应用程序的git存储库中忽略哪些文件/文件夹?

来自分类Dev

我应该在iOS应用程序的git存储库中忽略哪些文件/文件夹?

来自分类Dev

在数据库中存储神经网络的最佳实践

来自分类Dev

我应该将Type存储在数据库中还是应该将其存储在枚举中?

来自分类Dev

我应该在MongoDB中使用不同的数据库还是仅使用不同的集合来存储用户信息和数据库的其余部分?

来自分类Dev

我们应该在Java Eclipse动态Web项目中的哪里存储数据库配置文件?

来自分类Dev

在数据库中设置选定行的最佳实践

来自分类Dev

我应该在哪个数据条事件中更新数据库以授予订阅者访问权限

Related 相关文章

  1. 1

    我应该在数据库中存储桌面应用程序的本地化数据吗?

  2. 2

    我应该在我的数据库中存储其他实体的用户特定信息吗?

  3. 3

    我应该在数据库中输入什么日期

  4. 4

    我应该在数据库中输入什么日期

  5. 5

    在数据库中存储语言的最佳实践

  6. 6

    我应该在本地数据库中存储从贝宝交易中获得的哪种数据?

  7. 7

    我应该在本地数据库中存储从贝宝交易中获得的哪种数据?

  8. 8

    如何从数据库中搜索用户输入的名称。示例[email protected]。它应该在数据库中搜索[email protected]并给我abc的详细信息

  9. 9

    在数据库中存储嵌套信息的最佳方法

  10. 10

    我应该在数据库端还是在客户端捕获异常?

  11. 11

    我应该在网站上使用 JavaScript 数组来存储数据库中的项目数据吗?

  12. 12

    我应该在git中存储用于自动化测试的数据库备份吗?

  13. 13

    在Flask-SQLAlchemy中,我应该在哪里初始化和存储数据库对象?

  14. 14

    Phonegap数据库加密:我应该在哪里存储密码?

  15. 15

    我应该在Electron中使用本地存储进行数据库配置吗?

  16. 16

    我们的应用程序应该将图像属性存储在数据库中吗?还是应用程序应该在运行时生成它们?

  17. 17

    我应该在哪里放置具有数据库属性的文件,以及应该在其上写入哪些属性?

  18. 18

    2 个存储过程结果集的合并应该在数据库端还是在 API 端完成?

  19. 19

    我想在数据库列中添加一个检查,以便输入数据的人应该在大写并修剪

  20. 20

    Rails-我应该在模型级别还是在数据库级别定义默认属性值?

  21. 21

    Rails-我应该在模型级别还是在数据库级别定义默认属性值?

  22. 22

    我应该在iOS应用程序的git存储库中忽略哪些文件/文件夹?

  23. 23

    我应该在iOS应用程序的git存储库中忽略哪些文件/文件夹?

  24. 24

    在数据库中存储神经网络的最佳实践

  25. 25

    我应该将Type存储在数据库中还是应该将其存储在枚举中?

  26. 26

    我应该在MongoDB中使用不同的数据库还是仅使用不同的集合来存储用户信息和数据库的其余部分?

  27. 27

    我们应该在Java Eclipse动态Web项目中的哪里存储数据库配置文件?

  28. 28

    在数据库中设置选定行的最佳实践

  29. 29

    我应该在哪个数据条事件中更新数据库以授予订阅者访问权限

热门标签

归档