資料庫設計三正規化的舉例及四大特性說明

2021-09-12 02:47:57 字數 4328 閱讀 2573

前言

資料庫課本上都把正規化寫到五正規化了,但是實際應用中,滿足三正規化已經足夠了,五正規化太多餘了。

三種正規化是條件遞增的聯絡(即後乙個正規化是在前乙個條件滿足的情況下引入新的條件)。

例如正規化

滿足條件

一正規化(1nf)

條件a二正規化(2nf)

條件a,條件b

三正規化(3nf)

條件a,條件b,條件c

下面詳細解釋一下

第一正規化(1nf)

滿足條件:

原子性,即資料庫表裡的字段都是不可分割的

例如下面學生表的設計明顯不滿足要求,年級專業是可以再分的,就不能偷懶放在一塊

學號姓名

年齡年級專業

王玉偉15級軟工

符合第一正規化的做法為學號

姓名年齡

年級專業

王玉偉15級軟工

第二正規化(2nf)

滿足條件:

原子性,即資料庫表裡的字段都是不可分割的

表中必須有主鍵

其他非主屬性必須完全依賴主鍵(不能依賴主鍵一部分,這是針對聯合主鍵說的)

針對條件三解釋一下(假設學號為主鍵)

我們以學號為主鍵的時候,確保該學生別的欄位都完全依賴學號,不能出現下面這種課程名不依賴學號而依賴課程號的設計。

學號姓名

年齡課程名

課程號王玉偉

英語符合第二正規化的做法學號

姓名年齡

王玉偉課程名

課程號英語

解釋一下聯合主鍵中的要求

下面是我之前設計的乙個表,學號sno與課程號cno做聯合主鍵,而第二正規化要求的完全依賴,下表並沒有做到從這個表中可以看出,姓名依賴學號,課程名依賴課程號,但是這都是依賴了一部分,只有成績對學號和課程號都依賴,因此是不符合第二正規化的

符合第二正規化的設計為(即拆成三個表,只展示一下表的字段)

snocno

grade

cnocname

snosname

第三正規化(3nf)

滿足條件:

原子性,即資料庫表裡的字段都是不可分割的

表中必須有主鍵

其他非主屬性必須完全依賴主鍵(不能依賴主鍵一部分,這是針對聯合主鍵說的)

非表中主鍵字段完全直接依賴主鍵,不能是傳遞依賴

例如下表,學院依賴於主鍵學號,但是學院位址 依賴於學院,這樣對主鍵就是不是直接依賴(這裡可能會有人疑問位址也是能拆成省市區的字段,這裡不拆也是可以的,因為表示的就是位址字段)

學號姓名

年齡年級

學院學院位址

王玉偉15級

計算機學院

內蒙古呼和浩特市賽罕區

符合第三正規化的做法(刪去有間接依賴的字段)

學號姓名

年齡年級

學院王玉偉

15級計算機學院

資料庫管理系統中事務(transaction)的四個特性(分析時根據首字母縮寫依次解釋):原子性(atomicity)、一致性(consistency)、隔離性(isolation)、永續性(durability)

所謂事務,它是乙個操作序列,這些操作要麼都執行,要麼都不執行,它是乙個不可分割的工作單位。(執行單個邏輯功能的一組指令或操作稱為事務)

原子性是指事務是乙個不可再分割的工作單元,事務中的操作要麼都發生,要麼都不發生。

可採用「a向b轉賬」這個例子來說明解釋

在dbms中,預設情況下一條sql就是乙個單獨事務,事務是自動提交的。只有顯式的使用start transaction開啟乙個事務,才能將乙個**塊放在事務中執行。

一致性是指在事務開始之前和事務結束以後,資料庫的完整性約束沒有被破壞。這是說資料庫事務不能破壞關係資料的完整性以及業務邏輯上的一致性。

如a給b轉賬,不論轉賬的事務操作是否成功,其兩者的存款總額不變(這是業務邏輯的一致性,至於資料庫關係約束的完整性就更好理解了)。

保障機制(也從兩方面著手):資料庫層面會在乙個事務執行之前和之後,資料會符合你設定的約束(唯一約束,外來鍵約束,check約束等)和觸發器設定;此外,資料庫的內部資料結構(如 b 樹索引或雙向鍊錶)都必須是正確的。業務的一致性一般由開發人員進行保證,亦可轉移至資料庫層面。

多個事務併發訪問時,事務之間是隔離的,乙個事務不應該影響其它事務執行效果。

