1. 程式人生 > >資料庫設計 第一正規化 二 三 INF 2NF 3NF 區別 詳解 傳遞依賴

資料庫設計 第一正規化 二 三 INF 2NF 3NF 區別 詳解 傳遞依賴

關於資料庫的設計準則,平時我也就知道怎麼去做。當有人問起我第三正規化的時候,我還真不知道怎麼去表述了。找到這篇解說,覺得概念和例子都講得不錯,收藏起來,以備後用。
I、關係資料庫設計正規化介紹
1.1 第一正規化(1NF)無重複的列
 
      所謂第一正規化(1NF)是指資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。如果出現重複的屬性,就可能需要定義一個新的實體,新的實體由重複的屬性構成,新實體與原實體之間為一對多關係。在第一正規化(1NF)中表的每一行只包含一個例項的資訊。簡而言之,第一正規化就是無重複的列。

說明:在任何一個關係資料庫中,第一正規化(1NF)是對關係模式的基本要求,不滿足第一正規化(1NF)的資料庫就不是關係資料庫。


1.2 第二正規化(2NF)屬性完全依賴於主鍵[消除部分子函式依賴]
 
      第二正規化(2NF)是在第一正規化(1NF)的基礎上建立起來的,即滿足第二正規化(2NF)必須先滿足第一正規化(1NF)。第二正規化(2NF)要求資料庫表中的每個例項或行必須可以被惟一地區分。為實現區分通常需要為表加上一個列,以儲存各個例項的惟一標識。例如員工資訊表中加上了員工編號(emp_id)列,因為每個員工的員工編號是惟一的,因此每個員工可以被惟一區分。這個惟一屬性列被稱為主關鍵字或主鍵、主碼。
        第二正規化(2NF)要求實體的屬性完全依賴於主關鍵字。所謂完全依賴是指不能存在僅依賴主關鍵字一部分的屬性,如果存在,那麼這個屬性和主關鍵字的這一部分應該分離出來形成一個新的實體,新實體與原實體之間是一對多的關係。為實現區分通常需要為表加上一個列,以儲存各個例項的惟一標識。簡而言之,第二正規化就是屬性完全依賴於主鍵。


1.3 第三正規化(3NF)屬性不依賴於其它非主屬性[消除傳遞依賴]

            滿足第三正規化(3NF)必須先滿足第二正規化(2NF)。簡而言之,第三正規化(3NF)要求一個數據庫表中不包含已在其它表中已包含的非主關鍵字資訊。例如,存在一個部門資訊表,其中每個部門有部門編號(dept_id)、部門名稱、部門簡介等資訊。那麼在的員工資訊表中列出部門編號後就不能再將部門名稱、部門簡介等與部門有關的資訊再加入員工資訊表中。如果不存在部門資訊表,則根據第三正規化(3NF)也應該構建它,否則就會有大量的資料冗餘。簡而言之,第三正規化就是屬性不依賴於其它非主屬性。


II、正規化應用例項剖析

        下面以一個學校的學生系統為例分析說明,這幾個正規化的應用。首先第一正規化(1NF):資料庫表中的欄位都是單一屬性的,不可再分。這個單一屬性由基本型別構成,包括整型、實數、字元型、邏輯型、日期型等。在當前的任何關係資料庫管理系統(DBMS)中,傻瓜也不可能做出不符合第一正規化的資料庫,因為這些DBMS不允許你把資料庫表的一列再分成二列或多列。因此,你想在現有的DBMS中設計出不符合第一正規化的資料庫都是不可能的。
首先我們確定一下要設計的內容包括那些。學號、學生姓名、年齡、性別、課程、課程學分、系別、學科成績,系辦地址、系辦電話等資訊。為了簡單我們暫時只考慮這些欄位資訊。我們對於這些資訊,說關心的問題有如下幾個方面。

學生有那些基本資訊
學生選了那些課,成績是什麼
每個課的學分是多少
學生屬於那個系,系的基本資訊是什麼。


2.1 第二正規化(2NF)例項分析
 
      首先我們考慮,把所有這些資訊放到一個表中(學號,學生姓名、年齡、性別、課程、課程學分、系別、學科成績,系辦地址、系辦電話)下面存在如下的依賴關係。
        (學號)→ (姓名, 年齡,性別,系別,系辦地址、系辦電話)
         (課程名稱) → (學分)
        (學號,課程)→ (學科成績)
