Day23. MySQL: 資料庫正規化Database normalization - iT 邦幫忙

文章推薦指數: 80 %
投票人數:10人

第1正規形式(1NF); 第2正規形式(2NF); 第3正規形式(3NF); BCNF正規形式(BCNF); 第4正規形式(4NF); 第5正規形式(5NF). 資料庫正規化實作- 練習 ... 第11屆iThome鐵人賽 DAY 23 0 自我挑戰組 網頁服務開發之路系列第 23篇 Day23.MySQL:資料庫正規化Databasenormalization 11th鐵人賽 jiajun_chou 團隊中興應數98級3+1個香皮匠 2019-10-0814:42:223568瀏覽 學習資源:codedata-Databasenormalization 降低資料重複性 避免資料更新異常 在實務上,BCNF被視為大部分應用程式所需的最高階正規形式 第1正規形式(1NF) 第2正規形式(2NF) 第3正規形式(3NF) BCNF正規形式(BCNF) 第4正規形式(4NF) 第5正規形式(5NF) 資料庫正規化實作-練習 第1正規形式(firstnormalform,1NF) 「若且唯若關聯表中的每一個屬性其值皆為基元值(AtomicValue)」 每一個欄位只能有一個基元值(Atomic)即單一值 沒有任何兩筆以上的資料是完全重覆 資料表中有主鍵,而其他所有的欄位都相依於「主鍵」 非正規形資料因同一欄位存在複數值,會發生無法進行演算的問題 _做法 將重複的資料項分別儲存到不同的記錄中,並加上適當的主鍵 第2正規形式(secondnormalform,2NF) 分割資料表;亦即將「部分功能相依」的欄位「分割」出去,再另外組成「新的資料表」 「若且唯若關聯表中,所有非鍵值屬性皆完全功能相依於主鍵」 非Key值完全從屬於候補Key值 換言之,「部分功能相依」只有當「主鍵」是由「多個欄位」組成時才會發生(亦即複合主鍵),也就是當某些欄位只與「主鍵中的部分欄位」有「相依性」,而與另一部分的欄位沒有相依性 _做法 檢查是否存在「部分功能相依」 將「部分功能相依」的欄位分割出去,再另外組成新的資料表 第3正規形式(thirdnormalform,3NF) 分割資料表;亦即將「遞移相依」或「間接相依」的欄位「分割」出去,再另外組成「新的資料表」 「一個關聯表為第三正規化表格,若且唯若該關聯表中,不存在非鍵值屬性遞移相依於主鍵」 非Key值推移從屬於候補Key值 _做法 檢查是否存在「遞移相依」 將「遞移相依」的欄位「分割」出去,再另外組成「新的資料表」 BCNF正規形式(!Boyce/Coddnormalform;BCNF) 適用時機:如果資料表的「主鍵」是由「多個欄位」組成的,則必須再執行Boyce-Codd正規化 規則:「主鍵」中的各欄位不可以相依於其他非主鍵的欄位 BCNF去除了屬性間的不必要的函式依賴,「任何屬性(包括非主屬性和主屬性)都不能被非主屬性所決定」 任何一個BCNF必然滿足 所有非主屬性都完全函式依賴於每個候選鍵 所有主屬性都完全函式依賴於每個不包含它的候選鍵 沒有任何屬性完全函式依賴於非候選鍵的任何一組屬性 第4正規形式(fourthnormalform,4NF) 「符合BCNF,再除去所有的多值相依(Multi-ValuedDependency)」 多值相依:關聯表R中有3個欄位以上,R(A,B,C),主鍵為ABC,而A對應B時,B有多個值相對應﹔A對應C時,C有多個值相對應,B和C無關 第5正規形式(fifthnormalform,5NF) 「符合4NF,且沒有合併相依(JoinDependency)」 合併相依:如果表格T可以透過其子集而重建,那麼表格T就是具有合併相依 留言 追蹤 檢舉 上一篇 Day22.MySQL:效率 下一篇 Day24.HTTP通訊協定Part1 系列文 網頁服務開發之路 共30篇 目錄 RSS系列文 訂閱系列文 17人訂閱 26 Day26.ChromeDevelopTool:Network 27 Day27.SearchEngineOptimization(SEO) 28 Day28.受眾分析 29 Day29.【資訊安全】資訊安全政策與基本概念 30 Day30.資料庫類型介紹與索引建立 完整目錄 尚未有邦友留言 立即登入留言 iT邦幫忙鐵人賽 參賽組數 1087組 團體組數 52組 累計文章數 20492篇 完賽人數 572人 鐵人賽最新文章 Day36-使用Container建立AmazonSageMaker端點 Day35-AmazonSageMaker簡介 今天來瞄一眼龍與雀的科技:知覺共享技術Body-sharing 更新網格交易機器人 Day34-實作S3驅動Lambda函數進行YOLO物件辨識 建立第一個RESTfulapiserver(設定環境變數篇)-7(Day19) Day48.下載個範例iosapp來試著build 原來Arduino開發板的腳位與程式內數字的對應會隨著開發商不同而改變? EP32:TopStoreAppwith.NETMulti-platformAppUI(MAUI) [Day32]HexoxGitHubPages主題自訂樣式+問題排除 前往鐵人賽 技術推廣專區 [Day2]抓取每日收盤價 [Day1]基本工具安裝 利用python取得永豐銀行API的Nonce 永豐金融API測試員 [Day03]tinyML開發板介紹 [Day01]在享受tinyML這道美食之前 [Day3]使用ta-lib製作指標 計算API所需要的參數:HashID [Day4]函數打包與買進持有報酬率試算 計算API所需要的參數:IV 前往鐵人賽 熱門問題 電信商說我透過Steam或是PS4下載遊戲是異常封包而斷我網路,怎麼辦? 有關新手SQL問題一問 有人知道怎麼解決gmail一直擋信的問題? LINUX帳戶密碼最大使用期限90天 Win10的系統還原 線上版文書處理除了Google雲端,365,還有其他選擇嗎? Windows2008R2如何讀取ISO檔 Server掛掉,Acronis的備份檔無法復原 MSSQL資料庫主機Ping的到,但無法連線 MSSQLUNION後進階排序問題請教 IT邦幫忙 站方公告 2021iThome鐵人賽精彩文章超過2萬篇,預計12月揭曉本屆獲勝鐵人 熱門tag 看更多 13th鐵人賽 12th鐵人賽 11th鐵人賽 鐵人賽 2019鐵人賽 2018鐵人賽 javascript 2017鐵人賽 windows php python windowsserver linux c# 程式設計 資訊安全 css vue.js sql 分享 熱門回答 有關新手SQL問題一問 MSSQL資料庫主機Ping的到,但無法連線 TIPTOPmail MSSQLUNION後進階排序問題請教 線上版文書處理除了Google雲端,365,還有其他選擇嗎? 電信商說我透過Steam或是PS4下載遊戲是異常封包而斷我網路,怎麼辦? 如果想把現有NAS掛給ESXI6當VM備份儲存區.請問要如何做 新手程式提問 Windows2008R2如何讀取ISO檔 求助!用ExcelUserForm來Update資料到SQL 熱門文章 【第31天】番外篇-Windows+YOLOV4本地端訓練 原來Arduino開發板的腳位與程式內數字的對應會隨著開發商不同而改變? 建立第一個RESTfulapiserver(設定環境變數篇)-7(Day19) Day48.下載個範例iosapp來試著build Day34-實作S3驅動Lambda函數進行YOLO物件辨識 【換機必學】將資料從Android轉移到iOS的兩種方法 EP32:TopStoreAppwith.NETMulti-platformAppUI(MAUI) [Day32]HexoxGitHubPages主題自訂樣式+問題排除 更新網格交易機器人 免費錄影!原來Windows10有内建的螢幕錄影工具 一週點數排行 更多點數排行 海綿寶寶(antijava) raytracy(raytracy) ccenjor(ccenjor) rogeryao(rogeryao) ㊣浩瀚星空㊣(yoching) 純真的人(jer5173) Samuel(kuanyu) huahualiu(ffang55tw) juck30808(juck30808) 淺水員(ren1244) × At 輸入對方的帳號或暱稱 Loading 找不到結果。

標記 {{result.label}} {{result.account}} 關閉



請為這篇文章評分?