如何使用5星级数据库表结构更有效地使用
初步设计思路如下。请改正。
第一,最终效果,
二、表结构
复制代码代码如下所示:
如果不存在,创建表(书)
` ID ` int(8)不为空auto_increment,
`标题` varchar(50)不为空,
` vote_1 ` int(8)符号的非空,
` vote_2 ` int(8)符号的非空,
` vote_3 ` int(8)符号的非空,
` vote_4 ` int(8)符号的非空,
` vote_5 ` int(8)符号的非空,
` avgrate ` int(8)符号的非空,
` amountofvotes ` int(8)符号的非空,
主键(id)
auto_increment = 1);
如果不存在,创建表(用户)
` ID ` int(8)不为空auto_increment,
`用户名` varchar(20)不为空,
主键(id)
auto_increment = 1);
如果不存在,创建表(投票)
` UID ` int(8)符号的非空,
投标int(8)无符号不空,
投票int(1)不为空,
PRIMARY KEY (`bid`, `uid`)
);
三,设计理念
数据表分为两部分。
1、第一部分、表票。其中,UID投标是建立的关键,它防止用户多次投票。
查询时,您可以使用它。
复制代码代码如下所示:
平均得分:从投票中选择AVG(投票);
评价总数:select count(UID)从选票在招标投标= $;
如果有时间对需求进行排序,您可以添加一个时间戳字段。
2部分,第二部分,冗余部分。
vote_1到vote_5,只记录每级,和得分+ 1;
avgrate记录的平均得分;
amountofvotes记录总得分;
在这avgrate和AmountOfVotes是通过计算来得到vote_1 vote_5,这减少了大量的反对票查询表。
如果您与评论合作,您可以在评论中添加一个关联。
复制代码代码如下所示:
如果不存在,创建表(注释)
` ID ` int(11)符号的非空auto_increment,
` rating_id ` int(11)符号的非空值0,
主键(id)
)
四,继续优化问题思考
投票表中的数据量是书中数据量的N倍,这种设计也方便了投票表,不影响快速查询。