1. 程式人生 > >第一正規化第二正規化第三正規化

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

關係資料庫中的關係必須滿足一定的要求。滿足不同程度要求的為不同正規化。資料庫的設計正規化是資料庫設計所需要滿足的規範。只有理解資料庫的設計正規化,才能設計出高效率、優雅的資料庫,否則可能會設計出錯誤的資料庫.

目前,主要有六種正規化:第一正規化、第二正規化、第三正規化、BC正規化、第四正規化和第五正規化。滿足最低要求的叫第一正規化,簡稱1NF。在第一正規化基礎上進一步滿足一些要求的為第二正規化,簡稱2NF。其餘依此類推。

正規化可以避免資料冗餘,減少資料庫的空間,減輕維護資料完整性的麻煩,但是操作困難,因為需要聯絡多個表才能得到所需要資料,而且正規化越高效能就會越差。要權衡是否使用更高正規化是比較麻煩的,一般在專案中,用得最多的也就是第三正規化,我認為使用到第三正規化也就足夠了,效能好而且方便管理資料。

函式依賴,如果一個表中某一個欄位Y的值是由另外一個欄位或一組欄位X的值來確定的,就稱為Y函式依賴於X。 


第一正規化(1NF)
定義:如果關係模式R的每個關係r的屬性都是不可分的資料項,那麼就稱R是第一正規化的模式。
簡單的說,每一個屬性都是原子項,不可分割。
1NF是關係模式應具備的最起碼的條件,如果資料庫設計不能滿足第一正規化,就不稱為關係型資料庫。關係資料庫設計研究的關係規範化是在1NF之上進行的。

例如(學生資訊表)
學生編號  姓名  性別  聯絡方式
20080901  張三  男   email:[email protected],phone:88886666
20080902  李四  女   

email:[email protected],phone:66668888

以上的表就不符合,第一正規化:聯絡方式欄位可以再分,所以變更為正確的是:

學生編號  姓名  性別  電子郵件   電話
20080901  張三  男   [email protected]88886666
20080902  李四  女   [email protected]66668888

