資料庫學習二 資料庫設計三正規化

2021-09-01 14:17:33 字數 2057 閱讀 9296

一.第一正規化(確保欄位的原子性)

定義:表裡面的所有欄位都是原子的,不可拆分的。

這裡面有兩個意思。一是可以拆封時,一定要拆分;二是不要亂拆分。

student_id 位址
這樣的設計不符合原子性,我們在存放"位址"的時候,會插入乙個很長的字串。往往我們將"位址"劃分為更小的不可拆分的單位。修改某個位址時,只需修改乙個或者多個字段。
學生id 省份 市 街道

student_id course_id1 score1 course_id1 score2...

1 5 60 數學 70

這樣的設計就是亂拆分了。這樣做理解起來很容易,乙個學生語文多少分,數學多少分...但資料表的設計不僅僅是建立在容易理解的基礎上的。在更新乙個學科的分數時或者刪除乙個學科的分數時,你都會死翹翹。正確的做法當然是:
student_id course_id score

1 5 60

2 6 80

二.第二正規化(確保所有欄位和主鍵相關)

student_id course_id  score student_name student_otherinfo

1 5 60 eason ...

student_id和course_id是聯合主鍵,score與兩個主鍵都相關,但student_name僅僅與student相關,違背了第二正規化。正確的做法:
student_id course_id  score 

1 5 60

student_id student_name 

1 5

三.第三正規化(確保所有欄位和主鍵直接相關,不能間接相關)確保所有欄位和主鍵直接相關,不能間接相關。消除表之間的依賴傳遞。

student_id(主鍵) student_name department_id(外來鍵) department_name
student_id----->student_name department_id department_name,滿足第二正規化。但student_id----->department_id, department_id----->department_name,存在非關鍵字段"department_name"對關鍵字段"student_id"的傳遞函式依賴。正確的做法:
student_id(主鍵) student_name department_id(外來鍵)
department_id department_name
四.靈活運用雖然有資料庫設計三正規化這麼一說,但實際操作中還要看具體環境,需要"逆正規化"的時候就大膽的逆。

資料庫非常龐大的時候,使用外來鍵會帶來非常大的效能損失。

考慮這樣乙個場景:一分鐘500個網咖伺服器向核心伺服器傳送hearbeat,核心伺服器處理hearbeat後將網咖上座率存入資料庫,以便以後做成日誌圖形。乙個小時就有3w條記錄,一天就有72w條記錄。後來我們這麼設計,每一分鐘來的hartbeat我們存入記憶體資料庫,下一分鐘我們update到記憶體資料庫,直到乙個小時了,我們將記憶體資料庫的記錄同步到myisam資料庫,這樣一天只會產生1.2w條。myisam表如下,t1_att表示第一分鐘來的資料。

資料庫 資料庫設計三正規化

第一正規化 不要向表中輸入重複的值 要有主鍵 表1 學生表 在表中有成千上萬條資料的時候,如果沒有規則的存在,可能會有很多重複的資料。解決這類問題的辦法是設立乙個主鍵,主鍵用來標識唯一的一條記錄,並且不可重複 在多個字段可以被選擇的情況下,作為主鍵的字段應該選擇最符合邏輯的乙個,一般選擇與業務無關的...

資料庫設計三大正規化資料庫設計三大正規化

為了建立冗餘較小 結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計乙個結構合理的關係型資料庫,必須滿足一定的正規化。在實際開發中最為常見的設計正規化有三個 1 第一正規化 確保每列保持原子性 第一正規化是最基本的正規化...

資料庫正規化 三正規化設計

資料庫第一正規化 原子性 表中每一列都不可以再分割成更小的列 資料庫第二正規化 不產生區域性依賴 每張表只描述一件事情 資料庫第三正規化 表中每列都直接依賴於主鍵,而不是通過其它列間接依賴於主鍵 什麼是資料庫正規化 學習第一正規化的應用 什麼是正規化 一種規則,指導程式設計師建立表的規則 程式設計師...