程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> 數據庫中的幾種規范

數據庫中的幾種規范

編輯:關於MYSQL數據庫

1、數據庫命名規范
一個項目組內所有設計數據庫的程序員應當共同遵守統一的“數據庫命名規范”。在本書的附錄B中,我們提供了一個“數據庫命名規范”實例,供大家參考。
2、數據庫設計范式
關系數據庫設計之時是要遵守一定的規則的。尤其是數據庫設計范式,接下來簡單介紹1NF(第一范式),2NF(第二范式),3NF(第三范式)和BCNF,另外還有第四范式和第五范式。在你設計數據庫時,若能符合這幾個范式,你就是數據庫設計的高手。
(1)第一范式(1NF)
數據庫表中的字段都是單一屬性的,不可再分。這個單一屬性由基本類型構成,包括整型、實數、字符型、邏輯型、日期型等。
例如,電話的字段就可能不符合第一正規化,因為每個人可能有一個以上的電話需要記錄,這時最簡單的做法就是將字段增加,不要用電話當字段名稱,用家裡電話、手機、辦公室電話、分機號碼、宿捨電話等。

(2)第二范式(2NF)
規則是符合第一范式,而且沒有部分主鍵功能決定其他屬性的現象,也就是主鍵之外的其他屬性都完全的功能相依於主鍵。
假定選課關系表為SelectCourse(學號,姓名,年齡,課程名稱,成績,學分),關鍵字為組合關鍵字(學號,課程名稱),因為存在如下決定關系:(學號,課程名稱)→(姓名,年齡,成績,學分)。
這個數據庫表不滿足第二范式,因為存在如下決定關系:
(課程名稱)→(學分),即知道課程,就可以知道該課程的學分。
(學號)→(姓名,年齡),即知道了學號,就可以知道該學生的姓名和年齡。
① 數據冗余
同一門課程由n個學生選修,“學分”就重復n?1次;同一個學生選修了m門課程,姓名和年齡就重復了m?1次。
② 更新異常
若調整了某門課程的學分,數據表中所有行的“學分”值都要更新,否則會出現同一門課程學分不同的情況。
③ 插入異常
假設要開設一門新的課程,暫時還沒有人選修。這樣,由於還沒有“學號”關鍵字,課程名稱和學分也無法記錄入數據庫。
④ 刪除異常
假設一批學生已經完成課程的選修,這些選修記錄就應該從數據庫表中刪除。但是,與此同時,課程名稱和學分信息也被刪除了。很顯然,這也會導致插入異常。
把選課關系表SelectCourse改為如下三個表。
學生:Student(學號,姓名,年齡)
課程:Course(課程名稱,學分)
選課關系:SelectCourse(學號,課程名稱,成績)
這樣的數據庫表是符合第二范式的,消除了數據冗余、更新異常、插入異常和刪除異常。
(3)第三范式(3NF)
在第二范式的基礎上,數據表中如果不存在非關鍵字段對任一候選關鍵字段的傳遞函數依賴則符合第三范式。
所謂傳遞函數依賴,指的是如果存在“A→B→C”的決定關系,則C傳遞函數依賴於A。因此,滿足第三范式的數據庫表應該不存在如下依賴關系:關鍵字段→非關鍵字段x→非關鍵字段y。
假定學生關系表為Student(學號,姓名,年齡,所在學院,學院地點,學院電話),關鍵字為單一關鍵字“學號”,因為存在如下決定關系:
(學號)→(姓名,年齡,所在學院,學院地點,學院電話)
這個數據庫是符合2NF的,但是不符合3NF,因為存在如下決定關系:
(學號)→(所在學院)→(學院地點,學院電話)
把學生關系表分為如下兩個表。
學生:(學號,姓名,年齡,所在學院);
學院:(學院,地點,電話)。
(4)BCNF范式
BCNF范式(Boyce/Codd Normal Form),是由R.F.Boycy和E.F. Codd共同提出的,可以算成是第三正則化的補充,規則是符合第三正則化原則,並且沒有非主鍵屬性可以功能性決定部分主鍵的現象。
假設有一個表R,其中的屬性有A,B,C,D,E,以A和B為復合主鍵,R={A,B,C,D,E},如果存在有非主鍵屬性,比如說C可以功能性決定B,C→B,而B是主鍵的一部分,這時第三正則化是沒有辦法分辨出來這種錯誤的,所以有BCNF正則化規則來把關,同樣地,BCNF正則化的方法也是將原來的表拆開,成立一個新的關聯表R1來裝C→B,R1={C,B},但原來的表R還是以(A,B)為復合主鍵,以B為外鍵關聯到新的表去,以保留原有的信息。
R={A,B,D,E},R1={C,B},R.B=R1.B

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved