>>>> 爲何須要規範的數據庫設計數據庫
在實際的項目開發中,若是系統的數據存儲量較大,設計的表比較多,表和表之間的關係比較複雜,就須要首先考慮規範的數據庫設計,而後進行建立庫,建立表的工做. 數據庫設計
若是設計不當,會存在數據操做異常,修改複雜,數據冗餘等問題,程序性能會受到影響,經過進行規範化的數據庫設計,能夠消除沒必要要的數據冗餘,得到合理的數據庫設計,提升項目的應用性能.性能
>>>>設計數據庫的步驟spa
1.收集信息設計
須要瞭解數據庫須要存儲哪些信息(數據),實現哪些功能.對象
2.標識實體blog
在收集需求信息後,必須標識數據庫要管理的關鍵對象或實體,實體能夠是有形的事物,如人和產品;也能夠是無形的事物,如商業交易公司部門或發薪週期...ip
3.標識每一個實體須要存儲的詳細信息(即實體的屬性)開發
就是須要細分出每一個實體中包含的子成員信息,也稱爲該實體的屬性,這些屬性將組成表中的列.產品
4.標識實體之間的關係
要標識實體之間的關係,須要分析數據庫表,肯定這些表在邏輯上是如何相關的,而後添加關係列創建起表之間的鏈接.
--在需求分析階段解決了客戶的業務和數據處理需求後,就進入了概要設計階段,咱們須要和項目的其餘成員及客戶溝通,討論數據庫的設計是否知足客戶的業務和數據的處理需求,數據庫的設計也須要圖形化的表達方式--E-R(Entity-Relationship)圖,也稱之爲 實體-關係圖
>>>>E-R(Entity-Relationship)圖
(實體使用矩形表示,通常是名詞;屬性使用橢圓表示,通常也是名詞;聯繫使用菱形表示,通常是動詞)
1.實體
就是指現實世界中具備區分其餘事物的特徵或屬性並與其餘實體有聯繫的實體.嚴格的說,實體是指表中一行特定數據,也 常把整個表稱之爲一個實體.
2.屬性
屬性能夠理解爲實體的特徵.屬性對應表中的列.
3.聯繫
聯繫是兩個或多個實體之間的關聯關係
根據E-R圖繪製酒店管理系統的E-R圖
>>>>映射基數
映射基數表示經過聯繫與該實體關聯的其餘實體的個數,對於實體集X和Y之間的二元關係,映射基數必須爲下列技術之一:
>>一對一:X中的一個實體最多與Y中的一個實體相關聯,而且Y中的一個實體最多與X中的一個實體相關聯.
>>一對多:X中的一個實體能夠與Y中的任意數量實體相關聯;Y中的實體最多與X中的一個實體相關聯.
>>多對一:X中的一個實體最多與Y中的一個實體相關聯;Y中的實體能夠與X中的任意數量實體相關聯.
>>多對多:X中的一個實體能夠與Y中的任意數量實體相關聯,反之亦然.
>>>>邏輯設計——繪製數據庫模型圖
操做步驟:(1.新建數據庫模型圖 2.添加實體 3.添加數據列及相應的屬性 4.添加實體之間的映射關係)
>>>>數據庫規範化
從用戶的角度而言,將全部信息放在一個表中很方便,由於這樣查詢數據庫可能會比較容易,可是在數據庫的實際操做中會出現不少的問題:
1.信息重複:會形成存儲空間的浪費及一些其餘的問題,如(不當心輸入"標準間","標準" ,則在數據庫中將表示兩種不一樣的 客房類型)
2.更新異常:冗餘信息不只浪費存儲空間,還會增長更新的難度.
3.插入異常(沒法表示某些信息):如(一樣是標準間,卻由於入住人數不一樣而形成價格的差別)
4.刪除異常(丟失有用的信息):當刪除一行的信息時可能會丟失有用的信息.如(當"標準間"的住房記錄中只有一條信息,那 麼當咱們刪除此記錄的時候會把"標準間"這一記錄刪除,而"標準間"也就不復存在了)
>>>>規範設計
在設計數據庫時,三大範式良好的規避了以上可能出現的錯誤
1.第一範式
確保每列的原子性.
2.第二範式
確保表中的每列都和主鍵相關(直接相關和間接相關皆可).
3.第三範式
確保每列都和主鍵直接相關,而不是間接相關. (在上面的那張數據庫設計E-R圖就是符合第三範式的)