第一正規化 第二正規化及第三正規化的定義與舉例

2021-06-19 07:21:13 字數 2578 閱讀 9891

第一正規化

存在非主屬性對碼的部分依賴關係 r(a,b,c) ab是碼 c是非主屬性 b-->c b決定c c部分依賴於b

第一正規化

定義:如果關係r 中所有屬性的值域都是單純域,那麼關係模式r是第一正規化的

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

1)有主關鍵字

2)主鍵不能為空,

3)主鍵不能重複,

4)欄位不可以再分

例如:studyno   |   name   |   ***   |   contact

20040901      john         male      email:[email protected],phone:222456

20040901      mary         famale    email:[email protected] phone:123455

以上的表就不符合,第一正規化:主鍵重複(實際中資料庫不允許重複的),而且contact欄位可以再分

所以變更為正確的是

studyno   |   name   |   ***   |      email         |      phone

20040901      john         male       [email protected]       222456

20040902     mary          famale      [email protected]      123455

第二正規化

存在非主屬性對碼的傳遞性依賴 r(a,b,c) a是碼 a -->b ,b-->c

定義:如果關係模式r是第一正規化的,而且關係中每乙個非主屬性不部分依賴於主鍵,稱r是第二正規化的。

所以第二正規化的主要任務就是

滿足第一正規化的前提下,消除部分函式依賴。

studyno   |   name   |   ***   |         email         |      phone    |   classno  | classaddress

01                  john        male       [email protected]     222456      200401            a樓2

01                   mary       famale    [email protected]       123455      200402            a樓3

這個表完全滿足於第一正規化,

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

但是,classaddress部分依賴於關鍵字(classno-〉classaddress),

所以要變為兩個表

表一studyno   |   name   |   ***   |      email         |      phone |   classno

01            john         male       [email protected]  222456   200401     

01           mary         famale    [email protected]    123455      200402    

表二classno  | classaddress

200401      a樓2

200402      a樓3

第三正規化

不存在非主屬性對碼的傳遞性依賴以及部分性依賴 ,

studyno   |   name   |   ***   |      email         |      bounslevel   |   bouns

20040901      john         male       [email protected]   優秀                    $1000

20040902     mary         famale    [email protected]       良                         $600

這個完全滿足了第二正規化,但是bounslevel和bouns存在傳遞依賴

更改為:

studyno   |   name   |   ***   |      email         |      bouunsno

20040901      john         male       [email protected]   1

20040902     mary         famale    [email protected]       2

bounsno   |   bounslevel   |   bouns

1                   優秀                $1000

2                 良                   $600

這裡我比較喜歡用bounsno作為主鍵,

基於兩個原因

1)不要用字元作為主鍵。可能有人說:如果我的等級一開始就用數值就代替呢?

2)但是如果等級名稱更改了,不叫 1,2 ,3或優、良,這樣就可以方便更改,所以我一般優先使用與業務無關的字段作為關鍵字。

一般滿足前三個正規化就可以避免資料冗餘。

第一正規化,第二正規化,第三正規化

第一正規化 存在非主屬性對碼的部分依賴關係 r a,b,c ab是碼 c是非主屬性 b c b決定c c部分依賴於b 第一正規化 定義 如果關係r 中所有屬性的值域都是單純域,那麼關係模式r是第一正規化的 那麼符合第一模式的特點就有 1 有主關鍵字 2 主鍵不能為空,3 主鍵不能重複,4 欄位不可以...

第一正規化,第二正規化,第三正規化

第一正規化 存在非主屬性對碼的部分依賴關係 r a,b,c ab是碼 c是非主屬性 b c b決定c c部分依賴於b 第一正規化 定義 如果關係r 中所有屬性的值域都是單純域,那麼關係模式r是第一正規化的 那麼符合第一模式的特點就有 1 有主關鍵字 2 主鍵不能為空,3 主鍵不能重複,4 欄位不可以...

第一正規化,第二正規化,第三正規化

第一正規化 存在非主屬性對碼的部分依賴關係 r a,b,c ab是碼 c是非主屬性 b c b決定c c部分依賴於b 第一正規化 定義 如果關係r 中所有屬性的值域都是單純域,那麼關係模式r是第一正規化的 那麼符合第一模式的特點就有 1 有主關鍵字 2 主鍵不能為空,3 主鍵不能重複,4 欄位不可以...