2.1.1 問題分析
 
      因此不滿足第二正規化的要求,會產生如下問題


        資料冗餘: 同一門課程由n個學生選修,"學分"就重複n-1次;同一個學生選修了m門課程,姓名和年齡就重複了m-1次。

        更新異常:
             1)若調整了某門課程的學分,資料表中所有行的"學分"值都要更新,否則會出現同一門課程學分不同的情況。
            2)假設要開設一門新的課程,暫時還沒有人選修。這樣,由於還沒有"學號"關鍵字,課程名稱和學分也無法記錄入資料庫。

       刪除異常 : 假設一批學生已經完成課程的選修,這些選修記錄就應該從資料庫表中刪除。但是,與此同時,課程名稱和學分資訊也被刪除了。很顯然,這也會導致插入異常。
2.1.2 解決方案
 
      把選課關係表SelectCourse改為如下三個表:
學生:Student(學號,姓名, 年齡,性別,系別,系辦地址、系辦電話);
課程:Course(課程名稱, 學分);
選課關係:SelectCourse(學號, 課程名稱, 成績)。
2.2 第三正規化(3NF)例項分析

        接著看上面的學生表Student(學號,姓名, 年齡,性別,系別,系辦地址、系辦電話),關鍵字為單一關鍵字"學號",因為存在如下決定關係:

       (學號)→ (姓名, 年齡,性別,系別,系辦地址、系辦電話)
        但是還存在下面的決定關係
       (學號) → (所在學院)→(學院地點, 學院電話)
        即存在非關鍵欄位"學院地點"、"學院電話"對關鍵欄位"學號"的傳遞函式依賴。
        它也會存在資料冗餘、更新異常、插入異常和刪除異常的情況。 (資料的更新,刪除異常這裡就不分析了,可以參照2.1.1進行分析)

        根據第三正規化把學生關係表分為如下兩個表就可以滿足第三正規化了:

        學生:(學號, 姓名, 年齡, 性別,系別);
        系別:(系別, 系辦地址、系辦電話)。


總結

       上面的資料庫表就是符合I,II,III正規化的,消除了資料冗餘、更新異常、插入異常和刪除異常。

相關推薦

資料庫設計 第一正規化 INF 2NF 3NF 區別 傳遞依賴

