最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

擁有5星評級數(shù)據(jù)庫表結(jié)構(gòu) 如何才能更高效的使用?

 更新時間:2013年04月28日 16:44:24   作者:  
本篇文章介紹了,擁有5星評級數(shù)據(jù)庫表結(jié)構(gòu) 如何才能更高效的使用的方法。需要的朋友參考下
產(chǎn)品數(shù)據(jù)庫設(shè)計時,經(jīng)常遇到5星評價的情況,數(shù)據(jù)表如何設(shè)計才能即保證查詢效率,又能減少數(shù)據(jù)冗余呢?

初步設(shè)計思路如下,請大家指正。

一,最終效果,

二,表結(jié)構(gòu)

復(fù)制代碼 代碼如下:

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`)
) ;


三,設(shè)計思路

數(shù)據(jù)表分為兩個部分,

1,第一個部分,表votes。其中uid和bid設(shè)為了主鍵,這樣防止一個用戶多次投票的情況;

查詢時,可以使用,

復(fù)制代碼 代碼如下:

平均分:SELECT avg(vote) FROM votes WHERE bid = $bid;

評價總數(shù): SELECT count(uid) FROM votes WHERE bid = $bid;


如果有時間排序的需求,可以再增加一個時間戳字段。

2,第二部分,冗余部分

vote_1到vote_5,僅記錄每一個級別評分的數(shù)量,有評分了則+1;

avgrate記錄平均分;
AmountOfVotes記錄總分;

其中avgrate和AmountOfVotes通過計算vote_1到vote_5得到,這樣減少了對表votes的大量查詢。

如果配合評論,那么評論中增加關(guān)聯(lián)即可,

復(fù)制代碼 代碼如下:


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` )
)


四,繼續(xù)優(yōu)化需要思考的問題

votes表中的數(shù)據(jù)量會是book中數(shù)據(jù)量的N倍,這種設(shè)計也便于votes的分表,不影響快速查詢。

相關(guān)文章

  • Oracle 和 mysql的9點區(qū)別

    Oracle 和 mysql的9點區(qū)別

    這篇文章主要介紹了Oracle 和 mysql的9點區(qū)別,需要的朋友可以參考下
    2014-04-04
  • MySQL服務(wù)器的啟動和關(guān)閉

    MySQL服務(wù)器的啟動和關(guān)閉

    作為MySQL管理員,一個普通的目標(biāo)就是確保服務(wù)器盡可能地處于運行狀態(tài),使得客戶機能夠隨時訪問它。但是,有時最好關(guān)閉服務(wù)器(例如,如果正在進行數(shù)據(jù)庫的重定位,不希望服務(wù)器在該數(shù)據(jù)庫中更新表)。保持服務(wù)器運行和偶爾關(guān)閉它的需求關(guān)系不是本書所解 決的。但是我們至少可以討論如何使服務(wù)器啟動和停止,以便您具備進行這兩個操作的能力。
    2008-04-04
  • Mysql架構(gòu)圖解讀

    Mysql架構(gòu)圖解讀

    這篇文章主要介紹了Mysql架構(gòu)圖,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Sysbench多線程性能測試工具

    Sysbench多線程性能測試工具

    sysbench是一個多線程性能測試工具,可以進行CPU/內(nèi)存/IO/數(shù)據(jù)庫等性能測試,不過我絕大多數(shù)的時候都是用它來對數(shù)據(jù)庫(MySQL)進行oltp測試
    2012-11-11
  • 解決mysql時區(qū)問題導(dǎo)致錯誤Incorrect datetime value: '1970-01-01 00:00:01'

    解決mysql時區(qū)問題導(dǎo)致錯誤Incorrect datetime value: &apo

    這篇文章主要介紹了解決mysql時區(qū)問題導(dǎo)致錯誤Incorrect datetime value: '1970-01-01 00:00:01',具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Mysql數(shù)據(jù)庫中子查詢的使用

    Mysql數(shù)據(jù)庫中子查詢的使用

    本文給大家分享mysql數(shù)據(jù)庫中子查詢的使用,非常不錯具有參考借鑒價值,感興趣的朋友一起看看吧
    2016-10-10
  • MySQL 8.0新特性 — 管理端口的使用簡介

    MySQL 8.0新特性 — 管理端口的使用簡介

    這篇文章主要介紹了MySQL 8.0新特性 — 管理端口的使用簡介,幫助大家更好的理解和學(xué)習(xí)使用MySQL,感興趣的朋友可以了解下
    2021-03-03
  • mysql LOAD語句批量錄入數(shù)據(jù)

    mysql LOAD語句批量錄入數(shù)據(jù)

    本章的前面討論如何使用SQL向一個表中插入數(shù)據(jù)。但是,如果你需要向一個表中添加許多條記錄,使用SQL語句輸入數(shù)據(jù)是很不方便的。
    2010-03-03
  • mysql的sql語句特殊處理語句總結(jié)(必看)

    mysql的sql語句特殊處理語句總結(jié)(必看)

    下面小編就為大家?guī)硪黄猰ysql的sql語句特殊處理語句總結(jié)(必看)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • 解析MySQL binlog

    解析MySQL binlog

    我們都知道,binlog可以說是MySQL中比較重要的日志了,在日常學(xué)習(xí)及運維過程中,也經(jīng)常會遇到。不清楚你對binlog了解多少呢?本篇文章將從binlog作用、binlog相關(guān)參數(shù)、解析binlog內(nèi)容三個方面帶你了解binlog
    2021-06-06

最新評論

达孜县| 揭西县| 旬阳县| 祁连县| 惠来县| 合作市| 景洪市| 华池县| 鹿邑县| 清水河县| 瑞丽市| 收藏| 漾濞| 邹城市| 邵东县| 汉沽区| 台北市| 衡水市| 偏关县| 乌兰察布市| 徐州市| 嵊泗县| 中西区| 潼南县| 巧家县| 宁化县| 泰和县| 斗六市| 浪卡子县| 陇西县| 班戈县| 四会市| 宜章县| 绥宁县| 兰坪| 新密市| 郑州市| 六盘水市| 济宁市| 樟树市| 博兴县|