資料庫設計_正規化理解及其它
第1正規化:每個列和記錄包含一個而且只包含一個值的表。
Branch(不屬於1NF,第1條記錄telNos有多個值)
branchNo branchAddress telNos
B001 8 504,503
B002 city 206
B003 14 216
需要拆分成2個表,符合1NF
Branch(1NF) BranchTelephone(1NF)
branchNo branchAddress branchNo telNos
B001 8 B001 503
B002 city B001 504
B003 14 B002 206
B003 216
第二正規化:一個第1正規化的表並且每個非主鍵列都可以從構成主鍵的全部的列對映得到。一般應用於具有複合主鍵的表,而具有單列主鍵的1NF表自動是2NF.
TempStaffAllocation( staffNo branchNO為複合主鍵)
staffNo branchNo branchAddress name position hoursPerWee
S4555 B002 city Ellen Ass 16
S4555 B004 16 Ellen Ass 9
S4612 B002 city Dav Ass 14
S4612 B004 16 Dav Ass 10
分析:branchAddress列的值可以僅從branchNO列對映得到。所以非2NF表。name列的值可以僅從staffNO列對映得到。所以非2NF.需要拆分表。hoursPerWee可以由主鍵對映得到。
Branch(2NF)
branchNo branchAddress
B002 city
B004 16
TempStaff(2NF)
staffNo name position
S4555 Ellen Ass
S4612 Dav Ass
TempStaffAllocation(2NF)
staffNo branchNo hoursPerWee
S4555 B002 16
S4555 B004 9
S4612 B002 14
S4612 B004 10
第三正規化:一個已經是第一和第二正規化的表,並且所有的非主鍵列的值都只能從主鍵列對映得到,而不能從其他的列得到。
staffBranch(非3NF)
staffNo name position salary branchNo branchAddr telNo
S1500 Tom Man 46000 B001 8 Way 503
S0003 Sally Ass 30000 B001 8 Way 503
S0010 Mary Man 50000 B002 City 206
S3250 Robert Super 32000 B002 City 206
S2250 Sally Man 48000 B004 16-14th 207
S0415 Art Man 41000 B003 14-8th 212
分析:branchAddress和telNo可以從branchNo對映得到,非3NF。branchNo和telNo列可以從branchAddr對映得到,非3NF。branchNo和branchAddre可以從telNo對映得到,非3NF。
正規化設計不好,可能引發:1插入異常 2 刪除異常 3 更新異常。這些會違背資料庫ACID原則的其中的若干個。
逆規範的使用場合:若效能達不到要求,表的更新頻率比較低,查詢比較高,則逆規範就可行,可以加快查詢速度,但會降低更新速度。逆規範是對原有表屬性的修改,使得新表比原始表的正規化低。
逆規範有幾個要點:不分解到3NF,增加重複屬性來減少連線(根據cdm關聯關係),對大表要做分割槽。
分割槽有3類:範圍分割槽(每個分割槽中包含一個或多個列的範圍值),列表分割槽(每個分割槽中包含一列的值列表),雜湊分割槽(根據雜湊函式分解每個分割槽)。
需要考慮6種完整性約束:1需要的資料。2屬性域約束。3實體完整性。 4 關係多樣行。 5參照完整性。 6其它業務規則。
其中參照完整性需要重點考慮。還有需要正確刪除cdm中的冗餘關係。
[@more@]來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24214296/viewspace-1059541/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫設計之三正規化的的理解資料庫
- 資料庫設計三正規化資料庫
- 資料庫——三正規化理解資料庫
- 資料庫表設計三正規化資料庫
- 八、資料庫的歸約,三大正規化(規範資料庫設計)資料庫
- 關係型資料庫設計三大正規化資料庫
- 正規化(Normal Form)是資料庫設計中的概念。新的正規化(paradigm)ORM資料庫
- javaWeb-day03-約束、資料庫設計、正規化、資料庫備份JavaWeb資料庫
- msql 資料庫設計正規化 簡單理解(1NF,2NF,3NF)SQL資料庫
- 資料庫設計三大正規化應用例項剖析資料庫
- 資料庫建表設計六正規化介紹枘雍資料庫
- 啥是資料庫正規化資料庫
- 資料庫三正規化資料庫
- 資料庫 三大正規化資料庫
- 資料庫三大正規化資料庫
- MySQL系列資料庫設計三正規化教程示例隍啃MySql資料庫
- 資料庫正規化與例項資料庫
- 資料庫三大正規化 Mysql資料庫MySql
- 【一文秒懂】帶你徹底搞懂正規化與反正規化資料庫設計資料庫
- 資料庫中的正規化和反正規化詳解!資料庫
- 前端資料正規化化前端
- 資料庫學習(一)三正規化資料庫
- 程式設計正規化(Programmingparadigm)程式設計
- 理解資料庫規範化的意義ZI資料庫
- MySQL資料庫設計規範MySql資料庫
- 淺談程式設計正規化程式設計
- Java學習筆記:資料庫中的正規化和反正規化Java筆記資料庫
- MySQL 規範 (資料庫表設計規範)MySql資料庫
- MongoDB資料庫的設計規範MongoDB資料庫
- MySQL 資料庫規範--設計篇MySql資料庫
- MySQL之規範資料庫設計MySql資料庫
- 資料庫系統------函式依賴與正規化資料庫函式
- 你還記得資料庫三正規化嗎?資料庫
- 程式設計模型(正規化)小結程式設計模型
- 三正規化-簡單理解
- 【資料庫設計】資料庫的設計資料庫
- 關聯式資料庫的正規化(Normal Form)知識點資料庫ORM
- 【資料庫】關係模式的正規化的簡明判斷資料庫模式
- 理解正規表示式(程式設計師第3期文章)程式設計師