• <nav id="wkkge"><strong id="wkkge"></strong></nav>
  • <menu id="wkkge"></menu>
  • MySQL數據庫概述及數據準備
    MySQL數據庫常用命令
    MySQL數據庫查看表結構
    MySQL查詢字段
    MySQL條件查詢
    MySQL排序
    MySQL函數
    MySQL分組函數/聚合函數/多行處理函數
    MySQL分組查詢
    MySQL連接查詢
    MySQL子查詢
    MySQL UNION
    MySQL中limit的用法
    MySQL表
    MySQL存儲引擎
    MySQL事務
    MySQL索引
    MySQL視圖
    MySQL DBA命令
    MySQL數據庫設計的三大范式
    MySQL數據庫練習題

    MySQL數據庫設計的三大范式

     

     

    第一范式 

     

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

     

    不符合第一范式的示例

     

    學生編號

    學生姓名

    聯系方式

    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)  fkà學生表的學生編號

    教師編號(PK) fkà教師表的教師編號

    1001

    001

    1002

    002

    1003

    001

    1001

    002

     

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

     

    以上是一種典型的“多對多”的設計

     

     

    第三范式

     

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

     

    學生編號(PK)

    學生姓名

    班級編號

    班級名稱

    1001

    張三

    01

    一年一班

    1002

    李四

    02

    一年二班

    1003

    王五

    03

    一年三班

    1004

    03

    一年三班

     

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

     

    學生信息表

     

    學生編號(PK)

    學生姓名

    班級編號(FK)

    1001

    張三

    01

    1002

    李四

    02

    1003

    王五

    03

    1004

    03

     

    班級信息表

     

    班級編號(PK)

    班級名稱

    01

    一年一班

    02

    一年二班

    03

    一年三班

     

    以上設計是一種典型的一對多的設計,一存儲在一張表中,多存儲在一張表中,在多的那張表中添加外鍵指向一的一方的主鍵。

     

     

    三范式總結

     

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

     

    第二范式:完全依賴,沒有部分依賴;

     

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

     

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

     

    一對一設計,有兩種設計方案:

     

    第一種設計方案:主鍵共享;

     

    第二種設計方案:外鍵唯一。

     

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