程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 具有5星評級數據庫表構造 若何能力更高效的應用?

具有5星評級數據庫表構造 若何能力更高效的應用?

編輯:MySQL綜合教程

具有5星評級數據庫表構造 若何能力更高效的應用?。本站提示廣大學習愛好者:(具有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的分表,不影響疾速查詢。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved