• <nav id="wkkge"><strong id="wkkge"></strong></nav>
  • <menu id="wkkge"></menu>
  • Oracle教程
    Oracle練習題

    Oracle數據庫設計的三大范式

     

     

    第一范式

     

    數據庫表中不能出現重復記錄,每個字段是原子性的不能再分。

     

    不符合第一范式的示例。

     

    學生編號

    學生姓名

    聯系方式

    1001

    張三

    zs@gmail.com,1359999999

    1002

    李四

    ls@gmail.com,13699999999

    1001

    王五

    ww@163.net,13488888888

     

    存在問題:

     

    ● 最后一條記錄和第一條重復(不唯一,沒有主鍵)。

     

    ● 聯系方式字段可以再分,不是原子性的。

     

    學生編號(pk)

    學生姓名

    email

    聯系電話

    1001

    張三

    zs@gmail.com

    1359999999

    1002

    李四

    ls@gmail.com

    13699999999

    1003

    王五

    ww@163.net

    13488888888

     

    關于第一范式,每一行必須唯一,也就是每個表必須有主鍵,這是我們數據庫設計的最基本要求,主要通常采用數值型或定長字符串表示,關于列不可再分,應該根據具體的情況來決定。如聯系方式,為了開發上的便利行可能就采用一個字段了。

     

     

    第二范式

     

    第二范式是建立在第一范式基礎上的,另外要求所有非主鍵字段完全依賴主鍵,不能產生部分依賴。

     

    示例:

     

    學生編號

    學生姓名

    教師編號

    教師姓名

    1001

    張三

    001

    王老師

    1002

    李四

    002

    趙老師

    1003

    王五

    001

    王老師

    1001

    張三

    002

    趙老師

     

    確定主鍵:

     

    學生編號(PK)

    教師編號(PK)

    學生姓名

    教師姓名

    1001

    001

    張三

    王老師

    1002

    002

    李四

    趙老師

    1003

    001

    王五

    王老師

    1001

    002

    張三

    趙老師

     

    以上雖然確定了主鍵,但此表會出現大量的冗余,主要涉及到的冗余字段為“學生姓名”和“教師姓名”,出現冗余的原因在于,學生姓名部分依賴了主鍵的一個字段學生編號,而沒有依賴教師編號,而教師姓名部門依賴了主鍵的一個字段教師編號,這就是第二范式部分依賴。

     

    解決方案如下:

     

    學生信息表

     

    學生編號(PK)

    學生姓名

    1001

    張三

    1002

    李四

    1003

    王五

     

    教師信息表

     

    教師編號(PK)

    教師姓名

    001

    王老師

    002

    趙老師

     

    教師和學生的關系表

     

    學生編號(PK)

    教師編號(PK)

    1001

    001

    1002

    002

    1003

    001

    1001

    002

     

    如果一個表是單一主鍵,那么它就復合第二范式,部分依賴和主鍵有關系。

     

     

    第三范式

     

    建立在第二范式基礎上的,非主鍵字段不能傳遞依賴于主鍵字段。

     

    學生編號(PK)

    學生姓名

    班級編號

    班級名稱

    1001

    張三

    01

    一年一班

    1002

    李四

    02

    一年二班

    1003

    王五

    03

    一年三班

     

    從上表可以看出,班級名稱字段存在冗余,因為班級名稱字段沒有直接依賴于主鍵,班級名稱字段依賴于班級編號,班級編號依賴于學生編號,那么這就是傳遞依賴,解決的辦法是將冗余字段單獨拿出來建立表,如:

     

    學生信息表

     

    學生編號(PK)

    學生姓名

    班級編號

    1001

    張三

    01

    1002

    李四

    02

    1003

    王五

    03

     

    班級信息表

     

    班級編號

    班級名稱

    01

    一年一班

    02

    一年二班

    03

    一年三班

     

     

    三范式總結

     

    第一范式:有主鍵,具有原子性,字段不可分割。

     

    第二范式:完全依賴,沒有部分依賴(聯合主鍵)。

     

    第三范式:沒有傳遞依賴。

     

    數據庫設計盡量遵循三范式,但是還是根據實際情況進行取舍,有時可能會那冗余換速度,最終用目的要滿足客戶需求。

     

    全部教程
  • <nav id="wkkge"><strong id="wkkge"></strong></nav>
  • <menu id="wkkge"></menu>
  • 面对面棋牌游戏