【问题标题】:"Photo rating" database design“照片评分”数据库设计
【发布时间】:2015-08-21 11:52:17
【问题描述】:

我正在创建一个数据库来保存用户的照片,并将返回每天最喜欢的照片 示例:我创建了一张照片 A,第一天,我得到了 100 个赞,第二天,我得到了 200 个赞,我总共有 300 个赞,所以我必须存储每天的赞值。 我在想这样的结构:

Table Photo[photo_id, user_id, photo_url]

Table Day_Rating[id, photo_id, like_count, date]
//Photo A can have many records in this table

Table Month_Rating[id, photo_id, like_count, month] //month is: 1,2,3,4..12
//Photo A can have many records in this table

所以当用户喜欢一张照片时,我们将在 Day_Rating 和 Month_Rating 表的 like_count 字段上增加 1。 因此,为了获得每日评分,我们将在 Day_Rating 表中使用 like_count 获得最多的喜欢,与每月评分相同。 您如何看待这种方法?如果有更好的方法,你能给我指出一个最佳实践吗? 谢谢

【问题讨论】:

  • 为什么不直接使用 Day_Rating 表并通过限制日期的选择来确定月度评级?您的 Month_Rating 表绝对是多余的。

标签: database database-design


【解决方案1】:

只需两张表即可满足您的所有需求:

photo
* id
* posted_by_user_id
* url

rating
* id
* photo_id
* rated_by_user_id
* rated_at
* rate

然后让数据库引擎进行聚合。此外,单独存储每个评分将允许您执行“每个用户只能评分”之类的规则,并允许用户撤销他们的投票。

【讨论】:

  • 同意,但我不会完全排除使用聚合表。如果需要,我会考虑稍后将它们重新添加到此之上,因为从历史上看,数据是不可更改的(除非我认为照片被删除)。
  • 也许索引/物化视图就足够了。除非您以接近 Facebook 的规模运营,否则大多数现代 RDBMS 都可以很好地处理聚合。
  • 是的,更重要的是能够高效地回答“给我看这个月每天点赞数超过n的照片”,可以用正确的聚合索引,或者“给我看”每周点赞数前 10 名的照片”。
猜你喜欢
  • 2011-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-25
  • 1970-01-01
  • 2010-11-05
  • 1970-01-01
相关资源
最近更新 更多