《MYSQL教程拥有5星评级数据库表结构 如何才能更高效的使用?》要点:
本文介绍了MYSQL教程拥有5星评级数据库表结构 如何才能更高效的使用?,希望对您有用。如果有疑问,可以联系我们。
初步设计思路如下,请大家指正.MYSQL教程
一,最终效果,MYSQL教程
MYSQL教程
二,表结构
MYSQL教程
CREATE TABLE IF NOT EXISTS `users` (
`id` int(8) NOT NULL auto_increment,
`username` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) AUTO_INCREMENT=1 ;MYSQL教程
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`)
) ;
MYSQL教程
数据表分为两个部分,MYSQL教程
1,第一个部分,表votes.其中uid和bid设为了主键,这样防止一个用户多次投票的情况;MYSQL教程
查询时,可以使用,
MYSQL教程
评价总数: SELECT count(uid) FROM votes WHERE bid = $bid;
MYSQL教程
2,第二部分,冗余部分MYSQL教程
vote_1到vote_5,仅记录每一个级别评分的数量,有评分了则+1;MYSQL教程
avgrate记录平均分;
AmountOfVotes记录总分;MYSQL教程
其中avgrate和AmountOfVotes通过计算vote_1到vote_5得到,这样减少了对表votes的大量查询.MYSQL教程
如果配合评论,那么评论中增加关联即可,
MYSQL教程
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` )
)
MYSQL教程
votes表中的数据量会是book中数据量的N倍,这种设计也便于votes的分表,不影响快速查询.
MYSQL教程
转载请注明本页网址:
http://www.vephp.com/jiaocheng/5300.html