第一正規化(1nf):每一列都是不可分割的原子資料項(什麼意思,每一項都不可分割,像下面的**就能分割,所以它連第一正規化都算不上)
分割後的樣子
(它就是第一正規化了)
第二正規化:在1nf基礎上,非碼屬性必須完全依賴於候選碼(在1nf基礎上消除非主屬性對主碼的部分函式依賴)
幾個重要的概念:
1.函式依賴:a-->b,如果通過a屬性(屬性組)的值,可以確定唯一的b屬性的值,則稱b依賴於a
例如:學號---->姓名 (學號、課程名稱 的屬性組)--> 分數
2.完全函式依賴:a-->b 如果a是乙個屬性組,則b屬性值的確定需要依賴a屬性組的中所有的屬性值
例如:(學號、課程名稱)--> 分數
3. 部分函式依賴: a-->b 如果a是乙個屬性組,則b屬性值的確定只需要依賴a屬性組的中某一些的屬性值(第二正規化就是消除這個)
例如:(學號 、課程名稱)--> 姓名
4.傳遞函式依賴:a -- >b , b -- >c 如果通過a屬性(屬性組)的值,可以確定唯一的b屬性的值,再通過b屬性(屬性組)的值,可以唯一確定c屬性的值,那麼稱c傳遞依賴於a
例如: 學號 --> 系名 ,系名 --> 系主任
5.碼 :如果在一張表中,乙個屬性或屬性組,被其他所有的屬性(非主屬性)所完全函式依賴,則稱這個屬性(屬性組)為該錶的碼。(上面的表,學號和課程名稱所構成的屬性組就是碼)
例如: 該表中碼為 (學號、課程名稱)
主屬性: 碼中所有屬性
非主屬性: 除碼之外的所有屬性
在上面那張表中我們可知碼為(學號、課程名稱),但是姓名、系名、系主任都部分依賴於碼(主屬性),這不符合第二正規化,所以進行拆分如下
第一張表碼為(學號、課程名稱),第二張表為(學號),它們都是完全依賴的,因此符合第二正規化。
第三正規化(3nf):在2nf的基礎上,任何的非主屬性不依賴於其他非主屬性 (在第二正規化基礎上消除傳遞依賴)
注意看第二正規化的學生表:存在系主任依賴於系名 (系名---> 系主任),所以不符合第三正規化
繼續進行拆分
這樣就符合第三正規化...
資料庫三正規化詳解 例子
資料庫的設計正規化是資料庫設計所需要滿足的規範,滿足這些規範的資料庫是簡潔的 結構明晰的,同時,不會發生插入 insert 刪除 delete 和更新 update 操作異常。反之則是亂七八糟,不僅給資料庫的程式設計人員製造麻煩,而且面目可憎,可能儲存了大量不需要的冗餘資訊。正規化說明 1.1 第一...
三大正規化詳解
正規化 英文名稱是 normal form,它是英國人 e.f.codd 關聯式資料庫的老祖宗 在上個世紀70年代提出關聯式資料庫模型後總結出來的,正規化是關聯式資料庫理論的基礎,也是我們在設計資料庫結構過程中所要遵循的規則和指導方法。目前有跡可尋的共有8種正規化,依次是 1nf,2nf,3nf,b...
資料庫三正規化詳解
所謂第一正規化 1nf 是指資料庫表的每一列都是不可分割的基本資料項,同一列中不能同時有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性 如果出現重複的屬性,就可能需要定義乙個新的實體,新的實體由重複的屬性構成,新實體與原實體之間為一對多關係。在第一正規化 1nf 中表的每一行只包含乙個例...