第二正規化(2NF
定義:如果關係模式R1NF,且每個非主屬性完全函式依賴於候選鍵,那麼就稱R是第二正規化。
簡單的說,第二正規化要滿足以下的條件:首先要滿足第一正規化,其次每個非主屬性要完全函式依賴與候選鍵,或者是主鍵。也就是說,每個非主屬性是由整個主鍵函式決定的,而不能由主鍵的一部分來決定。

例如(
學生選課表):
學生    課程   教師    教師職稱  教材         教室  上課時間
李四    Spring  張老師   java講師  《Spring深入淺出》  301 08:00
張三    Struts  楊老師   java講師  《Struts in Action》 302 13:30

這裡通過(學生,課程)可以確定教師、教師職稱,教材,教室和上課時間,所以可以把(學生,課程)作為主鍵。但是,教材並不完全依賴於(學生,課程),只拿出課程就可以確定教材,因為一個課程,一定指定了某個教材。這就叫不完全依賴,或者部分依賴。出現這種情況,就不滿足第二正規化。

修改後,選課表:
學生    課程   教師    教師職稱  教室  上課時間
李四    Spring  張老師   java講師  301 08:00
張三    Struts  楊老師   java講師  302 13:30

課程表:
課程   教材        
Spring  《Spring深入淺出》 
Struts  《Struts in Action

所以,第二正規化可以說是消除部分依賴。第二正規化可以減少插入異常,刪除異常和修改異常。

第三正規化(3NF
定義:如果關係模式R2NF,且關係模式RUF)中的所有非主屬性對任何候選關鍵字都不存在傳遞依賴,則稱關係R是屬於第三正規化。
簡單的說,第三正規化要滿足以下的條件:首先要滿足第二正規化,其次非主屬性之間不存在函式依賴。由於滿足了第二正規化,表示每個非主屬性都函式依賴於主鍵。如果非主屬性之間存在了函式依賴,就會存在傳遞依賴,這樣就不滿足第三正規化。

上例中修改後的選課表中,一個教師能確定一個教師職稱。這樣,教師依賴於(學生,課程),而教師職稱又依賴於教師,這叫傳遞依賴。第三正規化就是要消除傳遞依賴。

修改後,選課表:

學生    課程   教師    教室  上課時間
李四    Spring  張老師   301 08:00
張三    Struts  楊老師   302 13:30

教師表:
教師    教師職稱
張老師   java講師
楊老師   java講師

這樣,新教師的職稱在沒被選課的時候也有地方存了,沒人選這個教師的課的時候教師的職稱也不至於被刪除,修改教師職稱時只修改教師表就可以了。

簡單的說,
第一正規化就是原子性,欄位不可再分割;
第二正規化就是完全依賴,沒有部分依賴;
第三正規化就是沒有傳遞依賴。

相關推薦

第一第二正規化之間的理解和比較

第一第二第三正規化總結: 第一正規化 屬性不可分割(無重複的列) 第二正規化 非主屬性依賴主屬性 第三正規化 非主屬性不存在傳遞依賴 舉例說明: 例項講解: 第一正規化 如果一個關係模式R的所有屬性都是不可分的基本資料項,則R∈1NF(即R符合第一正規化)

MySQL (4) 第一正規化 第二正規化 正規化 BC正規化

第一正規化 第一正規化:所有屬性都是不可分割的原子值。  也就是每個屬性都是不可再分的。  例如下圖就不符合第一正規化的要求   實際上,1NF是所有關係型資料庫的最基本要求,你在關係型資料庫管理系統(RDBMS),例如SQL Server,Oracle,

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

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

第一正規化 第二正規化 正規化 BC正規化

第一正規化 第一正規化:所有屬性都是不可分割的原子值。  也就是每個屬性都是不可再分的。  例如下圖就不符合第一正規化的要求    實際上,1NF是所有關係型資料庫的最基本要求,你在關係型資料庫管理系統(RDBMS),例如SQL Server,Oracle,MySQL中建

第一正規化第二正規化正規化的理解

第一正規化(1NF): 1、每個屬性不可再分。 2、相近或一樣的屬性要儘量合併在一起確保不會產生冗餘資料。 上表如果要求把省/市單獨劃分出來,則不符合1NF。 上表產生資料冗餘。 2、第二正規化(2NF):非主屬性對關鍵字完全依賴,消除部分依賴。 比如有選

第一正規化第二正規化正規化

關係資料庫中的關係必須滿足一定的要求。滿足不同程度要求的為不同正規化。資料庫的設計正規化是資料庫設計所需要滿足的規範。只有理解資料庫的設計正規化,才能設計出高效率、優雅的資料庫,否則可能會設計出錯誤的資料庫. 目前,主要有六種正規化:第一正規化、第二正規化、第三正規化、BC

資料庫-第一正規化第二正規化正規化、BC正規化正規化簡析

在設計與操作維護資料庫時,最關鍵的問題就是要確保資料能夠正確地分佈到資料庫的表中。使用正確的資料結構,不僅有助於對資料庫進行相應的存取操作,還可以極大地簡化應用程式中的其他內容(查詢、窗體、報表、程式碼等),按照“資料庫規範化”對錶進行設計,其目的就是減少資料庫中的資料冗餘

資料庫的正規化第一正規化第二正規化正規化、BC正規化正規化

簡介 資料庫正規化在資料庫設計中的地位一直很曖昧,教科書中對於資料庫正規化倒是都給出了學術性的定義,但實際應用中正規化的應用卻不甚樂觀,這篇文章會用簡單的語言和一個簡單的資料庫DEMO將一個不符合正規化的資料庫一步步從第一正規化實現到第四正規化。 關

資料庫模型設計,第一正規化第二正規化正規化簡單例子理解

資料庫設計一般滿足第三正規化就夠了 第一正規化(無重複的列) 定義:資料庫表的每一列都是不可分割的原子資料項,而不能是集合,陣列,記錄等非原子資料項。如果實體中的某個屬性有多個值時,必須拆分為不同的屬性 通俗解釋:一個欄位只儲存一項資訊 eg:班級:高三年1班,應改為2個欄位,一個年級、一個班級,才滿足第一

什麼是正規化第一正規化第二正規化正規化的區別?

參考連結: https://www.zhihu.com/question/24696366 總結: 正規化的含義: 符合某種級別的關係模式的集合。表示一個關係內部的各屬性之間聯絡的合理化程度。可以理解為:資料表的表結構所符合的某種設計標準的級別。

Third Normal Form(正規化)

Third Normal Form(第三正規化) 如果一個relation滿足第三正規化,那麼它: 滿足第二正規化 不存在transitive dependency(傳遞依賴) 在前面將 第二正規化的時候,我們建了3張表,回顧一下。 Student

閒話資料庫(二)---正規化/BCNF

第三正規化:若關係模式R(U,F)中不存在這樣的碼X,屬性組Y以及非主屬性Z(Z不是Y的子集)使得Y函式依賴於X並且X不函式依賴於Y,Z函式依賴於Y成立,則關係模式R屬於3NF。 相當的繞口,並且不清

請根據下面需求,按照資料庫設計步驟繪製符合正規化的E-R圖和資料庫模型圖

題目要求如下: 1.圖書館藏了多種書籍,每種書籍有一本或一本以上的館藏量 2.每個讀者可以一次借閱多本書籍,但每種書籍一次只能借一本 3.每次每本書籍的借閱時限為1個月 4.如果讀者逾期不交,或丟失,或損毀借閱的書籍,則必須按照規定繳納罰金

bootstrap-select外掛多選,選擇一個option排在第一位,選擇個option排在第二位,選擇第二個option排在

最近專案有個奇葩的需求,要求下拉框多選,選擇option的順序要和點選選擇option的順序一致,這就麻煩了,所以只修改原始碼了,所以找到bootstrap-select.js這段程式碼,if (!title) { title = this.options.title

北大青鳥第二章SQL編程 使用變量和if-else

score blog 時間 version weight 姓名 學生 查詢語句 sco 1 --聲明變量 2 declare @age int 3 declare @name varchar(20) 4 5 6 --賦值(常量值) 7 set @age=

Linux學習筆記第二次課(1月31日)

log 用戶 技術 文件權限 筆記 不可 命令 roc 文件 2.14 文件和目錄權限chmodr,read可讀;w,write可寫;x,可執行;r讀對應數字4,w對應數字2,x對應數字1;rwx=7,rw-=6,--x=1;rw-r--r--=644;chmod,chan

第二

循環 tony end eve class body pen 列表 eric 3、寫代碼,有如下列表,按照要求實現每一個功能 li=[‘alex‘, ‘eric‘, ‘rain‘] 計算列表長度並輸出 列表中追加元素“seven”,並輸出添加後的列表 請在列表的第1個位置

python第二階段

sel val 遞歸函數 數據傳遞 二分法查找 func key ret -- 函數對象 一:函數對象:函數是第一類對象,即函數可以當作數據傳遞1 可以被引用2 可以當作參數傳遞3 返回值可以是函數3 可以當作容器類型的元素 應用:def select(sql):print

Scrum立會報告+燃盡圖(Beta階段第二次)

修復 ref 大學 log 分鐘 添加 結束 font 背景 此作業要求參見:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2411 項目地址:https://coding.net/u/wuyy694/p/pin

Scrum立會報告+燃盡圖(Beta階段第二次)

此作業要求參見:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2411 專案地址:https://coding.net/u/wuyy694/p/pinball 一、小組介紹 組名:楊老師粉絲群 組長:喬靜玉 組員:吳奕瑤、公冶令鑫、楊磊、