1. 程式人生 > >資料庫三正規化(NF)

資料庫三正規化(NF)

資料庫在優化的時候我們主要通過四個方面進行考慮:

    1.資料庫設計的合理性(多針對表結構的合理性)。

    2、sql語句的結構優化

   3、資料的配置(多針對快取而言,犧牲空間來換取時間)

   4、在我們的硬體配置和作業系統的選擇上進行考慮。

今天主要介紹資料庫設計的合理性這部分:

      所謂資料庫表設計的合理性,主要是看我們設計的表是否遵循了三正規化。

    第一正規化:要求我們的資料具有原子性和不可分割性。在關係型資料庫中,預設就遵循了我們的第一正規化。

    第二正規化:在滿足了第一正規化的基礎上,再考慮我們的第二正規化即:一條記錄的唯一性。

                     所謂的唯一性其實大多是在我們的資料庫中設定一個主鍵,避免重複。

    第三正規化:在滿足第二正規化的基礎上,我們再考慮第三正規化即:我們所需要的的資訊,可以通過表之間的關聯關                        系來獲取,不需要在多個表中新增相同內容的冗餘欄位。

 從普通表的設計而言,滿足這三個正規化,就進行資料庫表設計的基本要求。

  但是凡事沒有什麼絕對的。根據具體的需求有時候我們需要進行一種逆正規化的表設計:

  例如我有一個需求 :

                   兩個小隊,每個小隊10人,在參加一項比賽,我需要你把個人總得分,和小隊的總得分數查詢給我。

             這個時候如果使用正規化設計是這樣的:

                

          你有沒有發現有什麼問題?  如果沒有,說明你在程式設計習慣有問題,只停留在了用的階段,沒有思考。

              誠然我們可以通過編寫sql語句的方式來遍歷整個隊員表,通過id或指定的小隊,拿到每個人的分數相加

              最後得小隊分數。然而這樣就造成我們查詢的資料過於龐大,你想想我們需要拿到所有隊員的分數,再加起來,如果隊員有上千人,我就要遍歷上千次。

        這個時候逆正規化就有了用場,我在team表中也新增一個分數的欄位。


新增一個觸發器,當某個小隊的人分數加1時,我就觸發team表中隊員的team_grade欄位加1

這樣在查詢小隊分數時,我們只需要查詢到一條資料,便可以取出值。極大的節省了時間。

然而需要注意的是在使用逆正規化時,需要注意,在一對多的關係中,可關聯到的類似冗餘欄位一定要在一的一方進行設定,否則就成了畫蛇添足。

相關推薦

資料庫正規化NF

資料庫在優化的時候我們主要通過四個方面進行考慮:     1.資料庫設計的合理性(多針對表結構的合理性)。     2、sql語句的結構優化    3、資料的配置(多針對快取而言,犧牲空間來換取時間)    4、在我們的硬體配置和作業系統的選擇上進行考慮。 今天主要介紹資料

資料庫正規化

轉自:資料庫設計三大正規化 資料庫設計正規化 什麼是正規化:簡言之就是,資料庫設計對資料的儲存效能,還有開發人員對資料的操作都有莫大的關係。所以建立科學的,規範的的資料庫是需要滿足一些 規範的來優化資料資料儲存方式。在關係型資料庫中這些規範就可以稱為正規化。 什麼是三大正規化: 第一正規化:當關系模

Meteor學習路程資料庫的例子5【刪除】

這個例子插入的例子是在http://blog.csdn.net/miss_ll/article/details/54573802資料庫基礎進行繼續完善的。 與update類似,也需要指定目標文件ID。 新增“刪除”按鈕,單擊後彈出確認提示框,確認後在集合中刪除模板文件。 (1)

Meteor學習路程資料庫的例子4【修改】

這個例子插入的例子是在http://blog.csdn.net/miss_ll/article/details/54377748資料庫基礎進行繼續完善的。 這幾個例子都是仿照著《Meteor全棧開發》完成的哦。 接下來,會在每條展示的使用者資訊後面新增“修改”按鈕,單擊後,詞條記錄文字變

Meteor學習路程資料庫的例子3【查詢】

這個例子插入的例子是在http://blog.csdn.net/miss_ll/article/details/54573400資料庫基礎進行繼續完善的,資料庫中存在著三條資料。 查詢的方式: (1)條件查詢 修改資料庫helper,我這裡是testsusers.js Tem

Meteor學習路程資料庫的例子2【插入】

這個例子插入的例子是在http://blog.csdn.net/miss_ll/article/details/54377748資料庫基礎進行繼續完善的。 (1)在client/template資料夾下面新建一個插入表單模板insertform.html <template name

Meteor學習路程資料庫的例子1【查詢】

接下來會用Meteor的幾種方式展示出資料: 第一步:命令列新建工程 meteor create dbTest ....... cd dbTest ....... meteor npm install ....... meteor第二步: 第一種方式:模擬資料 在clien

