一、數據庫設計的必要性
在實(shí)際的軟件項目中,如果系統中需要存儲的數據量比較大,需要設計的表比較多,表與表之間的關(guān)系比較復雜,那我們就需要進(jìn)行規范的數據庫設置。如果不經(jīng)過(guò)數據庫的設計,我們構建的數據庫不合理、不恰當,那么數據庫的維護、運行效率會(huì )有很大的問(wèn)題。這將直接影響到項目的運行性和可靠性。
二、什么是數據庫設計
數據庫設計實(shí)際上就是規劃和結構化數據庫中的數據對象以及這些數據對象之間的關(guān)系過(guò)程。
三、數據庫設計的重要性
不經(jīng)過(guò)設計的數據庫或是設計糟糕的數據庫很可能導致
1、 數據庫運行效率地下
2、 更新、刪除、添加數據出現問(wèn)題
良好設計的數據庫
1、 執行效率高
2、 使應用程序更便于開(kāi)發(fā)
3、 擴展性好
4、 維護性好
四、數據模型
數據模型就像是數據間聯(lián)系的一個(gè)輪廓圖,整個(gè)模型就像一個(gè)框架。
如果按照記錄間聯(lián)系的表示方式,對數據模型進(jìn)行分類(lèi),可以分為:層次模型、網(wǎng)狀模型、關(guān)系模型。前兩種又稱(chēng)為格式化數據模型。數據模型的好壞直接影響到數據庫的性能,所以數據模型的選擇是數據庫設計的首要任務(wù)。
實(shí)體-關(guān)系(E-R)數據模型
E-R數據模型(Entity-Relationship data model),即實(shí)體-關(guān)系數據模型。E-R數據模型不同于傳統的關(guān)系數據模型,它不是面向實(shí)現,而是面向現實(shí)物體的。
實(shí)體(Entity)
數據是用來(lái)描述現實(shí)中的物體的,而描述的對象都是形形色色的,有具體的、也有抽象的;有物理上存在的、也有概念性的。凡是可以互相區別而且可以被人們認識的事、物、概念等統統抽象為實(shí)體。多個(gè)相同的類(lèi)型的實(shí)體可以稱(chēng)為實(shí)體集(Entity set)。因此,在E-R數據模型中,也有型與值之分;實(shí)體可以作為型來(lái)定義,每個(gè)實(shí)體可以是它的實(shí)例和值。
屬性(Attribute)
實(shí)體一般具體若干特征,這些特征稱(chēng)為實(shí)體的屬性。而每個(gè)屬性都有自己的取值范圍,在E-R數據模型中稱(chēng)為值集(value set)。在同一實(shí)體集中,每個(gè)實(shí)體的屬性及其值集都是相同的,但可能取不同的值。屬性對應數據庫表的列。
關(guān)系(Relationship)
實(shí)體之間會(huì )有各種關(guān)系,這些關(guān)系抽象為聯(lián)系。不但實(shí)體可以有屬性,關(guān)系也可以有屬性。
五、數據庫設計步驟
數據庫設計可以分為以下幾個(gè)階段
1、 需求分析階段:分析客戶(hù)的業(yè)務(wù)需求,特別是數據方面的需求
2、 概要設計階段:繪制數據庫的E-R圖,并確認需求文檔的正確性和完整性,E-R圖是項目的設計人員、開(kāi)發(fā)人員、測試人員,以及和客戶(hù)進(jìn)行溝通的重要憑據
3、 詳細設計階段:將概要設計階段的E-R圖轉換為數據庫表,進(jìn)行邏輯設計,確定各個(gè)表之間的主外鍵關(guān)系,運用數據庫的三范式進(jìn)行審核,并進(jìn)行技術(shù)評審。最后決定選哪種數據庫(Oracle、SQLServer、MySQL)來(lái)建庫、建表。
需求分析階段:數據庫系統分析
秀氣分析階段的重點(diǎn)是調查、收集、分析客戶(hù)的業(yè)務(wù)數據需求以及數據的安全性、完整性需求等。
需求分析步驟:
1、 確認業(yè)務(wù)需求
2、 標識關(guān)系實(shí)體
3、 標識每個(gè)實(shí)體的具有的屬性
4、 確認實(shí)體之間的關(guān)系
概要設計階段:繪制E-R圖
作為數據庫設計者,你需要和項目組內其他成員分享你的設計思路,共同研討數據庫設計的合理性、安全性、完整性,并確認是否符合客戶(hù)的業(yè)務(wù)需求。那么使用E-R圖,這種圖形化的表示方式最為直觀(guān)。
* E-R圖中的實(shí)體、屬性和關(guān)系
上面的簡(jiǎn)單E-R圖可以看出用戶(hù)和收支之間的關(guān)系。在上圖中可以看出:用矩形表示實(shí)體,實(shí)體是一般名詞;橢圓表示屬性,一般也是名詞;菱形表示關(guān)系,一般是動(dòng)詞。
* 映射基數
映射基數表示可以通過(guò)關(guān)系與該實(shí)體的個(gè)數。對于實(shí)體集A和B之間的二元關(guān)系,可能的映射基數有:
1、 一對一:也就是A實(shí)體中最多只有一個(gè)B實(shí)體的關(guān)聯(lián),而B(niǎo)實(shí)體的最多只有一個(gè)A實(shí)體的關(guān)聯(lián)。用E-R圖表示:
2、 一對多:A實(shí)體可以與B實(shí)體任意數量的進(jìn)行關(guān)聯(lián),B中的實(shí)體最多與A中的一個(gè)實(shí)體關(guān)聯(lián)。E-R圖表示:
3、 多對一:A實(shí)體最多與一個(gè)B實(shí)體進(jìn)行關(guān)聯(lián),而B(niǎo)實(shí)體可以和任意多個(gè)A實(shí)體進(jìn)行關(guān)聯(lián)。E-R圖表示:
4、 多對多:A實(shí)體可以有多個(gè)B實(shí)體,而B(niǎo)實(shí)體也可以有任意多個(gè)A實(shí)體。E-R圖表示:
* E-R圖
E-R圖可以以圖形化的方式將數據庫的整個(gè)邏輯結構表示出來(lái),組成部分有:
1、 矩形表示實(shí)體集
2、 橢圓表示屬性
3、 菱形表示關(guān)系、
4、 直線(xiàn)用來(lái)連接實(shí)體集與屬性、實(shí)體集和關(guān)系
5、 直線(xiàn)箭頭表示實(shí)體集之間映射基數
詳細設計階段:將E-R圖轉換為表
步驟如下:
1、 將各個(gè)實(shí)體轉換為對應的表,將各屬性轉換為對應的列
2、 標識每張表的主鍵
3、 將實(shí)體之間的關(guān)系轉換為表與表之間的主外鍵關(guān)系
六、數據庫設計規范化
數據庫設計中經(jīng)常出現的問(wèn)題
1、 數據冗余大
2、 插入數據異常
3、 刪除異常
4、 更新異常
規范設計
一個(gè)較好的關(guān)系數據庫模型,它的每個(gè)關(guān)系中的屬性一定要滿(mǎn)足某種內在的語(yǔ)義條件,即要按一定的規范設計關(guān)系模型,這就是設計的規范化。
在數據庫設計時(shí),有一些專(zhuān)門(mén)的規則,稱(chēng)為數據庫的設計范式,遵循這些規則,就可以創(chuàng )建出良好的數據庫,數據庫著(zhù)名的三大范式理論:
1、 第一范式(1NF)
第一范式是滿(mǎn)足關(guān)系數據庫模型所要遵循的最基本的條件范式,幾關(guān)系中的每個(gè)屬性必須是不可再分的簡(jiǎn)單項,不能是屬性組合,即屬性的取值是不可拆分的原子值。
2、 第二范式(2NF)
第二范式是在第一范式的基礎上,確保表中的每列都和主鍵相關(guān)。其定義是如果一個(gè)關(guān)系滿(mǎn)足1NF,并且除了主鍵關(guān)系外的其他列都依賴(lài)于該主鍵,則滿(mǎn)足第二范式。
3、 第三范式(3NF)
第三范式是在第二范式的基礎上進(jìn)行的,第三范式的目標是確保每列都和主鍵列直接相關(guān),而不是間接相關(guān)的。其定義是:如果一個(gè)關(guān)系滿(mǎn)足2NF,并且除主鍵外的其他列都不傳遞依賴(lài)于該主鍵。
規范化和性能關(guān)系
為了滿(mǎn)足三大范式,數據庫的性能可能會(huì )有一定程度的降低。所以,在實(shí)際數據庫設計中,我們既要盡量滿(mǎn)足三大范式,從而避免數據冗余和各種數據庫的操作異常,同時(shí)也要考慮數據的訪(fǎng)問(wèn)性能。有時(shí)候,為了提高數據庫的訪(fǎng)問(wèn)效率,適當的允許少量數據冗余咧存在,才是最適合的數據庫設計方案。
聯(lián)系客服