亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

初步設計思路如下,請大家指正。

一,最終效果,

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

復制代碼 代碼如下:

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ù)據(jù)表分為兩個部分,

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

查詢時,可以使用,

復制代碼 代碼如下:

平均分: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)即可,

復制代碼 代碼如下:


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倍,這種設計也便于votes的分表,不影響快速查詢。

相關(guān)文章

  • Mysql中的innoDB如何解決幻讀

    Mysql中的innoDB如何解決幻讀

    這篇文章主要介紹了Mysql中的innoDB如何解決幻讀,幻讀是指在同一個事務中,前后兩次查詢相同范圍的時候得到的結(jié)果不一致,文章將介紹InnoDB引入間隙鎖和next-key?lock機制去解決幻讀問題,感興趣的小伙伴可以參考一下
    2022-04-04
  • mysql 8.0.13 安裝配置圖文教程

    mysql 8.0.13 安裝配置圖文教程

    這篇文章主要介紹了mysql 8.0.13 安裝配置圖文教程,文中安裝步驟介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • MySQL InnoDB和MyISAM數(shù)據(jù)引擎的差別分析

    MySQL InnoDB和MyISAM數(shù)據(jù)引擎的差別分析

    InnoDB和MyISAM是在使用MySQL最常用的兩個表類型,各有優(yōu)缺點,視具體應用而定?;镜牟顒e為:MyISAM類型不支持事務處理等高級處理,而InnoDB類型支持
    2011-05-05
  • 如何批量生成MySQL不重復手機號大表實例代碼

    如何批量生成MySQL不重復手機號大表實例代碼

    這篇文章主要給大家介紹了關(guān)于如何批量生成MySQL不重復手機號大表的相關(guān)資料,,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-11-11
  • Mysql通過ibd文件恢復數(shù)據(jù)的詳細步驟

    Mysql通過ibd文件恢復數(shù)據(jù)的詳細步驟

    mysql在使用的過程中,難免遇到數(shù)據(jù)庫表誤操作,下面這篇文章主要給大家介紹了關(guān)于Mysql通過ibd文件恢復數(shù)據(jù)的詳細步驟,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • MySQL恢復中的幾個問題解決方法

    MySQL恢復中的幾個問題解決方法

    這篇文章主要介紹了MySQL恢復中的幾個問題,需要的朋友可以參考下
    2016-01-01
  • Mysql中的觸發(fā)器簡單介紹及使用案例

    Mysql中的觸發(fā)器簡單介紹及使用案例

    觸發(fā)器可以監(jiān)聽著數(shù)據(jù)表的某個行為,一旦數(shù)據(jù)表的這個行為發(fā)生了,馬上執(zhí)行相應的sql語句,下面有個不錯的案例大家可以研究下
    2013-12-12
  • CentOS7卸載MySQL5.7的方法步驟

    CentOS7卸載MySQL5.7的方法步驟

    這篇文章主要介紹了CentOS7卸載MySQL5.7的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • 關(guān)于mysql 的時間類型選擇

    關(guān)于mysql 的時間類型選擇

    本篇文章是對mysql中的時間類型選擇進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • MySQL數(shù)據(jù)庫之union,limit和子查詢詳解

    MySQL數(shù)據(jù)庫之union,limit和子查詢詳解

    這篇文章主要為大家詳細介紹一下MySQL數(shù)據(jù)庫中union、limit和子查詢的使用,文中的示例代碼講解詳細,對我們學習MySQL有一定幫助,需要的可以參考一下
    2022-07-07

最新評論