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

如何合理使用數(shù)據(jù)庫冗余字段的方法

 更新時(shí)間:2019年03月21日 08:34:37   作者:CODETC  
今天小編就為大家分享一篇關(guān)于如何合理使用數(shù)據(jù)庫冗余字段的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧

privot多對多關(guān)系的中間表。PT5框架會自動(dòng)把privot帶上。

我們需要隱藏,因?yàn)槲覀儾恍枰猵rivot,而且pritvot也不在我們模型本身,他是中間數(shù)據(jù)

另外冗余字段,我們有一個(gè)表是記錄圖片的,另一個(gè)表是記錄商品的。

我們可以在圖片你放商品圖片里的url

同時(shí)商品里放圖片id和圖片URL

這兩個(gè)字段是重復(fù)的,這就是數(shù)據(jù)冗余,我們設(shè)計(jì)數(shù)據(jù)庫是不要出現(xiàn)冗余信息,為啥我們用冗余呢。

主要是為了出于對查詢性能的考慮。

我們在這里做了數(shù)據(jù)冗余,我們就可以減少對圖片表的查詢,加速查詢速度!

不過推薦大家濫用數(shù)據(jù)冗余,因?yàn)閿?shù)據(jù)冗余對于數(shù)據(jù)完整性,和一致性維護(hù)很困難。有兩個(gè)地方記錄相同的信息,但我們?nèi)懭霐?shù)據(jù)的時(shí)候,就需要寫入到兩個(gè)地方。最大的問題在于刪除和跟新。更新的時(shí)候一個(gè)地方的IMG改變了,要更改兩個(gè)。否則就會產(chǎn)生數(shù)據(jù)不一致。不過數(shù)據(jù)冗余用的還是挺多的。

在WEB開發(fā)中,除了掌握一些必要的數(shù)據(jù)庫優(yōu)化技巧外,在合適的時(shí)候使用冗余字段也可以做到事半功倍的效果。比如下面這樣一個(gè)例子,有這么幾個(gè)表,是這么設(shè)計(jì)的。

  • 用戶表[user]:id,userName
  • 項(xiàng)目表[project]:id,projectName, user_id
  • 版本表[version]:id,versionName,project_id
  • 分類表[category]:id,categoryName,version_id
  • 內(nèi)容表[content]:id,text,category_id

差不多就是這樣了??粗懿诲e(cuò),沒有字段冗余。也符合數(shù)據(jù)庫設(shè)計(jì)的三大范式。

那我們先提個(gè)問題,命名為問題X吧。

問題X:如果要查詢某個(gè)版本下的內(nèi)容列表,sql應(yīng)該是這么寫的:

select c.* from content c, category t where c.category_id=t.id and t.version_id=?

好像也沒什么問題。要怎么優(yōu)化這個(gè)查詢呢?這個(gè)問題我們最后再來說。講回上面的表設(shè)計(jì),如果有這樣一個(gè)問題。舉個(gè)例子,我要查詢內(nèi)容A是否屬于用戶U,那我應(yīng)該怎么做?

  • 查詢內(nèi)容A所屬的分類B
  • 查詢分類B所屬的版本C
  • 查詢版本C所屬的項(xiàng)目D
  • 查詢項(xiàng)目D是否屬于用戶U,從而得出內(nèi)容A是否屬于用戶U

這樣的做法簡直惡劣至極不是嗎。此時(shí)你應(yīng)該已深刻意識到這種表設(shè)計(jì)弱爆之處。那怎么做呢?

冗余字段!沒錯(cuò),我們需要在表里添加冗余字段。如果在上述表(除了user表)都添加一個(gè)user_id字段,會怎么樣呢?

首先,可以確定,每個(gè)表的user_id字段的值都不會發(fā)生改變。所以,這個(gè)字段的值從一開始設(shè)定之后,就不用再修改了。

然后,我們再回到上述的問題:查詢內(nèi)容A是否屬于用戶U?,F(xiàn)在的做法是這樣的:

查詢內(nèi)容A的user_id是否為用戶U的id

就一步!好簡單粗暴是吧!很爽快是吧!

只需添加user_id這個(gè)冗余字段,就很大程度地方便了編碼量,而且數(shù)據(jù)庫的查詢效率也提升N倍。還有,這個(gè)字段只需要維護(hù)一次!

現(xiàn)在知道冗余字段的威力了吧,回到問題X。怎么優(yōu)化那個(gè)業(yè)務(wù)邏輯呢?

正確的做法應(yīng)該是:在content表中,添加多一個(gè)version_id字段,可以肯定,這個(gè)字段跟user_id字段類似,只需要維護(hù)一次。

然后問題X的sql改為:

select c.* from content c where c.version_id=?

相當(dāng)簡單的sql!

