>>>> 為什么需要規范的數據庫設計
在實際的項目開發中,如果系統的數據存儲量較大,設計的表比較多,表和表之間的關系比較復雜,就需要首先考慮規范的數據庫設計,然后進行創建庫,創建表的工作.
如果設計不當,會存在數據操作異常,修改復雜,數據冗余等問題,程序性能會受到影響,通過進行規范化的數據庫設計,可以消除不必要的數據冗余,獲得合理的數據庫設計,提高項目的應用性能.
>>>>設計數據庫的步驟
1.收集信息
需要了解數據庫需要存儲哪些信息(數據),實現哪些功能.
2.標識實體
在收集需求信息后,必須標識數據庫要管理的關鍵對象或實體,實體可以是有形的事物,如人和產品;也可以是無形的事物,如商業交易公司部門或發薪周期...
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圖就是符合第三范式的)