gpt4 book ai didi

mysql - 保持多个表的评级

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

数据库设计具有两个以上代表主要实体的表,例如书籍、出版商、作者我想找出对给定实体进行用户评级的最佳方法。

是否最好创建一个与上述表无关但仅用于用户表(以向用户显示给定表记录的评分)并用varchar指示相关表的类型的表?

或者为每个表保留单独的评级表是否更好。

我的想法如下,但我不确定这是否是存储此类数据的最佳方式。

***rating table***
ObjectType
ObjectId
UserId
RatingScore

最佳答案

根据您的描述维护评级表可能会减慢您的数据库速度。例如,假设有 100 万用户要对一本书进行评分。

因此,单个图书实体在您的评级表中将有 100 万条记录。在进行平均评分时,您必须读取这 100 万条记录,这需要更多的内存和时间。相反,请使用下表来确保计算的时间和内存消耗更少。

Ratting_Table
Id:
ObjectName: (Book,Author,Publisher)
ObjectId:(Id of Book,Author,Publisher entity)
1Ratting_Count:
2Ratting_Count:
3Ratting_Count:
4Ratting_Count:
5Ratting_Count:

保留对图书、作者、出版商实体的可用操作列表,如下所示。

Activity_Table 
Id:
Action: View, Rated, Ordered,etc.,

对于每个用户,记录他们的事件如下。

UserActivity_Table
Id
UserId
ActivityId: Id from activity table.
ActivityJSON:

对于 ActivityJSON,请为每个事件保留以下三个结构,并将它们作为 JSON 保存在审核表中

查看

{
ObjectName: Book,Author,Publisher
ObjectId: (Id of Book,Author,Publisher entity)
ViewTime:
}

评分

{
ObjectName
ObjectId
Score
}

对于订购

{
ObjectName
ObjectId
NumberOfOrders
}

实现此表系统后,在服务器端 API 中更新 Ratting_Table 中每个评级的用户计数。如果用户要更新已评级实体的评级(如果启用此功能),请进行审核并搜索同一实体的现有评级分数。然后将他的新评分审核为 UserActivity_Table 记录中的新条目,并更新相应的实体行 Ratting_Table

关于mysql - 保持多个表的评级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57623132/

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