具有5星評級數據庫表構造 若何能力更高效的應用?。本站提示廣大學習愛好者:(具有5星評級數據庫表構造 若何能力更高效的應用?)文章只能為提供參考,不一定能成為您想要的結果。以下是具有5星評級數據庫表構造 若何能力更高效的應用?正文
初步設計思緒以下,請年夜家斧正。
一,終究後果,
二,表構造
CREATE TABLE IF NOT EXISTS `books` (
`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,
`AmountOfVotes` int(8) unsigned 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,
`bid` int(8) unsigned NOT NULL,
`vote` int(1) NOT NULL,
PRIMARY KEY (`bid`, `uid`)
) ;
三,設計思緒
數據表分為兩個部門,
1,第一個部門,表votes。個中uid和bid設為了主鍵,如許避免一個用戶屢次投票的情形;
查詢時,可使用,
均勻分:SELECT avg(vote) FROM votes WHERE bid = $bid;
評價總數: SELECT count(uid) FROM votes WHERE bid = $bid;
假如有時光排序的需求,可以再增長一個時光戳字段。
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` )
)
四,持續優化須要思慮的成績
votes表中的數據量會是book中數據量的N倍,這類設計也便於votes的分表,不影響疾速查詢。