先要宣告。如果你的的表已經符合bcnf了就已經完全滿足規範了
什麼是」正規化(nf)」
按照教材中的定義,正規化是「符合某一種級別的關係模式的集合,表示乙個關係內部各屬性之間的聯絡的合理化程度」。很晦澀吧?實際上你可以把它粗略地理解為一張資料表的表結構所符合的某種設計標準的級別。就像家裡裝修買建材,最環保的是e0級,其次是e1級,還有e2級等等。資料庫正規化也分為1nf,2nf,3nf,bcnf,4nf,5nf。一般在我們設計關係型資料庫的時候,最多考慮到bcnf就夠。符合高一級正規化的設計,必定符合低一級正規化,例如符合2nf的關係模式,必定符合1nf。
1. 第一正規化(1nf):
關係中的每個屬性都不可再分,也就是表項不能夠再分
2. 第二正規化(2nf)
消除非主屬性對於碼的部分函式依賴。
碼
其中碼可以理解為主屬性類似於主鍵。但是這裡的主屬性也就是碼一般是由2個屬性組合起來的,
函式依賴
其中函式依賴分為完全函式依賴和部分函式依賴
完全函式依賴
如學號 f→ 姓名,(學號,課名) f→ 分數
姓名只能由學號決定。
分數只能由學號和課名共同決定,不能由他們單獨決定。這就叫完全函式依賴
部分函式依賴
如學號,課名) → 姓名,有 學號 → 姓名,存在非主屬性 姓名 對碼(學號,課名)的部分函式依賴
(學號,課名) → 系名,有 學號 → 系名,存在非主屬性 系名 對碼(學號,課名)的部分函式依賴
也就是說,系名可以由主屬性之一學號確定,系名也可以由共同為主屬性的學號和課號確定,這就是部分函式依賴,而第二正規化就是要消除部分函式依賴
總之要想不存在部分函式依賴有兩種方式,第一主屬性也就是碼只有乙個時,那就一定不存在部分函式依賴。第二當有兩個字段組成主屬性時候,它的非主屬性必須只能考兩個字段才能唯一確認。
3. 第三正規化(3nf)
消除了非主屬性對於碼的傳遞函式依賴
如果:主碼為學號,主屬性為學號,非主屬性為姓名、系名和系主任。因為 學號 → 系名,同時 系名 → 系主任,所以存在非主屬性系主任對於碼學號的傳遞函式依賴
所以要消滅傳遞函式依賴就要把系名和系出任拆分出來構成新錶
bcnf正規化
存在著主屬性對於碼的部分函式依賴與傳遞函式依賴。(在此例中就是存在主屬性【倉庫名】對於碼【(管理員,物品名)】的部分函式依賴。
解決辦法就是要在 3nf 的基礎上消除主屬性對於碼的部分與傳遞函式依賴
正規化 資料庫表的建立 修改和約束設定
建立表修改表結構 約束constraint 解決資料冗餘的問題 確保每列保持原子性 如果資料庫表中的所有字段值都是不可分解的原子值,就滿足了第一正規化。確保表中的每列都和主鍵相關,而不能只於主鍵的某一部分相關。主要是在聯合主鍵的情況下。每一列都與主鍵直接相關,而不能與主鍵簡介相關。新建表時,指定的表...
資料庫表設計三正規化
什麼是正規化 當乙個關係中的所有分類都是不可再分的資料項時,該關係是規範化的。不可再分的資料項,即不存在組合資料項和多項資料項。乙個低一級的關係模式,通過模式分解可以轉換為若干高一級正規化的關係模式的集合,這個過程就叫規範化。二維資料表可以分為5級正規化為1nf 2nf 3nf 4nf 5nf。第一...
資料庫 資料庫正規化
關聯式資料庫的設計規範。不同的規範要求被稱為不同的正規化,越高的正規化資料庫冗餘越小。減少資料庫中資料冗餘的過程 1 第一正規化 1nf 在關係模式r中,當且僅當所有屬性只包含原子值,即每個分量都是不可再分的資料項,則稱r滿足1nf。例如表所示的教師職稱情況關係就不滿足1nf。原因在於,該關係模式中...