淺談對數據庫範式的理解

  數據庫的設計範式是數據庫設計所須要知足的規範,若知足的數據庫的規範,則該數據庫是簡潔的、結構明晰的,同時不會發生插入、刪除、跟新操做異常。不然數據庫的設計是不夠合理的,會給編程人員帶來不少麻煩,也可能會形成大量的數據冗餘。下面談一談我最近對數據庫範式的理解。數據庫

1.1第一範式(1NF)確保每列保持原子性

  我理解的第一範式就是:數據表中的每一列都是不可再分割的了,就是同一列不能有多個值,也不能有重複的列。例編程

表1.1——不符合1NF(栗子)
姓名 電話
張三 12345678910;87946513216

這個例子就是電話這一列出現了兩個電話號,這是不符合1NF的,咱們能夠這樣讓他只添加一個電話號,或者再加一行。即數據庫設計

表1.2——符合1NF(栗子)
姓名 電話
張三 12345678910
張三 87946513216

在任何一個關係數據庫中,第一範式(1NF)是對關係模式的基本要求,不知足第一範式(1NF)的數據庫就不是關係數據庫。spa

1.2第二範式(2NF)屬性徹底依賴於主鍵

  第二範式是在第一範式的基礎上創建起來,即知足第二範式必須先知足第一範式。第二範式要求數據表中的每行的內容必須能夠被惟一區分。簡單來講就是每個實例(行)都要有一個惟一標識(主鍵)。設計

  例:現有一張選課關係表,字段包括(學號,姓名,年齡,課程名稱,學分,成績),關鍵字(主鍵)爲(學號,課程名稱),io

存在:(學號,課程名稱)——>(姓名,年齡,學分,成績)table

但這張表並非2NF,由於咱們能夠看到他應存在:課程名稱)——>(學分)和(學號)——>(姓名,年齡)基礎

因此正確的2NF應該是將這張表拆分紅三張表,即:學生表(學號,姓名,年齡),課程表(課程名稱,學分),成績表(學號,課程名稱,成績)數據

1.3第三範式(3NF)屬性不依賴於其餘非主屬性

  知足第三範式必須先知足第二範式,第三範式要求一個數據表中不包含已在其餘表中已包含的非主鍵信息。簡單來講就是,一張數據表只能包含其餘數據表的主鍵字段。例如現有一張部門表(部門ID,部門名稱,地址),還有用戶表(用戶ID,用戶姓名,部門ID,部門名稱,地址)。這是不知足三範式的,由於在用戶表中已經存在了「部門ID」,就不須要再寫「部門名稱」和「地址」了。若是咱們須要「部門名稱」和「地址」的話,咱們能夠這樣(用戶ID)——>(部門ID)——>(部門名稱,地址)。因此,正確的三範式應該是,部門表(部門ID,部門名稱,地址),還有用戶表(用戶ID,用戶姓名,部門ID)異常

相關文章
相關標籤/搜索