【.NET Core專案實戰-統一認證平臺】第章 閘道器篇-資料庫儲存配置1

原文: 【.NET Core專案實戰-統一認證平臺】第三章 閘道器篇-資料庫儲存配置(1) 【.NET Core專案實戰-統一認證平臺】開篇及目錄索引 本篇將介紹如何擴充套件Ocelot中介軟體實現自定義閘道器,並使用2種不同資料庫來演示Ocelot配置資訊儲存和動態更新功能,內容也是從實際設計出發

資料庫正規化1NF、2NF、3NF、BNCF

轉載:http://www.cnblogs.com/hi-bazinga/archive/2012/06/05/2536806.html,謝謝這位大神! 第一正規化:關係模式中,每個屬性不可再分。屬性原子性 第二正規化:非主屬性完全依賴於主屬性,即消除非主屬性對主屬性的

Cocos2d-x 3.4 之 消滅星星 &gt; 第 &lt;

周期 ack ini 顏色 博客 ec2 width pri mp3格式 ***************************************轉載請註明出處:http://blog.csdn.net/lttree************************

fantastic NABCD+用戶原型+用戶調研

提交 需求 自由 you 功能 未決 寓教於樂 調研 免費 NABCD: N: 典型用戶1是一個喜歡刺激的人,追求遊戲過程,希望過關帶給他快樂 典型用戶2是一個數學家,嚴格甚至嚴苛,希望遊戲中的定理定義十分嚴格,甚至達到書本級別 典型用戶3是一個競技愛好者,希望遊戲可以加

geomystory修改後的需求分析

這就是 回首 線性 技術 角色 sof 環境 傳播 增加 學習了軟件工程之後,我們只是大致了解了編寫大型軟件需要軟件工程,否則就會遇到“軟件危機”,具體的軟件危機是什麽,我們卻不甚了解。大家熟悉軟件工程經典的秋千圖,它介紹了軟件開發中個各種問題,看的時候不免覺得好笑,但是當

枚舉 + 遊標

int area 存在 lan freopen 最小 numbers esp between The swimming area of Berhattan‘s city beach is marked out with n buoys. The buoys form a

2018春招-今日頭條筆試題-第python

font val gpo -s nbsp blog eva 字符 今日頭條 題目描述:2018春招-今日頭條筆試題5題(後附大佬答案-c++版) 解題思路: 本題的做法最重要的應該是如何拼出‘1234567890’,對於輸入表達試獲得對應的結果利用python內置函數eva

為什麽機房要使用3D可視化監控管理系統

綜合布線 廣州科迅電子數據可視化管理平臺采用3D可視化技術對數據中心進行刻畫,也被稱為虛擬仿真,即通過技術手段把數據中心的一切物理存在的對象進行數據建模(從樓宇到設備,從地板到網線),以3D的方式在計算機中生成出來,供用戶進行查看、交互、分析,機房不再需要現實中用腳走過去參觀與查看,而是隨時隨地的以任意一個視

PowerShell變量——PowerShell分鐘

PowerShell有了前面的PowerShell基礎,今天我們來學習一個可以極大提升PowerShell效率的用法——變量簡答來說呢,變量就是在內存中的一個帶有名字的盒子~~~~~你可以把所有想存放的東西都放到這個“盒子”裏。然後通過名字去訪問這個盒子。在訪問過程中,可以存放、添加或者從裏面檢索東西。這些東

輸入、過濾和輸出——PowerShell分鐘

PowerShell今天的三分鐘給大家歸納一下PowerShell日常對數據的輸入過濾和輸出的處理PowerShell輸入數據的方式有很多種,包括直接輸入字符、導入數據、捕獲界面輸入等對於較少的信息,可以直接手工在PowerShell界面中輸入:這種方式很常見,對於需求信息較少的查詢和操作非常方便除此之外,還

第一個PowerShell腳本——PowerShell分鐘

PowerShell Exchange 前面把基礎知識講了一遍,現在我們開始寫一個最初級的腳本寫腳本的工具有很多,有文本文檔,有PowerShell ISE,PowerShell Studio等,這裏選用系統自帶的PowerShell ISE這裏大家依然要記得以管理員身份運行,否則容易權限不足導致命令

遍歷——PowerShell分鐘

mage 用戶 src 分享 proc 需要 alt 對象 .com 今天來介紹一個特別有用的循環——遍歷 ForeachForeach的含義是 對輸入對象集合中的每個對象執行操作假設有一到五共五個對象,那麽Foreach的作用就是針對每一個對象均執行操作舉個栗子,在ISE

區塊鏈二事兒技術篇

一 前言 區塊鏈的開始,還要提一箇中國人–戴偉,可以去他的網站(www.weidai.com)上看看他關於B-Money的文章。中本聰在論文《比特幣:一種點對點網路中的電子現金》中的第一個引用者就是戴偉。十年來,區塊鏈的概念早已飛入尋常百姓家。 挖個坑,認知區塊鏈需要如下四步: