規(guī)范化數(shù)據(jù)庫(kù)設(shè)計(jì)
為什么需要數(shù)據(jù)庫(kù)設(shè)計(jì)
當(dāng)數(shù)據(jù)庫(kù)比較復(fù)雜時(shí)我們需要設(shè)計(jì)數(shù)據(jù)庫(kù)
糟糕的數(shù)據(jù)庫(kù)設(shè)計(jì) :
- 數(shù)據(jù)冗余,存儲(chǔ)空間浪費(fèi)
- 數(shù)據(jù)更新和插入的異常
- 程序性能差
良好的數(shù)據(jù)庫(kù)設(shè)計(jì) :
- 節(jié)省數(shù)據(jù)的存儲(chǔ)空間
- 能夠保證數(shù)據(jù)的完整性
- 方便進(jìn)行數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的開發(fā)
軟件項(xiàng)目開發(fā)周期中數(shù)據(jù)庫(kù)設(shè)計(jì) :
- 需求分析階段: 分析客戶的業(yè)務(wù)和數(shù)據(jù)處理需求
- 概要設(shè)計(jì)階段:設(shè)計(jì)數(shù)據(jù)庫(kù)的E-R模型圖 , 確認(rèn)需求信息的正確和完整.
設(shè)計(jì)數(shù)據(jù)庫(kù)步驟
- 收集信息
- 與該系統(tǒng)有關(guān)人員進(jìn)行交流 , 座談 , 充分了解用戶需求 , 理解數(shù)據(jù)庫(kù)需要完成的任務(wù).
- 標(biāo)識(shí)實(shí)體[Entity]
- 標(biāo)識(shí)數(shù)據(jù)庫(kù)要管理的關(guān)鍵對(duì)象或?qū)嶓w,實(shí)體一般是名詞
- 標(biāo)識(shí)每個(gè)實(shí)體需要存儲(chǔ)的詳細(xì)信息[Attribute]
- 標(biāo)識(shí)實(shí)體之間的關(guān)系[Relationship]
三大范式
參考:
https://www.cnblogs.com/wsg25/p/9615100.html?
https://blog.csdn.net/Wenco1/article/details/88077279
問題 : 為什么需要數(shù)據(jù)規(guī)范化?
不合規(guī)范的表設(shè)計(jì)會(huì)導(dǎo)致的問題:
信息重復(fù)
更新異常
插入異常
- 無法正確表示信息
刪除異常
- 丟失有效信息
三大范式
第一范式 (1st NF)
第一范式的目標(biāo)是確保每列的原子性,如果每列都是不可再分的最小數(shù)據(jù)單元,則滿足第一范式
第二范式(2nd NF)
第二范式(2NF):在1NF的基礎(chǔ)上,非碼屬性必須完全依賴于候選碼(在1NF基礎(chǔ)上消除非主屬性對(duì)主碼的部分函數(shù)依賴)
第二范式需要確保數(shù)據(jù)庫(kù)表中的每一列都和主鍵相關(guān),而不能只與主鍵的某一部分相關(guān)(主要針對(duì)聯(lián)合主鍵而言)。
第三范式(3rd NF)
如果一個(gè)關(guān)系滿足第二范式,并且除了主鍵以外的其他列都不傳遞依賴于主鍵列,則滿足第三范式.
第三范式需要確保數(shù)據(jù)表中的每一列數(shù)據(jù)都和主鍵直接相關(guān),而不能間接相關(guān)。
規(guī)范化和性能的關(guān)系
為滿足某種商業(yè)目標(biāo) , 數(shù)據(jù)庫(kù)性能比規(guī)范化數(shù)據(jù)庫(kù)更重要
在數(shù)據(jù)規(guī)范化的同時(shí) , 要綜合考慮數(shù)據(jù)庫(kù)的性能
通過在給定的表中添加額外的字段,以大量減少需要從中搜索信息所需的時(shí)間
通過在給定的表中插入計(jì)算列,以方便查詢