详解数据库设计的四个阶段
一、系統(tǒng)需求分析階段
數(shù)據(jù)庫設(shè)計(jì)的第一步,就是了解與分析用戶需求,確定系統(tǒng)邊界信息需求、處理需求、安全性和完整性需求,然后編寫系統(tǒng)分析報(bào)告。
系統(tǒng)分析報(bào)告的內(nèi)容主要包括:
隨系統(tǒng)分析報(bào)告需提供的附件還有:
需求分析有兩種方法:自頂向下和自底向上。
具體來說,自底向上的分析,是從具體到抽象;而自頂向下的分析,則是從抽象到具體。舉個(gè)例子就比較好理解了:
比如你想搭建一個(gè)電子商務(wù)網(wǎng)站,如果你是先確定核心模塊包括哪些,然后根據(jù)每子模塊的屬性繼續(xù)往下分。那么這種就是自頂而下的分析。
反之,如果你是先整理出大量的屬性,然后對(duì)這些屬性進(jìn)行歸納總結(jié)出幾大模塊,那么就是自底向上的分析。
二、概念結(jié)構(gòu)設(shè)計(jì)階段
概念結(jié)構(gòu)設(shè)計(jì),就是將上一階段通過需求分析得到的用戶需求抽象為概念結(jié)構(gòu),或稱為概念模型(整個(gè)過程,其實(shí)就是我們前面提到的自底向上的分析)。描述概念模型的有力工具是E-R模型。
E-R模型由三大要素組成,分別是實(shí)體、屬性和聯(lián)系。
- 實(shí)體是一個(gè)數(shù)據(jù)的使用者,代表軟件系統(tǒng)中客觀存在的生活中的實(shí)物,比如物體、人、部門、項(xiàng)目等;
- 實(shí)體中的所有特性稱為屬性,如用戶有特定的姓名、性別、住址、電話、郵箱等元素;
- 實(shí)體與實(shí)體間存在聯(lián)系,如,某一個(gè)人在某個(gè)公司的某個(gè)部門工作,其中的實(shí)體有"某個(gè)人"、“某個(gè)公司”和"某個(gè)公司的某個(gè)部門"。
E-R模型的繪制需要遵循三范式原則:
三、邏輯結(jié)構(gòu)設(shè)計(jì)階段
數(shù)據(jù)庫邏輯設(shè)計(jì),則是將上一階段的概念結(jié)構(gòu)轉(zhuǎn)換成特定DBMS所支持的數(shù)據(jù)模型的過程。如下圖所示:
其中初始關(guān)系模式設(shè)計(jì)過程,就是將E-R模型向關(guān)系模式的轉(zhuǎn)換。
轉(zhuǎn)換中要遵循以下原則:
- 一個(gè)實(shí)體轉(zhuǎn)換為一個(gè)關(guān)系模式,實(shí)體的屬性就是關(guān)系的屬性,實(shí)體的鍵就是關(guān)系的鍵;
- 具有相同主鍵的關(guān)系可以合并;
- 一個(gè)聯(lián)系轉(zhuǎn)換為一個(gè)關(guān)系模式,分為以下幾種情況:
一個(gè)1:1的聯(lián)系可以轉(zhuǎn)化為一個(gè)獨(dú)立的關(guān)系模式,也可以與任意一端對(duì)應(yīng)的關(guān)系模式合并。
一個(gè)1:N的聯(lián)系可以轉(zhuǎn)換為一個(gè)獨(dú)立的關(guān)系模式,也可以與n端對(duì)應(yīng)的關(guān)系模式合并。
假如有老師和學(xué)校兩個(gè)實(shí)體,一個(gè)學(xué)校可以招收多個(gè)老師,但是一個(gè)老師只能選擇一個(gè)學(xué)校(這里不討論特殊情況), 因此學(xué)校和老師是1:N的關(guān)系。現(xiàn)在要轉(zhuǎn)換為關(guān)系模型,我們只需在老師的這端加上學(xué)校的唯一標(biāo)識(shí)即可,這樣做的原因是,因?yàn)橐粋€(gè)老師只能在一個(gè)學(xué)校,學(xué)校相對(duì)老師是唯一的。
一個(gè)M:N的聯(lián)系轉(zhuǎn)換為一個(gè)關(guān)系。關(guān)系的屬性由聯(lián)系本身的屬性和與之聯(lián)系的實(shí)體的主鍵組成,關(guān)系的主鍵由聯(lián)系中各實(shí)體的主鍵組合而成(組合鍵)。
四、物理結(jié)構(gòu)設(shè)計(jì)階段
物理設(shè)計(jì)是為邏輯數(shù)據(jù)模型選取一個(gè)最適合應(yīng)用環(huán)境的物理結(jié)構(gòu)。
1.選擇哪種數(shù)據(jù)庫
商業(yè)數(shù)據(jù)庫(更適合企業(yè)級(jí)項(xiàng)目),比如:Oracle、SQLServer
開源數(shù)據(jù)庫(適用于互聯(lián)網(wǎng)項(xiàng)目)。比如:MySQL、PgSQL
2.數(shù)據(jù)庫表級(jí)字段的命名規(guī)則:
可讀性原則:使用大寫和小寫來格式化的庫對(duì)象名字以獲得良好的可讀性
表意性原則:對(duì)象的名字應(yīng)該能夠描述它所標(biāo)識(shí)的對(duì)象
長名原則:盡可能少使用或者不使用縮寫,適用于數(shù)據(jù)庫(DATABASE)名之外的任一對(duì)象
3.數(shù)據(jù)庫字段類型選擇原則
以上選擇原則主要是從下面兩個(gè)角度考慮:
1)在對(duì)數(shù)據(jù)進(jìn)行比較(查詢條件、JOIN條件及排序)操作時(shí):同樣的數(shù)據(jù),字符處理往往比數(shù)字處理慢
2)在數(shù)據(jù)庫中,數(shù)據(jù)處理以頁為單位,列的長度越小,利于性能提升。
4.數(shù)據(jù)庫設(shè)計(jì)其它注意事項(xiàng)
1)區(qū)分業(yè)務(wù)主鍵和數(shù)據(jù)庫主鍵:業(yè)務(wù)主鍵用于標(biāo)識(shí)業(yè)務(wù)數(shù)據(jù),進(jìn)行表與表之間的關(guān)聯(lián);數(shù)據(jù)庫主鍵為了優(yōu)化數(shù)據(jù)存儲(chǔ)(Innodb會(huì)生成6個(gè)字節(jié)的隱含主鍵)
2)根據(jù)數(shù)據(jù)庫的類型,考慮主鍵是否要順序增長:有些數(shù)據(jù)庫是按主鍵的順序邏輯存儲(chǔ)的
3)主鍵的字段類型所占空間要盡可能的小:對(duì)于使用聚集索引方式存儲(chǔ)的表,每個(gè)索引后都會(huì)附加主鍵信息
嚴(yán)格來說,數(shù)據(jù)庫設(shè)計(jì)還有后續(xù)的實(shí)施階段和運(yùn)行維護(hù)階段,如果繼續(xù)展開下去又得半小時(shí),這里就不做復(fù)述了(其實(shí)是想偷懶)。感興趣的朋友可以在我整理的數(shù)據(jù)庫資源包里找到續(xù)篇,包里還有其他數(shù)據(jù)庫相關(guān)的思維導(dǎo)圖學(xué)習(xí)資料,一并分享給大家。
總結(jié)
以上是生活随笔為你收集整理的详解数据库设计的四个阶段的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021 ICPC Gran Premi
- 下一篇: liferay6.2 mysql_lif