在併發環境中,當不同的事務同時操縱相同的資料時,每個事務都有各自的完整資料空間。由併發事務所做的修改必須與任何其他併發事務所做的修改隔離。事務檢視資料更新時,資料所處的狀態要麼是另一事務修改它之前的狀態,要麼是另一事務修改它之後的狀態,事務不會檢視到中間狀態的資料。

事務最複雜問題都是由事務隔離性引起的。完全的隔離性是不現實的,完全的隔離性要求資料庫同一時間只執行一條事務,這樣會嚴重影響效能。

關於隔離性中的事務隔離等級(事務之間影響),參見相應博文

這是最好理解的乙個特性:永續性,意味著在事務完成以後,該事務所對資料庫所作的更改便持久的儲存在資料庫之中,並不會被回滾。(完成的事務是系統永久的部分,對系統的影響是永久性的,該修改即使出現致命的系統故障也將一直保持)

write ahead logging:sql server中使用了wal(write-ahead logging)技術來保證事務日誌的acid特性,在資料寫入到資料庫之前,先寫入到日誌,再將日誌記錄變更到儲存器中。

資料庫管理系統中事務(transaction)的四個特性(分析時根據首字母縮寫依次解釋):原子性(atomicity)、一致性(consistency)、隔離性(isolation)、永續性(durability)

所謂事務,它是乙個操作序列,這些操作要麼都執行,要麼都不執行,它是乙個不可分割的工作單位。(執行單個邏輯功能的一組指令或操作稱為事務)

原子性是指事務是乙個不可再分割的工作單元,事務中的操作要麼都發生,要麼都不發生。

可採用「a向b轉賬」這個例子來說明解釋

在dbms中,預設情況下一條sql就是乙個單獨事務,事務是自動提交的。只有顯式的使用start transaction開啟乙個事務,才能將乙個**塊放在事務中執行。

一致性是指在事務開始之前和事務結束以後,資料庫的完整性約束沒有被破壞。這是說資料庫事務不能破壞關係資料的完整性以及業務邏輯上的一致性。

如a給b轉賬,不論轉賬的事務操作是否成功,其兩者的存款總額不變(這是業務邏輯的一致性,至於資料庫關係約束的完整性就更好理解了)。

保障機制(也從兩方面著手):資料庫層面會在乙個事務執行之前和之後,資料會符合你設定的約束(唯一約束,外來鍵約束,check約束等)和觸發器設定;此外,資料庫的內部資料結構(如 b 樹索引或雙向鍊錶)都必須是正確的。業務的一致性一般由開發人員進行保證,亦可轉移至資料庫層面。

多個事務併發訪問時,事務之間是隔離的,乙個事務不應該影響其它事務執行效果。

在併發環境中,當不同的事務同時操縱相同的資料時,每個事務都有各自的完整資料空間。由併發事務所做的修改必須與任何其他併發事務所做的修改隔離。事務檢視資料更新時,資料所處的狀態要麼是另一事務修改它之前的狀態,要麼是另一事務修改它之後的狀態,事務不會檢視到中間狀態的資料。

事務最複雜問題都是由事務隔離性引起的。完全的隔離性是不現實的,完全的隔離性要求資料庫同一時間只執行一條事務,這樣會嚴重影響效能。

關於隔離性中的事務隔離等級(事務之間影響),參見相應博文

這是最好理解的乙個特性:永續性,意味著在事務完成以後,該事務所對資料庫所作的更改便持久的儲存在資料庫之中,並不會被回滾。(完成的事務是系統永久的部分,對系統的影響是永久性的,該修改即使出現致命的系統故障也將一直保持)

write ahead logging:sql server中使用了wal(write-ahead logging)技術來保證事務日誌的acid特性,在資料寫入到資料庫之前,先寫入到日誌,再將日誌記錄變更到儲存器中。

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

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

資料庫設計及三大正規化

2 抽取並標識實體 設計人員分析系統需求規格說明書,從中抽取資料需求物件,並將它們標識為實體。實體是對現實世界中描述事物資料物件的抽象概念。實體可以是人 物品 機構等等,凡是包含資料特徵的物件均可被定義為實體。在e r模型圖中,實體通常用兩層矩形方框方式,並在頂層方框內註明實體的名稱。針對乙個圖書銷...

資料庫設計 三正規化 解釋 舉例

1nf 字段不可分 2nf 有主鍵,非主鍵字段依賴主鍵 3nf 非主鍵字段不能相互依賴 解釋 1nf 原子性 字段不可再分,否則就不是關聯式資料庫 2nf 唯一性 乙個表只說明乙個事物 3nf 每列都與主鍵有直接關係,不存在傳遞依賴 不符合第一正規化的例子 關聯式資料庫中create不出這樣的表 表...