關於資料庫的設計準則,平時我也就知道怎麼去做。當有人問起我第三正規化的時候,我還真不知道怎麼去表述了。找到這篇解說,覺得概念和例子都講得不錯,收藏起來,以備後用。 I、關係資料庫設計正規化介紹 1.1 第一正規化(1NF)無重複的列         所謂第一正規化(1NF

資料庫正規化1NF,2NF,3NF,BCNF

資料庫的設計正規化是資料庫設計所需要滿足的規範,滿足這些規範的資料庫是簡潔的、結構明晰的,同時,不會發生插入(insert)、刪除(delete)和更新(update)操作異常。反之則是亂七八糟,不僅給資料庫的程式設計人員製造麻煩,而且面目可憎,可能儲存了大量不需要的冗餘資

資料庫RDS通用型和獨享型規格區別

阿里雲RDS雲資料庫提供兩種例項規格族,即通用型和獨享型,資料庫吧分享阿里雲RDS通用型和獨享型例項規格族的區別、優勢、適用場景詳解: 通用型和獨享型規格特點及適用場景 規格族 描述 適用場景 通用型 獨享被分配

如何解釋關係資料庫第一第二第正規化

轉載:https://www.zhihu.com/question/24696366/answer/29189700 國內絕大多數院校用的王珊的《資料庫系統概論》這本教材,某些方面並沒有給出很詳細很明確的解釋,與實際應用聯絡不那麼緊密,你有這樣的疑問也是挺正常的。我教《資料庫原理》這門課

資料庫設計三大正規化和五大約束

【三大正規化】 第一正規化(1NF):   資料表中的每一列(欄位),必須是不可拆分的最小單元,也就是確保每一列的原子性。   例如: userInfo: '山東省煙臺市 1318162008' 依照第一正規化必須拆分成        &

轉:資料庫設計三大正規化

http://www.cnblogs.com/linjiqin/archive/2012/04/01/2428695.html 為了建立冗餘較小、結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計一個結構合理的關係型資料庫,必須

資料庫設計三大正規化簡析

為了建立冗餘較小、結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計一個結構合理的關係型資料庫,必須滿足一定的正規化。       在實際開發中最為常見的設計正規化有三

資料庫設計正規化

1.正規化 1.1 1NF-3NF 定義 1NF確保原子性(Atomicity)原子性的粒度、原子性的價值(1正規化:單值,並且把值當做單值用,建議不要把值拆開) 2NF檢查對鍵的完全依賴價值在在於控制資料冗餘和查詢效能 3NF檢查屬性的獨立性 規範化的價值合理規範化的模型可應對需求變更 規範

資料庫設計三大正規化

為了建立冗餘較小、結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計一個結構合理的關係型資料庫,必須滿足一定的正規化。 在實際開發中最為常見的設計正規化有三個: 1.第一正規化(確保每

商城資料庫設計原則()-商品模型的設計

 在電商系統中,商品模型至關重要,是整個電商的核心,下面通過一個簡單的分析,設計一個基礎的商品模型。 商品模型的演化     在以前,那時CMS很流行,最常見的模型是欄目-文章模型。於是做電商的時候,自然就繼承了這種一對多的關係。只是欄目變成了分類,文章變成了商品。商

資料庫正規化解析(1NF 2NF 3NF BCNF)

資料庫設計正規化是關係型資料庫的設計準則。其目的在於通過規劃設計使得資料庫結構合理,儘量減少資料冗餘,消除儲存異常,方便資料的插入、更新和刪除操作。目前常用正規化包括1NF(第一正規化)、2NF(第二正規化)、3NF(第三正規化)和BCNF(鮑依斯-科得正規化)。 1N

關係型資料庫設計三大正規化

1.何為資料庫正規化? 設計關係資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同 規範要求被稱為不同的正規化,各種正規化呈遞次規範,越高的正規化資料庫冗餘越小。 目前關係資料庫有六種正規化:第一正規化(1NF)、第二正規化(2NF)、第

資料庫設計正規化與反正規化

我們在設計資料庫的過程中,往往要用到正規化或反正規化的設計模式。熟悉地掌握正規化與反正規化的要領,學會在實際開發中恰當地混合使用正規化與反正規化,才能設計出結構合理,執行高效的資料庫。 下面就以一個經典的例子進行講述正規化與反正規化: 職工-部門表: 部門-部門

層交換機與層交換機區別

交換機VLAN我們習慣說,在二層網絡環境中相同vlan之間可以通信,不同vlan之間不可以通信,如果想通信必須借助三層設備,所以說三層交換機必須要做的事情是路由轉發,但是二、三層交換機具體有什麽區別呢? 二層交換機工作於OSI模型的第2層(數據鏈路層),故而稱為二層交換機。 二層交換技術發展比較成熟,二層交換

叉樹的建立及種遍歷方式

建立一個如下圖所示的二叉樹 程式如下: #include<stdio.h> #include<stdlib.h> //定義二叉樹 typedef struct _tree_node { char date; struct tree_node

乾貨丨AI語音事:你需要了這些AI 語音對話技術

機器學習以及自然語言處理技術的進步,開啟了人與人工智慧進行語音互動的可能,人們透過對話的方式獲取

深入理解JAVA I/O系列:字符流

buffer 情況 二進制文件 感到 復制代碼 使用範圍 轉換 fileread 方式 字符流為何存在 既然字節流提供了能夠處理任何類型的輸入/輸出操作的功能,那為什麽還要存在字符流呢?容我慢慢道來,字節流不能直接操作Unicode字符,因為一個字符有兩個字節,字節流一次只

java加密算法入門()-非對稱加密

共享數據 net clas 實例 查看 安全性 自己的 generator mir 1、簡單介紹 這幾天一直在看非對稱的加密,相比之前的兩篇內容,這次看了兩倍多的時間還雲裏霧裏的,所以這篇文章相對之前的兩篇,概念性的東西多了些,另外是代碼的每一步我都做了介紹,方便自己以後

PHP生成頁面維碼解決辦法?

web 以及 使用 evel 即使 != sca matrix 為什麽 隨著科技的進步,二維碼應用領域越來越廣泛,今天我給大家分享下如何使用PHP生成二維碼,以及如何生成中間帶LOGO圖像的二維碼。 具體工具: phpqrcode.php內庫;這個文件可以到網上下載,如果沒

Vmware虛擬機種網絡模式

lin proto 為我 奇怪 ifcfg dhcp服務器 config 啟動系統 ip設置 目錄(?)[+] 原文來自http://note.youdao.com/share/web/file.html?id=236896997b6ffbaa8e0d92ea