国产探花免费观看_亚洲丰满少妇自慰呻吟_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的分表,不影響快速查詢。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乌鲁木齐县| 襄垣县| 洛南县| 伊川县| 汾阳市| 绥化市| 乌拉特后旗| 万宁市| 甘谷县| 平顺县| 凤翔县| 金昌市| 阜南县| 和顺县| 东台市| 阳高县| 湘西| 怀化市| 甘孜| 喀喇沁旗| 玉门市| 舟山市| 雷州市| 玉田县| 宿松县| 岱山县| 卢氏县| 怀集县| 海盐县| 东阳市| 嘉兴市| 通城县| 卓资县| 伊宁县| 贵阳市| 通化市| 晴隆县| 谷城县| 双柏县| 巨野县| 长春市|