第一範式,第二範式,第三範式

第一範式

存在非主屬性對碼的部分依賴關係 R(A,B,C) AB是碼 C是非主屬性 B-->C B決定C C部分依賴於B

第一範式

定義:若是關係R 中全部屬性的值域都是單純域,那麼關係模式R是第一範式的

那麼符合第一模式的特色就有

1)有主關鍵字

2)主鍵不能爲空,

3)主鍵不能重複,

4)字段不能夠再分

例如:

 StudyNo   |   Name   |   Sex   |   Contact

20040901      john         Male      Email:kkkk@ee.net,phone:222456

20040901      mary         famale    email:kkk@fff.net phone:123455

以上的表就不符合,第一範式:主鍵重複(實際中數據庫不容許重複的),並且Contact字段能夠再分

因此變動爲正確的是

 StudyNo   |   Name   |   Sex   |      Email         |      Phone

20040901      john         Male       kkkk@ee.net       222456

20040902     mary          famale      kkk@fff.net      123455

 

第二範式

存在非主屬性對碼的傳遞性依賴 R(A,B,C) A是碼 A -->B ,B-->C

定義:若是關係模式R是第一範式的,並且關係中每個非主屬性不部分依賴於主鍵,稱R是第二範式的。

因此第二範式的主要任務就是

知足第一範式的前提下,消除部分函數依賴。

StudyNo   |   Name   |   Sex   |         Email         |      Phone    |   ClassNo  | ClassAddress

01                  john        Male       kkkk@ee.net     222456      200401            A樓2

01                   mary       famale    kkk@fff.net       123455      200402            A樓3

這個表徹底知足於第一範式,

主鍵由StudyNo和ClassNo組成,這樣才能定位到指定行

可是,ClassAddress部分依賴於關鍵字(ClassNo-〉ClassAddress),

因此要變爲兩個表

表一

StudyNo   |   Name   |   Sex   |      Email         |      Phone |   ClassNo

      01            john         Male       kkkk@ee.net  222456   200401     

      01           mary         famale    kkk@fff.net    123455      200402    

表二

 ClassNo  | ClassAddress

 200401      A樓2

 200402      A樓3


第三範式

不存在非主屬性對碼的傳遞性依賴以及部分性依賴 ,
StudyNo   |   Name   |   Sex   |      Email         |      bounsLevel   |   bouns

20040901      john         Male       kkkk@ee.net   優秀                    $1000

20040902     mary         famale    kkk@fff.net       良                         $600

這個徹底知足了第二範式,可是bounsLevel和bouns存在傳遞依賴

更改成:

StudyNo   |   Name   |   Sex   |      Email         |      bouunsNo

20040901      john         Male       kkkk@ee.net   1

20040902     mary         famale    kkk@fff.net       2

bounsNo   |   bounsLevel   |   bouns

1                   優秀                $1000

 2                 良                   $600

這裏我比較喜歡用bounsNo做爲主鍵,

基於兩個緣由

1)不要用字符做爲主鍵。可能有人說:若是個人等級一開始就用數值就代替呢?

2)可是若是等級名稱更改了,不叫 12 ,3或優、良,這樣就能夠方便更改,因此我通常優先使用與業務無關的字段做爲關鍵字。

 

通常知足前三個範式就能夠避免數據冗餘。




數據庫模型設計,第一範式、第二範式、第三範式簡單例子理解
數據庫設計通常知足第三範式就夠了 
第一範式(無重複的列) 定義:數據庫表的每一列都是不可分割的原子數據項,而不能是集合,數組,記錄等非原子數據項。若是實體中的某個屬性有多個值時,必須拆分爲不一樣的屬性 通俗解釋:一個字段只存儲一項信息 eg:班級:高三年1班,應改成2個字段,一個年級、一個班級,才知足第一範式 不知足第一範式
學號 姓名 班級
0001 小紅 高三年1班
 
改爲
學號 姓名 年級 班級
0001 小紅 高三年 1班
 
第二範式(屬性徹底依賴於主鍵) 定義:知足第一範式前提,當存在多個主鍵的時候,纔會發生不符合第二範式的狀況。好比有兩個主鍵,不能存在這樣的屬性,它只依賴於其中一個主鍵,這就是不符合第二範式 通俗解釋:任意一個字段都只依賴表中的同一個字段 eg:好比不符合第二範式
學生證 名稱 學生證號 學生證辦理時間 借書證名稱 借書證號 借書證辦理時間
           
 
改爲2張表以下 學生證表
學生證 學生證號 學生證辦理時間
     
 
借書證表
借書證 借書證號 借書證把你拉時間
     
 

第三範式(屬性不能傳遞依賴於主屬性) 定義:知足第二範式前提,若是某一屬性依賴於其餘非主鍵屬性,而其餘非主鍵屬性又依賴於主鍵,那麼這個屬性就是間接依賴於主鍵,這被稱做傳遞依賴於主屬性。 通俗理解:一張表最多隻存2層同類型信息 eg:爸爸資料表,不知足第三範式
爸爸 兒子 女兒 女兒的小熊 女兒的海綿寶寶
         
 
改爲 爸爸信息表:
爸爸 兒子 女兒
     
 女兒信息表
女兒 女兒的小熊 女兒的海綿寶寶
相關文章
相關標籤/搜索