国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

擁有5星評級數據庫表結構 如何才能更高效的使用?

2024-07-24 12:40:58
字體:
來源:轉載
供稿:網友
產品數據庫設計時,經常遇到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的分表,不影響快速查詢。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 罗源县| 肥东县| 无为县| 宜宾县| 惠来县| 邯郸县| 宜兰县| 余干县| 眉山市| 白城市| 蕲春县| 饶平县| 雅江县| 时尚| 句容市| 长汀县| 阿拉善盟| 资兴市| 若尔盖县| 土默特左旗| 百色市| 孟州市| 金沙县| 来凤县| 颍上县| 甘肃省| 塔城市| 炎陵县| 奎屯市| 浙江省| 开江县| 姜堰市| 郸城县| 威宁| 宜城市| 昌江| 凤庆县| 渭南市| 建水县| 南康市| 门头沟区|