• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > 拥有5星评级数据库表结构 如何才能更高效的使用?

拥有5星评级数据库表结构 如何才能更高效的使用?

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了畅想之星光盘数据库,证券之星数据库,问卷星数据库,天云星数据库,sql数据库结构等相关知识,希望本文的分享对您有所帮助
产品数据库设计时,经常遇到5星评价的情况,数据表如何设计才能即保证查询效率,又能减少数据冗余呢?

初步设计思路如下,请大家指正。

一,最终效果,

二,表结构

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(8) NOT NULL auto_increment,
  `username` varchar(20) NOT NULL,
  PRIMARY KEY  (`id`)
) AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `votes` (
  `uid` int(8) unsigned NOT NULL,
  `bid` int(8) unsigned NOT NULL,
  `vote` int(1) NOT NULL,
  PRIMARY KEY (`bid`, `uid`)
) ;
</div>
三,设计思路

数据表分为两个部分,

1,第一个部分,表votes。其中uid和bid设为了主键,这样防止一个用户多次投票的情况;

查询时,可以使用,

评价总数: SELECT count(uid) FROM votes WHERE bid = $bid;
</div>
如果有时间排序的需求,可以再增加一个时间戳字段。

2,第二部分,冗余部分

vote_1到vote_5,仅记录每一个级别评分的数量,有评分了则+1;

avgrate记录平均分;
AmountOfVotes记录总分;

其中avgrate和AmountOfVotes通过计算vote_1到vote_5得到,这样减少了对表votes的大量查询。

如果配合评论,那么评论中增加关联即可,


CREATE TABLE IF NOT EXISTS `comments` (
               `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
               `rating_id` INT(11)  UNSIGNED NOT NULL DEFAULT 0,
               PRIMARY KEY ( `id` )
)
</div>
四,继续优化需要思考的问题

votes表中的数据量会是book中数据量的N倍,这种设计也便于votes的分表,不影响快速查询。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 拥有5星评级数据库表结构 如何才能更高效的使用?

相关文章

  • 2018-12-05ORACLE 常用的SQL语法和数据对象
  • 2017-05-11深入解析mysql.sock不见的问题
  • 2018-12-05如何实现python3实现并发访问水平切分表
  • 2018-12-05SQL 判断字段类型语句
  • 2018-12-05mysql中取系统当前时间,当前日期方便查询判定的代码
  • 2018-12-05Linux下安装Mysql多实例作为数据备份服务器实现多主到一从多实例
  • 2018-12-05关于spring集成mybatis如何实现mysql数据库读写分离的实例分析
  • 2018-12-05数据库优化实践【TSQL篇】
  • 2018-12-05oracle快速删除重复的记录
  • 2018-12-05怎样查询两个表中同一字段的不同数据值

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • Oracle数据分摊问题解析
    • sql2000 卸载后重新安装时不能安装的解决办法
    • SQL Server修改标识列方法 如自增列的批量化修改
    • MySQL查询优化:用子查询代替非主键连接查询实例介绍
    • MySQL rownumber SQL生成自增长序号使用介绍
    • SQL Server2008 数据库误删除数据的恢复方法分享
    • MySQL慢查询日志的配置以及使用教程详解
    • 10分钟让你明白MySQL是如何利用索引的
    • 解析MySQL数据库中外键约束
    • MSSQL Server 查询优化方法 整理

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有