接下來用例子再詳細介紹依賴關係
(學號,課程)→成績,由乙個學號和課程可以唯一確定這個學生這節課的成績,此時非主屬性成績完全依賴於碼(學號,課程),稱完全函式依賴。
(學號,課程)→姓名,由學號和課程可以確定乙個學生的姓名,但本身由學號就可以確定學生的姓名,學號為(學號,課程)的真子集,此時非主屬性姓名部分依賴於碼(學號,課程),稱部分函式依賴。
(學號,課程)→老師,老師→職稱,由學號和課程可以確定上這節課的老師,老師又可以決定老師的職稱,但(學號,課程)不能確定老師的職稱,所以存在傳遞依賴。職稱傳遞函式依賴於碼(學號,課程)。
第一正規化
第一正規化(1nf)是資料庫的基本正規化要求,確保了資料的原子性。是每乙個關係必須要遵守的要求。第一正規化的具體要求簡單來說就是表中不能有表,每個屬性都是不可再分的最小單位。
以上表中,**這一屬性被拆分為兩部分,不滿足第一正規化。
第二正規化
第二正規化(2nf)是在第一正規化的基礎上消除了部分函式依賴。確保碼與非主屬性間都為完全函式依賴。
如上表中,碼為(學號,課程),此時姓名可由學號單獨決定,形成姓名對碼的部分函式依賴。為解決這一問題,可以將此表進行分解,使其滿足2nf。
此時保證了非主屬性對碼的完全函式依賴。滿足2nf。
第三正規化
3nf在2nf基礎上消除傳遞依賴。
上表中,職稱和碼(學號,課程)存在傳遞依賴,不滿足3nf。為使關係滿足3nf
可以將表拆分。
如上圖,將表拆分後,連個兩個表同時滿足第三正規化。
bf正規化
bf正規化可以看為第三正規化的補充,消除主屬性間的相互依賴。(即只有乙個表只有乙個碼)
以上表中存在(學生,教師)→課程(學生所選定的課),(學生,課程)→教師(教該學生的老師)的關係,由於每一位老師只教一科,一科可由多個老師教,所以存在教師→課程的關係。主屬性間存在依賴關係,不滿足bcnf(即bf正規化)。將上表拆為兩個表,表一(學生,教師),表二(教師,課程)。
若乙個關係達到了第三正規化,並且它只有乙個碼,或者它的每個碼都是單屬性,則該關係自然達到bc正規化。滿足bc正規化必定滿足第三正規化,但滿足第三正規化不一定滿足bcnf。
資料庫正規化理解
當前我們使用的主流資料庫是關係型資料庫,所以我是記錄在關係型資料庫中對正規化的一些理解和看法。資料庫庫正規化分為六種 其實還有有乙個bcnf 分別為從第一正規化到第六正規化。高階一層是建立在所有低層的基礎上的,如第2正規化是建立在第一正規化的基礎上的,依次類推。下面分別舉例講解各種正規化 第一正規化...
資料庫正規化的理解
就是滿足了單一屬性不能再分割,正常情況下,你在資料庫裡建立的表肯定是滿足這個正規化的,要想不滿足這個正規化,可以在excel中嘗試合併單元格,拆分單元格體會下,就明白了。2nf 必須不存在非關鍵字段對組合的關鍵字段中的某些的依賴,比如某個表有 個關鍵字,但是它的非關鍵屬性 依賴第乙個關鍵字,非關鍵屬...
資料庫正規化的理解
資料庫表中的字段都是單一屬性的,不可再分。這個單一屬性由基本型別構成,包括整型 實數 字元型 邏輯型 日期型等。在當前的任何關聯式資料庫管理系統 dbms 中,傻瓜也不可能做出不符合第一正規化的資料庫,因為這些dbms不允許你把資料庫表的一列再分成二列或多列。因此,你想在現有的dbms中設計出不符合...