以上說明,有時(shí)候,適當(dāng)?shù)臄?shù)據(jù)庫冗余是個(gè)不錯(cuò)的選擇。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

  • MySQL預(yù)編譯功能詳解

    MySQL預(yù)編譯功能詳解

    這篇文章主要為大家詳細(xì)介紹了MySQL預(yù)編譯功能的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • MySQL如何快速修改表的表結(jié)構(gòu)

    MySQL如何快速修改表的表結(jié)構(gòu)

    這篇文章主要介紹了MySQL如何快速修改表的表結(jié)構(gòu),幫助大家更好的理解和學(xué)習(xí)MySQL,感興趣的朋友可以了解下
    2020-08-08
  • my.cnf參數(shù)配置實(shí)現(xiàn)InnoDB引擎性能優(yōu)化

    my.cnf參數(shù)配置實(shí)現(xiàn)InnoDB引擎性能優(yōu)化

    目前來說:InnoDB是為Mysql處理巨大數(shù)據(jù)量時(shí)的最大性能設(shè)計(jì)。它的CPU效率可能是任何其它基于磁盤的關(guān)系數(shù)據(jù)庫引擎所不能匹敵的。在數(shù)據(jù)量大的網(wǎng)站或是應(yīng)用中Innodb是倍受青睞的。另一方面,在數(shù)據(jù)庫的復(fù)制操作中Innodb也是能保證master和slave數(shù)據(jù)一致有一定的作用。
    2017-05-05
  • 淺談一下MyISAM和InnoDB存儲引擎的區(qū)別

    淺談一下MyISAM和InnoDB存儲引擎的區(qū)別

    這篇文章主要介紹了MyISAM和InnoDB存儲引擎的區(qū)別,存儲引擎是MySQL中特有的一個(gè)術(shù)語,其它數(shù)據(jù)庫中沒有,實(shí)際上存儲引擎是一個(gè)表存儲/組織數(shù)據(jù)的方式,今天就跟小編來看看MyISAM和InnoDB存儲引擎的區(qū)別,需要的朋友可以參考下
    2023-04-04
  • 解決MySQL server has gone away錯(cuò)誤的方案

    解決MySQL server has gone away錯(cuò)誤的方案

    在本篇文章里小編給大家分享的是一篇關(guān)于MySQL server has gone away錯(cuò)誤的解決辦法,有需要的朋友們可以參考下。
    2020-02-02
  • MySQL獲取所有分類的前N條記錄

    MySQL獲取所有分類的前N條記錄

    本文給大家分享的是使用mysql實(shí)現(xiàn)獲取所有分類的前N條記錄的方法,本文給出了3個(gè)示例,有需要的小伙伴可以參考下。
    2015-04-04
  • MySQL刪除表的外鍵約束圖文教程(簡單易懂)

    MySQL刪除表的外鍵約束圖文教程(簡單易懂)

    刪除表不是特別常用,特別是對于存在外鍵關(guān)聯(lián)的表,刪除更得小心,這篇文章主要給大家介紹了關(guān)于MySQL刪除表的外鍵約束的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-07-07
  • mysql線上查詢前要注意資源限制的實(shí)現(xiàn)

    mysql線上查詢前要注意資源限制的實(shí)現(xiàn)

    在數(shù)據(jù)庫管理中,限制查詢資源是避免單個(gè)查詢消耗過多資源導(dǎo)致系統(tǒng)性能下降的重要手段,本文就來介紹了mysql線上查詢前要注意資源限制的實(shí)現(xiàn),感興趣的可以了解一下
    2024-10-10
  • 如何在Windows中運(yùn)行多個(gè)MySQL實(shí)例詳解

    如何在Windows中運(yùn)行多個(gè)MySQL實(shí)例詳解

    這篇文章主要給大家介紹了關(guān)于如何在Windows中運(yùn)行多個(gè)MySQL實(shí)例的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • MySQL?中MATCH?全文搜索關(guān)鍵字示例詳解

    MySQL?中MATCH?全文搜索關(guān)鍵字示例詳解

    這篇文章主要介紹了MySQL?中MATCH?全文搜索關(guān)鍵字詳解,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-09-09

最新評論

平乡县| 永泰县| 鄂伦春自治旗| 沛县| 方正县| 沙田区| 普兰店市| 丹江口市| 靖远县| 淮南市| 潮州市| 临潭县| 开化县| 邢台市| 荃湾区| 镇赉县| 乌拉特中旗| 丹凤县| 阳朔县| 南开区| 且末县| 伊金霍洛旗| 会同县| 永寿县| 曲靖市| 凤冈县| 饶河县| 长阳| 佳木斯市| 荣昌县| 广平县| 阿拉善左旗| 南川市| 雷州市| 新巴尔虎左旗| 阳江市| 蕉岭县| 饶河县| 冀州市| 盖州市| 淅川县|