資料庫正規化解析(1NF 2NF 3NF BCNF)
資料庫設計正規化是關係型資料庫的設計準則。其目的在於通過規劃設計使得資料庫結構合理,儘量減少資料冗餘,消除儲存異常,方便資料的插入、更新和刪除操作。目前常用正規化包括1NF(第一正規化)、2NF(第二正規化)、3NF(第三正規化)和BCNF(鮑依斯-科得正規化)。
1NF 第一正規化
如果一個關係模式R的所有屬性都是不可分的基本資料項,則R∈1NF。
也可表述為:資料庫表中的欄位都是單一屬性的,不可再分。
比如“地址”屬性應該拆分為“城市”、“區縣”、“具體地址”便於使用。
2NF 第二正規化
若關係模式R∈1NF,並且每一個非主屬性都完全函式依賴於R的碼(多個主屬性欄位的組合),則R∈2NF
也可表述為:資料庫表中不存在非關鍵欄位對任一候選關鍵欄位的部分函式依賴(部分函式依賴指的是存在組合關鍵字中的某些欄位決定非關鍵欄位的情況),也即所有非關鍵欄位都完全依賴於任意一組候選關鍵字。
比如選課關係表(學號, 姓名, 年齡, 課程名稱, 成績, 學分),碼為組合關鍵字(學號, 課程名稱),因為存在如下決定關係:
這個資料庫表不滿足第二正規化,因為存在如下決定關係:(課程名稱) → (學分) 和 (學號) → (姓名, 年齡),即存在碼中的部分欄位決定非關鍵字的情況,所以不符合2NF。應修改為一以下三個表:
學生:Student(學號, 姓名, 年齡);
課程:Course(課程名稱, 學分);
選課關係:SelectCourse(學號, 課程名稱, 成績)。
3NF 第三正規化
關係模式R<U,F> 中若不存在這樣的碼X、屬性組Y及非主屬性Z(Z Y), 使得X→Y,Y→Z,成立,則稱R<U,F> ∈ 3NF。
也可表述為:在第二正規化的基礎上,資料表中如果不存在非關鍵欄位對任一候選關鍵欄位的傳遞函式依賴則符合第三正規化。所謂傳遞函式依賴,指的是如果存在"A → B → C"的決定關係,則C傳遞函式依賴於A。因此,滿足第三正規化的資料庫表應該不存在如下依賴關係:關鍵欄位 → 非關鍵欄位x → 非關鍵欄位y
比如:學生關係表為Student(學號, 姓名, 年齡, 所在學院, 學院地點, 學院電話)關鍵欄位為“學號”,存在以下決定關係(學號) → (姓名, 年齡, 所在學院, 學院地點, 學院電話),符合2NF;但存在(學號) → (所在學院) → (學院地點, 學院電話),不符合3NF。應改為:
學生:(學號, 姓名, 年齡, 所在學院);
學院:(學院, 地點, 電話)。
BCNF 鮑依斯-科得正規化
設關係模式R<U,F>∈1NF,如果對於R的每個函式依賴X→Y,若Y不屬於X,則X必含有候選碼,那麼R∈BCNF。
也可表述為:在第三正規化的基礎上,資料庫表中如果不存在任何欄位對任一候選關鍵欄位的傳遞函式依賴則符合第三正規化。
比如:倉庫管理關係表為(倉庫ID, 儲存物品ID, 管理員ID, 數量),且有一個管理員只在一個倉庫工作;一個倉庫可以儲存多種物品。這個資料庫表中存在如下決定關係:
(倉庫ID, 儲存物品ID) →(管理員ID, 數量)
(管理員ID, 儲存物品ID) → (倉庫ID, 數量)
所以,(倉庫ID, 儲存物品ID)和(管理員ID, 儲存物品ID)都是表的候選關鍵字,表中的唯一非關鍵欄位為數量,它是符合第三正規化的。但是,由於存在如下決定關係:
(倉庫ID) → (管理員ID)
(管理員ID) → (倉庫ID)
即存在關鍵欄位決定關鍵欄位的情況,所以其不符合BCNF正規化。資料表應修改為:
倉庫管理:(倉庫ID, 管理員ID);
倉庫:(倉庫ID, 儲存物品ID, 數量)。
四種範氏之間的關係
每一個範氏都是進一步約束的關係,如下圖:
參考:
from: http://witmax.cn/database-normal-form.html相關推薦
資料庫正規化解析(1NF 2NF 3NF BCNF)
資料庫設計正規化是關係型資料庫的設計準則。其目的在於通過規劃設計使得資料庫結構合理,儘量減少資料冗餘,消除儲存異常,方便資料的插入、更新和刪除操作。目前常用正規化包括1NF(第一正規化)、2NF(第二正規化)、3NF(第三正規化)和BCNF(鮑依斯-科得正規化)。 1N
資料庫基礎(5)1NF,2NF,3NF,BCNF 四大正規化的定義和判別
正規化很重要呀,我們關係資料庫的設計都要滿足正規化關係 這裡總結一下1NF,2NF,3NF和BCNF 1.第一正規化(1NF) 定義 (1NF, Normal Form) 如果一個關係模式R中的每個屬性A的域值都是原子的,即屬性值是不可再分的,則關係模式R屬於第一正規
資料庫正規化1NF,2NF,3NF,BCNF詳解
資料庫的設計正規化是資料庫設計所需要滿足的規範,滿足這些規範的資料庫是簡潔的、結構明晰的,同時,不會發生插入(insert)、刪除(delete)和更新(update)操作異常。反之則是亂七八糟,不僅給資料庫的程式設計人員製造麻煩,而且面目可憎,可能儲存了大量不需要的冗餘資
資料庫正規化1NF 2NF 3NF BCNF(例項)通俗易懂的講解
正規化應用 我們來逐步搞定一個論壇的資料庫,有如下資訊: (1) 使用者:使用者名稱,email,主頁,電話,聯絡地址 (2) 帖子:發帖標題,發帖內容,回覆標題,回覆內容 第一次我們將資料庫設計為僅僅存在表: 使用者名稱 email 主頁 電話 聯絡地址 發
數據庫範式1NF 2NF 3NF BCNF(實例)通俗易懂的講解
建立 依賴 bsp 不一定 規則 一次 數學 管理系統 -s 【轉】 數據庫範式1NF 2NF 3NF BCNF(實例)通俗易懂的講解 本文對大多數初學數據庫原理的同學絕對是個大福利,哈哈,完完整整的看完此篇博文一定能夠清晰地理解數據庫的四大範式。 不懂者
1NF 2NF 3NF BCNF
http://jacki6.iteye.com/blog/774866 資料庫的設計正規化是資料庫設計所需要滿足的規範,滿足這些規範的資料庫是簡潔的、結構明晰的,同時,不會發生插入( insert )、刪除( delete )和更新( update )操作異常。反之則
資料庫設計 第一正規化 二 三 INF 2NF 3NF 區別 詳解 傳遞依賴
關於資料庫的設計準則,平時我也就知道怎麼去做。當有人問起我第三正規化的時候,我還真不知道怎麼去表述了。找到這篇解說,覺得概念和例子都講得不錯,收藏起來,以備後用。 I、關係資料庫設計正規化介紹 1.1 第一正規化(1NF)無重複的列 所謂第一正規化(1NF
資料庫正規化理解(針對使用最多一、二、三正規化)
1.第一正規化(確保每列保持原子性) 第一正規化是最基本的正規化。如果資料庫表中的所有欄位值都是不可分解的原子值,就說明該資料庫表滿足了第一正規化。 第一正規化的合理遵循需要根據系統的實際需求來定。比如某些資料庫系統中需要用到“地址”這個屬性,本來直接將“地址”屬性設計成一個數據庫表
資料庫查詢語句詳細例項解析(以mysql為例)
MySQL查詢語句 最近做實驗時寫到了有關查詢語句的詳細使用案例。藉此案例記錄一下包括關聯查詢,子查詢,巢狀查詢在內的查詢語句的用法。 本案例涉及的表如下: student: studnet表儲存了學生的基本資訊,其中各欄位含義如下: Sno:學生學號 Sname:學生姓名 Ssex
Nativecat連線linux伺服器的mysql資料庫問題解析(2003-Can’t connect to mysql server on ‘localhost‘(10038))
今天配置Linux系統安裝和操作Mysql時,Nativecat無法連線Mysql資料庫,折騰了好久終於解決該問題,此時分享出來希望可以幫助以後同樣遇到該問題的同學一點幫助,不至於走彎路。首先丟擲問題 連線mysql資料庫時遇到“2003-Can’t connect to m
VMware-Linux(RedHat 6.7)增加資料庫使用空間(Linux&Linux LVM)
資料庫裝著裝著發現根目錄空間不夠了: 好在是虛擬機器,可以彈性增加虛擬磁碟。所以增加一塊新的分割槽掛載/u01專門用來裝資料庫。 1.VMware workstation上增加磁碟 2.重啟,讓系統識別新加進來的硬碟 或者,如果不想重啟,就按如下操作: 33個匯流排全
某大廠面試題與解析(歡迎糾錯,優化)
簡答題 1.css3特性中的transform:translateZ(0)有什麼作用 答案: GPU加速,優化前端效能 2.列舉三種禁止瀏覽器快取的頭欄位,並寫出響應的設定值 Expires:告訴瀏覽器把回送的資源快取多長時間 -1或0則是不快取 簡要:新增Expires頭能有效的利用瀏覽器的快取
tf.layers.conv1d函式解析(一維卷積)
一維卷積一般用於處理文字,所以輸入一般是一段長文字,就是詞的列表 函式定義如下: tf.layers.conv1d( inputs, filters, kernel_size, strides=1, padding='valid', data_format='chann
阿里雲棲開發者沙龍-資料庫技術專場(最全資料下載)
前言:2018年12月01日舉辦了第一期阿里雲棲開發者玩轉資料庫技術沙龍,本次活動由雲棲社群主辦,地點就在北京阿里中心。 阿里雲棲開發者沙龍希望通過技術乾貨分享來打通線上線下專家和開發者的連線。沙龍每期將定位不同的技術方向,逐步覆蓋雲端計算,大資料,前端,PHP,android,AI,運維,測試 等技術領域
python函式引數定義及解析(包含帶星號引數)
前言:python中函式引數的傳遞是通過賦值來傳遞的。函式的引數有兩個方面值得注意: 1.函式引數是如何定義的 2.在呼叫函式的過程中引數是如何被解析的 python函式引數的定義方式 func(arg1, arg2, …) 這是最常見的定義方式,一個函式
Spark MLlib 機器學習演算法與原始碼解析(網路課程—第一期)
《Spark MLlib 機器學習演算法與原始碼解析》spark是一個開源叢集運算框架,最初是由加州大學柏克利分校AMPLab所開發。Spark使用了記憶體內運算技術,在記憶體上的運算速度比Hadoop
阿里雲伺服器雲資料庫免費體驗(Java Web詳細例項)
一、效果展示 博主部署了兩個war包到阿里雲伺服器上,一個是沒有連線資料庫的,另外一個是連線了資料庫的。 (由於阿里雲伺服器免費使用15天,下面連結約2016年3月9日後無效) (3)頁面效果 二、阿里雲伺服器部署Java Web例項
19-06、redis哨兵的多個核心底層原理的深入解析(包含slave選舉演算法)
1、sdown和odown轉換機制 sdown和odown兩種失敗狀態 sdown是主觀宕機,就一個哨兵如果自己覺得一個master宕機了,那麼就是主觀宕機 odown是客觀宕機,如果quorum數量的哨兵都覺得一個master宕機了,那麼就是客觀宕機 sdown達成的條件很簡單,如
ExpandableListView使用解析(三級列表的實現)
ExpandableListView 使用解析(三級列表的實現) 在往常的設計中,往往有類似於QQ的二級列表的樣式,而使用ExpandableListView變可以實現這種類似的效果。 當然,如果ExpandableListView巢狀ExpandableL
java對office、pdf文件線上預覽解析(融合進專案中)
最近在專案中要做一個文件的預覽,在網上搜了好多demo,都可以實現其功能,但是放在自己的專案中有點複雜。 先說明本人的開發環境(win7+tomcat7+maven+svn+myeclipse),接下來最直觀的專案需求,如下圖: 當用戶點選預覽的時候能看各種文件,其實在這