mysql - 5星评分系统数据库表结构如何设计更高效?
大家讲道理
大家讲道理 2017-04-17 11:08:33
0
1
817

我们常见给产品进行5星评价的系统,我初步的构想如下,

SELECT avg(vote) FROM votes WHERE gid = $gid;
SELECT count(uid) FROM votes WHERE gid = $gid;

CREATE TABLE IF NOT EXISTS `games` (
  `id` int(8) NOT NULL auto_increment,
  `title` varchar(50) NOT NULL,
  PRIMARY KEY  (`id`)
) AUTO_INCREMENT=1 ;

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,
  `gid` int(8) unsigned NOT NULL,
  `vote` int(1) NOT NULL,
  PRIMARY KEY (`gid`, `uid`)
) ;

如何修改更高效?
例如,
当数据上万时,把平均值存储下来,而不是每次都进行计算?
在games表中进行适当的冗余,增加一个评论加1?
我现在有点拿不定主意。

CREATE TABLE IF NOT EXISTS `games` (
  `id` int(8) NOT NULL auto_increment,
  `title` varchar(50) NOT NULL,
 `vote_1` int(8) unsigned NOT NULL,
`vote_2` int(8) unsigned NOT NULL,
`vote_3` int(8) unsigned NOT NULL,
`vote_4` int(8) unsigned NOT NULL,
`vote_5` int(8) unsigned NOT NULL,
`avgrate` int(8) unsigned NOT NULL,
  PRIMARY KEY  (`id`)
) AUTO_INCREMENT=1 ;
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全員に返信(1)
Ty80

现在一般不都是 评分总分/评分次数 么? 其他的再加上防止用户重复投票就是了。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!