數據庫 三大範式

數據庫設計三大範式

爲了創建冗餘較小、結構合理的數據庫,設計數據庫時必須遵循必定的規則。在關係型數據庫中這種規則就稱爲範式。範式是符合某一種設計要求的總結。要想設計一個結構合理的關係型數據庫,必須知足必定的範式。html

                 

在實際開發中最爲常見的設計範式有三個:數據庫

1.第一範式(確保每列保持原子性)數據庫設計

第一範式是最基本的範式。若是數據庫表, 每一列屬性都是不可再分的屬性值,確保每一列的原子性,就說明該數據庫表知足了第一範式。性能

第一範式的合理遵循須要根據系統的實際需求來定。好比某些數據庫系統中須要用到地址這個屬性,原本直接將地址屬性設計成一個數據庫表的字段就行。可是若是系統常常會訪問地址屬性中的城市部分,那麼就非要地址這個屬性從新拆分爲省份、城市、詳細地址等多個部分進行存儲,這樣在對地址中某一部分操做的時候將很是方便。這樣設計纔算知足了數據庫的第一範式,以下表所示。spa

 

編號設計

姓名htm

性別blog

年齡ci

省份開發

城市

詳細地址

1

張三

23

北京

北京

朝陽區新華路23

 

上表所示的用戶信息遵循了第一範式的要求,這樣在對用戶使用城市進行分類的時候就很是方便,也提升了數據庫的性能。

                

2.第二範式(不能部分依賴)

第二範式是在知足第一範式的基礎上,要求每列的屬性必須徹底依賴於主關鍵字

學生Id

姓名

身份證號

課程Id

課程名稱

1

張三

12345666

1

數學

1

張三

12345666

2

語文

 

好比,一個學生學多門課程,若是設計爲上面一張表,一個學生就有多條數據,這樣子學生信息是重複的,就會形成數據冗餘。咱們應該拆分紅學生信息表,課程信息表以及學生課程關係表,三張表。

學生信息表

學生Id

姓名

身份證號

1

張三

12345666

1

張三

12345666

 

 

課程信息表

課程Id

課程名稱

1

數學

2

語文

學生課程關係表

課程Id

學生Id

1

1

2

1

 

 

                 

3.第三範式(不能存在傳遞依賴)

第三範式是在知足第二範式的基礎上,要求數據表中的每一列數據都和主鍵直接相關,而不能間接相關

好比設計的學生信息表以下,學校信息和學生Id不是直接相關的。

學生Id

姓名

年齡

性別

所在學校ID

學校名稱

學校地址

1

張三

25

1001

北京大學

北京市***

 

拆分以下:

學生信息表

學生Id

姓名

年齡

性別

所在學校ID

1

張三

25

1001

 

學校信息表

所在學校ID

學校名稱

學校地址

1001

北京大學

北京市***

相關文章
相關標籤/搜索