數據庫中的範式

數據庫範式
實體:類比爲類
屬性:類比爲類中的屬性
元組:表中的一行就是一個元祖,(相當於一個對象)
分量:就像一個對象中某個屬性的值
數據庫範式的作用取出進行數據庫設計時字段、表、劃分的 依據

1.第一範式(1FN):

**每一列保持原子特性,列是基本數據項。不能再進行拆分,如果不符合原子特性,需將此屬性拆分
例:學生表(學生ID、姓名、年齡、地址) 主鍵(學生id)
—> 此表中地址不滿足原子性,仍然可以進行拆分拆分之後:

學生表(學生id,姓名、年齡、地址id) 主鍵(學生id) 外鍵(地址iid)
地址表(地址id、國籍、省、市、縣區) 主鍵(地址id)
總結:
關於列不可再分,需根據實際情況來定,利於開發就行。**

2、第二範式(2FN): 消除冗餘

非主鍵屬性完全依賴於主鍵(主要針對聯合主鍵–>消除部分依賴)消除冗餘信息。
如果非主屬性只依賴部分主鍵,應該拆分成爲新的表,(一對多 )(就是一類數據個表,不能一個表中什麼數據都放)

例: 用戶表(ID,名字,性別,公司ID, 公司信息) 主鍵(id,公司ID)
分析: 這張表中包含的信息太多,姓名和性別只是依賴id,公司信息依賴的的是公司id,所以這張表是兩類信息放在一張表中,造成信息冗餘,
修改:
建一張用戶表,儲存用戶信息 用戶表(id,姓名,性別 ) 主鍵(id)
建一張公司表,存儲公司信息 公司表(公司ID,公司信息) 主鍵(公司id)
建一張關係表,連接用戶和公司 用戶公司表( ID,公司ID)

3、第三範式(3NF): 消除依賴傳遞

在2NF的基礎之上,屬性不依賴與其他非主屬性(消除依賴傳遞)
解決方案,使用外鍵
例:學生信息表(學生編號,學生姓名,班級編號,班級名稱) 主鍵 (學生編號)
分析;
1、班級名稱字段存在冗餘,因爲班級名稱沒有依賴主鍵學生編號
2、存在依賴傳遞,班級名稱依賴班級編號, 而班級編號又依賴於學生編號
解決方案:
建立學生表 (學生編號,學生姓名,班級編號) 主鍵(學生編號) 外鍵(班級編號)
建立班級表 (班級編號,班級名稱) 主鍵(班級編號)

注意第二範式和第三範式的區別:
第二範式主要是針對聯合主鍵中的部分依賴
第三範式是針對單個主鍵中的依賴傳遞
BCNF/4NF/5NF......

4、應用範式越高,表越多,因此帶來的問題如下:
1、 查詢時需要連續劇多個表,增加查詢複雜性
2.、查詢時需要連接多個表,降低查詢性能
由此:一般只需要滿足三範式即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章