正規化是在識別資料庫中的資料元素,關係,以及定義所需的表和各表中的專案這些處事工作之後的乙個細化的過程。常見的正規化有inf,2nf,3nf,bcnf,以及4nf。
1> 1nf。第一正規化是指資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能又重複的屬性。如果出現重複的屬性,就可能需要定乙個新的實體,新的實體由重複的屬性構成,新實體與原來的實體之間為一對多的關係。第一正規化的模式要求屬性值不可再**成更小部分,即屬性項不能是屬性組合或由組屬性組成。簡而言之,第一正規化就是無重複的列,例如,由「職工號」 「姓名」 「**號碼」組成的表(乙個人可能有一部辦公**和一部移動**),這時將其規範化為1nf可以將**號碼分為"辦公**"和移動**兩個屬性,即職工(職工號,姓名,辦公**,移動**)。
2>2nf。第二正規化,是在第一正規化的基礎上建立起來的。,即滿足第二正規化必須先滿足第一正規化。第二正規化要求資料庫表中的每個例項或行必須可以唯一的區分。為實現區分通常需要為表加上乙個列,以儲存各個例項的唯一標識。如果關係模式r為第一正規化,並且r中的每乙個非主屬性完全函式依賴於r的某個候選鍵。則稱r為第二正規化(如果a是關係模式r的候選鍵的乙個屬性,則稱a是r的主屬性),例如,在選課關係表(學號,課程號,成績,學分),關鍵字為組合關鍵字(學號,課程號),但由於非主屬性學分依賴於課程號,對關鍵字(學號,課程號)只是部分依賴,而不是完全依賴,因此此種方式會導致資料冗餘以及更新異常等問題,解決辦法是將其分為兩個關係模式:學生表(學號,課程號,分數)和課程表(課程號,學分)新關係通過學生表中的外來鍵課程號聯絡,在需要時連線。也就是在第一正規化的基礎上消除部分依賴。
3>3nf。第三正規化,如果關係模式r是第二正規化,且每個非主屬性都不傳遞依賴於r的候選鍵,則稱r是第三正規化的模式。
以學生表(學號,姓名,課程號,成績)為例,其中學生姓名無重名,所以該錶有兩個候選碼(學號,課程號)和(姓名,課程號),故存在函式依賴:學號——>姓名,(學號,課程號)——>成績,(姓名,課程號)——>成績,唯一的非主屬性成績對主碼不存在部分依賴,也不存在傳遞依賴,所以屬於第三正規化。
就是在第二正規化的基礎上消除傳遞依賴。
4>bcnf。它構建在第三正規化的基礎上,如果關係模式是第一正規化,且每個屬性都不傳遞依賴於r的候選鍵,那麼稱r為bcnf的模式。假設倉庫管理關係表(倉庫號,儲存物品號,管理員號,數量),滿足乙個管理員只在乙個倉庫工作;乙個倉庫可以儲存多種物品,則存在如下關係:
(倉庫號,儲存物品號)——>(管理員號,數量)
(倉庫員號,儲存物品號)——>(倉庫號,數量)
所以,(倉庫號,儲存物品號)和(倉庫員號,儲存物品號)都是倉庫管理關係表的候選碼,表中的唯一非主鍵欄位為數量, 它是符合第三正規化的。但是,由於存在如下決定關係:
(倉庫號)———>(管理員號)
(管理員號)——>(倉庫號)
即存在關鍵字段決定關鍵字段的情況,因此不符合bcnf。把倉庫管理關係表分解為兩個關係表:倉庫管理表(倉庫號,管理員號)和倉庫表(倉庫號,儲存物品號,數量),這樣的資料庫表是符合bcnf的,並消除了刪除異常,插入異常和更新異常。
資料庫正規化區別
概念 1 實體 entity 就是實際應用中要用資料描述的事物,一般是名詞。2 字段 fields 就是一項資料,也就是我們平常所說的 列 4 鍵 key 可唯一標識一條記錄的乙個欄位或字段集,有時翻譯為 碼 5 主鍵 primary key 用於唯一標識乙個表中的一條記錄的鍵。每個主鍵應該具有下列...
MyBatis中 與 有什麼區別
1 是預編譯處理,mybatis在處理 時,它會將sql中的 替換為?然後呼叫preparedstatement的set方法來賦值 2 是 字元 串替換,myba tis在 處理 是字串替換,mybatis在處理 是字串替換 myb atis 在處理時,它會將sql中的 替換為變數的值。注意 使用 ...
18 關係型資料和文件型資料庫有什麼區別?
關聯式資料庫 relational database 是建立在關係模型基礎上的資料庫,借助於幾何代數等數學概念和方法來處理資料庫中的資料。所謂關係模型是一對 一 一對多或者多對多等關係,常見的關係型資料庫有 oracle sql server db2 mysql 等。而文件型資料庫是一種非關係型資料...