天天看點

關系資料庫:了解一二三範式

關系資料庫規範化理論是E. F.Godd在1971年提出的,它按照屬性間的不同依賴程度分為第一範式(1NF)、第二範式(2NF)、第三範式(3NF)、Boyce-Codd範式、第四範式(4NF)和第五範式(5NF)等。

這些範式每一級都是在下一級的基礎上制定的更嚴格的規則,滿足3NF規則的資料庫結構明晰的,可以避免發生插入、删除和更新操作異常,最大限度降低資料庫的備援度,提高了資料庫的通用性和安全性[1]。

一些基本概念。

「實體」可以了解為表,如「學生」是一個表,其中有學号、姓名等屬性。

「字段」即表中的屬性。

「元組」即一張表中的每行記錄。

「主鍵」當一張表中有多個候選碼時,可以標明一個作為主碼,標明的候選碼稱主鍵[2]。

「完整性限制」即在資料插入時按照一定限制條件檢測資料的合法性。

「函數依賴」*

「部分函數依賴」設X,Y是關系R的兩個屬性集合,存在X→Y,若X’是X的真子集,存在X’→Y,則稱Y部分函數依賴于X[3]。

如學生基本資訊表R(學号,身份證号,姓名),假定學号屬性取值唯一。(學号,身份證号)→(姓名),(學号)→(姓名),(身份證号)→(姓名);是以姓名部分函數依賴于(學号,身份證号)。

「完全函數依賴」設X,Y是關系R的兩個屬性集合,X’是X的真子集,存在X→Y,但對每一個X’都有X’!→Y,則稱Y完全函數依賴于X。

如學生基本資訊表R(學号,班級,姓名)假定不同的班級學号有相同,班級内學号不能相同,在R關系中,(學号,班級)→(姓名),但是(學号)→(姓名)不成立,(班級)→(姓名)不成立,是以姓名完全函數依賴與(學号,班級)。

「傳遞函數依賴」設X,Y,Z是關系R中互不相同的屬性集合,存在X→Y(Y !→X),Y→Z,則稱Z傳遞函數依賴于X。

如在關系R(學号,宿舍,費用)中,(學号)→(宿舍),(宿舍)!→(學号),(宿舍)→(費用),(費用)!→(宿舍),是以符合傳遞函數的要求。

範式相關概念解釋[4]。

「第一範式」符合1NF的每個屬性都不可再分割。1NF為關系型資料庫基本要求。

如(學号,學生,政治背景(面貌,時間))非1NF,「政治背景」可再分;(學号,學生,政治面貌,時間)為1NF。

僅僅符合1NF可能導緻資料備援,插入、删除、修改異常(完整性限制導緻)(開銷性大)。

「第二範式」2NF在1NF的基礎之上,使得非主屬性不能部分函數依賴于主鍵。

如(學号,姓名,課程名,成績)中(學号,課程名)為主鍵,可以決定其他屬性,但其中非主屬性「姓名」依賴于「學号」,即存在部分函數依賴。若要變為2NF則需拆分為(學号,姓名)(學号,課程名,成績)。

「第三範式」3NF在2NF的基礎之上,使得表中非主鍵字段不能傳遞依賴于主鍵。實體中不存在除了主鍵外的屬性,可以決定其他屬性的值。

「BC範式」BCNF要求每個屬性都不部分或傳遞依賴于主鍵。

「反範式」犧牲規範化的要求。

規範化的優點即避免了大量的資料備援,節省了存儲空間,保持了資料的一緻性。但範式越高意味着表也就越多,使用者把多個表聯接在一起的花費是巨大的,尤其是當需要連接配接的兩張或者多張表資料非常龐大的時候,表的連接配接嚴重地降低了系統運作性能。

是以有時為了提高資料庫的性能,需要适當采取所謂反範式的設計,即不完全按照範式的理論來設計資料表結構。

[1]鄒瓊 - 淺談資料庫設計中範式的應用

[2]taozitsl - 主鍵和主碼:https://zhidao.baidu.com/question/518622618.html

[3]好兒郎-志在四方 - 函數依賴:https://blog.csdn.net/rl529014/article/details/48391465 

[4]劉慰 - 如何解釋關系資料庫的第一二三範式:https://www.zhihu.com/question/24696366/answer/29189700

繼續閱讀