為了建立冗餘較小、結構合理的關聯式資料庫,設計關聯式資料庫時必須遵循一定的規則, 即關聯式資料庫的設計正規化。
關係型資料庫的第一正規化要求:
舉例來說,客戶資料表中包含客戶名和位址,位址由城市和街道組成。應用經常需要分別訪問城市或街道字段。
資料表customers(name,city, street)是符合第一正規化的,而資料表customers(name,address)則不滿足第一正規化的要求。
定義乙個滿足第一正規化的資料表:
courses(student_id, course_id, school_name, president, credit)
primary key(student_id, course_id)
上表仍然存在四個問題:
若一學生轉院則需修改其所選所有課程的資料。
第二正規化是在第一正規化的基礎上定義的,它要求:
候選碼是函式決定所有非主屬性的最小集合,但不排除候選碼的真子集決定某些而非全部非主屬性的情況.
而2nf禁止候選碼的真子集函式決定任何非主屬性.
如上文資料表:
courses(student_id, course_id, school_name, president, credit)
primary key(student_id, course_id)
school_name和president屬性依賴於student_id
屬性,不依賴於course_id
屬性。
也就是說school,president屬性部分函式依賴於主鍵,不滿足第二正規化的要求。
若將上表拆分為兩個資料表:
courses(student_id, course_id, credit)
primary key(student_id, course_id)
students(student_id, school_name, president)
primary key(student_id)
拆分後的資料表滿足了第二正規化的要求。
現在分析一下,第一正規化沒有解決的四個問題:
第三正規化定義在第二正規化的基礎上:
看上文資料表的定義
students(student_id, school_name, president)
primary key(student_id)
存在傳遞函式依賴student_id
->school_name
->president
,不滿足第三正規化。
進行進一步拆分:
courses(student_id, course_id, credit)
primary key(student_id, course_id)
students(student_id, school_name)
primary key(student_id)
schools(school_name, president)
primary key
拆分後消除了傳遞函式依賴。
分析第三正規化對上述四個問題處理。
第三正規化基本上可以解決上述問題。
bc(boyce-codd)正規化在3nf的基礎上進一步消除了傳遞依賴.
bcnf要求:
即所有候選碼都直接決定所有非主屬性.
給定關係模式r和其上的函式依賴集f, 將r進行滿足bcnf的無損連線分解:
置初值p =
檢查p中的關係模式若均滿足bcnf則停止分解, 否則重複執行3.
在p中選出不滿足bcnf的關係模式s, 其中必有非平凡依賴b->c, 且b不是s的候選碼.將s分解為s1= 和s2 = r - , 用s1,s2代替p中s的位置.
示例:r = f =
候選碼a, 函式依賴b->c, 因為b不是candidate key所以要進行分解:
4nf要求:
示例:
phone(user_id, phone, cell)
若某使用者有多個phone同時又有多個cell時此表設計顯然不合理.
可以採用如下的拆分方案:
phone(user_id, phone, type)
拆分後的資料表滿足了4nf. 關係型資料庫設計正規化
理解三大正規化 學後知變通 什麼是正規化 資料庫設計對資料的儲存效能和開發人員對資料的操作都有關係。所以建立科學的 規範的資料庫需要滿足一些規範。在關係型資料庫中這些規範就可以稱為正規化。三大正規化概念 第一正規化 當關係模式r的所有屬性都不能分解為更基本的資料單位時,稱r是滿足第一正規化的,簡記為...
關係型資料庫設計正規化
首先要明白 正規化 nf 是什麼意思。按照教材中的定義,正規化是 符合某一種級別的關係模式的集合,表示乙個關係內部各屬性之間的聯絡的合理化程度 很晦澀吧?實際上你可以把它粗略地理解為一張資料表的表結構所符合的某種設計標準的級別。就像家裡裝修買建材,最環保的是e0級,其次是e1級,還有e2級等等。資料...
關係型資料庫正規化
設計關聯式資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的正規化,各種正規化呈遞次規範,越高的正規化資料庫冗餘越小。目前關聯式資料庫有六種正規化 第一正規化 1nf 第二正規化 2nf 第三正規化 3nf 巴斯 科德正規化 bcnf 第四正規化 4nf 和第五正...