gpt4 book ai didi

php - 需要一个高效的 mysql 数据库模式来存储积分/评级

转载 作者:行者123 更新时间:2023-11-29 09:54:13 26 4
gpt4 key购买 nike

我有四个主表-

1.user(user_id, name,...) 
2. post(post_id, description, ...)
3.comment(comment_id,user_id,comment,...)
4.reply(reply_id,user_id, reply,...)

5.user_post(user_id,post_id)
6.post_comment(post_id,comment_id)

现在用户可以给每个评论、回复和帖子打分 1 到 10(类似于评分),我还需要计算用户通过其内容(帖子、评论、回复)获得的总积分。目前我有两个选择。

选项 1:我可以有一个名为 points 的大表,并使用 type 列存储每个内容的点数,该列会牺牲引用完整性 例如-

points(content_id, type, point, given_by)

或者,

选项 2:拥有三个独立的表,不会牺牲引用完整性。例如-

post_point(post_id, point, given_by)
comment_point(comment_id, point, given_by)
reply_point(reply_id, point, given_by)

那么,这里最好的、面向 future 的选择是什么,或者有没有更好的解决方案?谢谢。

最佳答案

无论是选项1还是选项2,当用户访问帖子时,都需要将所有的子点进行汇总,成本很高。

假设选项2,你可以这样做:

SELECT SUM(point) FROM post_point where post_id=100

如果有数千名用户给该帖子点分,该声明可能需要几秒钟才能回复。

我建议在用户/帖子/评论/回复表中添加 1 个点列,

user(user_id, name,...) → user(user_id, name, point,...)

post(post_id, description, ...) → post(post_id, description, point, ...)

...

每次用户/帖子/评论/回复获得任何积分时,都会添加到相关积分中。

例如帖子 100 得到 1 分,您可以在帖子表中添加 1 分:

UPDATE post SET point=point+1 WHERE post_id=100;

如果您想跟踪或显示给定用户,还可以向 post_point 表添加 1 个积分。

INSERT INTO post_point VALUES('100','1','...');

最有效的地方是当有人查看此帖子时,您只需通过 1 个 SELECT 语句即可显示积分。

关于php - 需要一个高效的 mysql 数据库模式来存储积分/评级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54178933/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com