mysql - 保持多个表的评级
问题描述
让数据库设计具有两个以上代表主要实体的表,例如书籍、出版商、作者,我想找出对给定实体进行用户评级的最佳方法。
是否最好创建一个与上述表无关但仅用于用户表的表(向用户显示给定表记录的评分)并用 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:
保留 Book、Author、Publisher 实体的可用操作列表,如下所示。
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
推荐阅读
- google-play-games - 如何在关于此游戏的更多信息中添加“使用 google play 游戏”?
- python - 如何使用 boto3 连接到 Amazon Keyspaces?
- typescript - 打字稿:有没有办法在不转换为类类型的情况下显示属性和方法?
- python - 动态 div 样式阻止 BeatifulSoup 使代码持久化
- css - 将 Illustrator 文件的每一层导出为 SVG,保持相对位置和大小
- javascript - 单击反应js中搜索字段中的搜索图标后,选项未填充到下拉列表中
- python - 如何旋转和扩展数据框列
- laravel-livewire - 安装后未显示特定行的 Livewire 模型值
- api - Vue js循环
- bash - 如何将 Shell 变量值访问到 Groovy 管道脚本中