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

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

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

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

我們需要隱藏,因為我們不需要privot,而且pritvot也不在我們模型本身,他是中間數(shù)據(jù)

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

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

同時商品里放圖片id和圖片URL

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

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

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

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

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

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

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

那我們先提個問題,命名為問題X吧。

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

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

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

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

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

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

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

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

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

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

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

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

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

然后問題X的sql改為:

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

相當簡單的sql!

以上說明,有時候,適當?shù)臄?shù)據(jù)庫冗余是個不錯的選擇。

總結(jié)

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

相關(guān)文章

  • MySQL 配置文件 my.cnf / my.ini 區(qū)別解析

    MySQL 配置文件 my.cnf / my.ini 區(qū)別解析

    充分理解 MySQL 配置文件中各個變量的意義對我們有針對性的優(yōu)化 MySQL 數(shù)據(jù)庫性能有非常大的意義,這篇文章主要介紹了MySQL 配置文件 my.cnf / my.ini 區(qū)別,需要的朋友可以參考下
    2022-11-11
  • MySQL 慢日志相關(guān)知識總結(jié)

    MySQL 慢日志相關(guān)知識總結(jié)

    慢日志在日常數(shù)據(jù)庫運維中經(jīng)常會用到,我們可以通過查看慢日志來獲得效率較差的 SQL ,然后可以進行 SQL 優(yōu)化。本篇文章我們一起來學習下慢日志相關(guān)知識。
    2021-05-05
  • MySQL存儲過程及語法詳解

    MySQL存儲過程及語法詳解

    這篇文章主要介紹了MySQL存儲過程及語法詳解,存儲過程,也叫做存儲程序,是一條或者多條SQL語句的集合,可以視為批量處理,但是其作用不僅僅局限于批量處理
    2022-08-08
  • Mysql 5.7.18安裝方法及啟動MySQL服務的過程詳解

    Mysql 5.7.18安裝方法及啟動MySQL服務的過程詳解

    這篇文章主要介紹了Mysql 5.7.18安裝方法及啟動MySQL服務的過程,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-05-05
  • MySQL異?;謴椭疅o主鍵情況下innodb數(shù)據(jù)恢復的方法

    MySQL異?;謴椭疅o主鍵情況下innodb數(shù)據(jù)恢復的方法

    這篇文章主要介紹了MySQL異常恢復之無主鍵情況下innodb數(shù)據(jù)恢復的方法,結(jié)合實例形式分析了針對innodb引擎無主鍵的情況下恢復數(shù)據(jù)的步驟與相關(guān)技巧,需要的朋友可以參考下
    2016-04-04
  • Ubuntu 14.04下安裝MySQL

    Ubuntu 14.04下安裝MySQL

    1、更新源列表打開"終端窗口",輸入"sudo apt-getupdate"-->回車-->"輸入root用戶的密碼"-->回車,就可以了。如果不運行該命令,直接安裝mysql,會出現(xiàn)"有幾個軟件包無法下載,您可以運行apt-getupdate------"的錯誤提示,導致無法安裝。
    2016-04-04
  • Navicat數(shù)據(jù)存放位置和備份數(shù)據(jù)庫路徑設(shè)置方式

    Navicat數(shù)據(jù)存放位置和備份數(shù)據(jù)庫路徑設(shè)置方式

    這篇文章主要介紹了Navicat數(shù)據(jù)存放位置和備份數(shù)據(jù)庫路徑設(shè)置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • mysql InnoDB建表時設(shè)定初始大小的方法

    mysql InnoDB建表時設(shè)定初始大小的方法

    這篇文章主要介紹了mysql InnoDB建表時設(shè)定初始大小的方法,需要大家到MYSQL后臺實際操作方可以看到效果
    2013-11-11
  • MySQL binlog日志記錄格式寫入機制及相關(guān)參數(shù)講解

    MySQL binlog日志記錄格式寫入機制及相關(guān)參數(shù)講解

    這篇文章主要為大家介紹了MySQL binlog日志記錄格式寫入機制及相關(guān)參數(shù)使用講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • MySQL UPDATE 語句的非標準實現(xiàn)代碼

    MySQL UPDATE 語句的非標準實現(xiàn)代碼

    這篇文章主要介紹了MySQL UPDATE 語句的非標準實現(xiàn)代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04

最新評論