彭嬌++聶慧
摘 要:作為一門應(yīng)用性很強(qiáng)的學(xué)科,數(shù)據(jù)庫技術(shù)在軟件開發(fā)中的應(yīng)用越來越廣泛了。該文對關(guān)系型數(shù)據(jù)庫設(shè)計(jì)的理論及實(shí)踐進(jìn)行了簡單分析。首先,簡單介紹了數(shù)據(jù)庫設(shè)計(jì)的重要性;其次分析了關(guān)系型數(shù)據(jù)庫設(shè)計(jì)步驟及原則;最后結(jié)合實(shí)例,分析了在軟件開發(fā)中的數(shù)據(jù)庫設(shè)計(jì)實(shí)踐。
關(guān)鍵詞:關(guān)系型 數(shù)據(jù)庫 理論 實(shí)踐
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1674-098X(2014)07(b)-0054-01
數(shù)據(jù)庫設(shè)計(jì)(Database Design)是指根據(jù)用戶的需求,在某一具體的數(shù)據(jù)庫管理系統(tǒng)上,設(shè)計(jì)數(shù)據(jù)庫的結(jié)構(gòu)和建立數(shù)據(jù)庫的過程。而關(guān)系型數(shù)據(jù)庫則是創(chuàng)建在關(guān)系模型基礎(chǔ)上的數(shù)據(jù)庫,是借助于集合代數(shù)等數(shù)學(xué)概念和方法來處理數(shù)據(jù),使之能夠有效地存儲數(shù)據(jù),以滿足用戶的各種應(yīng)用需求。
1 數(shù)據(jù)庫的重要性
數(shù)據(jù)庫設(shè)計(jì)是計(jì)算機(jī)軟件設(shè)計(jì)的重要內(nèi)容,同時也是支撐計(jì)算機(jī)軟件系統(tǒng)運(yùn)行的關(guān)鍵,是軟件設(shè)計(jì)的起點(diǎn),起著決定性的質(zhì)變作用,必須對數(shù)據(jù)庫的設(shè)計(jì)高度重視起來。
(1)數(shù)據(jù)庫設(shè)計(jì)最起碼要占用整個項(xiàng)目開發(fā)的40%以上的時間。數(shù)據(jù)庫是用戶需求的直觀反應(yīng)和表現(xiàn),需求的要求和變化都要一一體現(xiàn)在數(shù)據(jù)庫的設(shè)計(jì)中。
(2)數(shù)據(jù)庫設(shè)計(jì)不僅僅停留在頁面demo的表面,還有模塊交互、表之間的聯(lián)系、中轉(zhuǎn)數(shù)據(jù)等所需要的字段。因此,在數(shù)據(jù)庫設(shè)計(jì)中不僅包括基本的數(shù)據(jù)存儲,還包括邏輯數(shù)據(jù)的存儲。
(3)數(shù)據(jù)庫設(shè)計(jì)完成后,項(xiàng)目80%的設(shè)計(jì)開發(fā)在腦海中已經(jīng)完成了。在設(shè)計(jì)每一個字段時,已經(jīng)考慮好這些字段的運(yùn)用,在表中如何體現(xiàn)。當(dāng)數(shù)據(jù)庫設(shè)計(jì)完成后,程序中所有的實(shí)現(xiàn)思路和實(shí)現(xiàn)方式已經(jīng)考慮清楚了,否則會造成一系列不可預(yù)測的問題。
由此可見,數(shù)據(jù)庫設(shè)計(jì)在整個軟件開發(fā)過程中起到了舉足輕重的作用。
2 關(guān)系型數(shù)據(jù)庫設(shè)計(jì)的基本步驟
關(guān)系型數(shù)據(jù)庫設(shè)計(jì)的過程可大體分為四個時期七個階段。
(1)用戶需求分析時期,主要是了解和分析用戶對數(shù)據(jù)的功能需求和應(yīng)用需求,是整個設(shè)計(jì)過程的基礎(chǔ),事關(guān)整個數(shù)據(jù)庫應(yīng)用系統(tǒng)設(shè)計(jì)的成敗。
(2)數(shù)據(jù)庫設(shè)計(jì)時期,主要是將用戶需求進(jìn)行綜合、歸納與抽象,形成一個獨(dú)立于具體DBMS的數(shù)據(jù)模型,可用實(shí)體—聯(lián)系模型來表示,然后將其轉(zhuǎn)換為已選好的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)RDBMS所支持的一組關(guān)系模式并為其選取一個適合應(yīng)用環(huán)境的物理結(jié)構(gòu),包括存儲結(jié)構(gòu)和存取方法。
(3)數(shù)據(jù)庫實(shí)現(xiàn)時期,包括數(shù)據(jù)庫結(jié)構(gòu)創(chuàng)建階段和應(yīng)用行為設(shè)計(jì)與實(shí)現(xiàn)階段,是根據(jù)數(shù)據(jù)庫的物理模型創(chuàng)建數(shù)據(jù)庫、創(chuàng)建表、創(chuàng)建索引、創(chuàng)建聚簇等。
(4)數(shù)據(jù)庫運(yùn)行與維護(hù)階時期,最后一個階段則是數(shù)據(jù)庫應(yīng)用系統(tǒng)經(jīng)過試運(yùn)行后即可投入正式運(yùn)行。
3 關(guān)系型數(shù)據(jù)庫設(shè)計(jì)的幾個原則
在進(jìn)行關(guān)系型數(shù)據(jù)庫的設(shè)計(jì)過程中,要遵循以下幾個原則,借此可以提高數(shù)據(jù)庫的存儲效率、數(shù)據(jù)完整性和可擴(kuò)展性。
3.1 命名規(guī)范化
在概念模型設(shè)計(jì)中,對于出現(xiàn)的實(shí)體、屬性及相關(guān)表的結(jié)構(gòu)要統(tǒng)一。例如在數(shù)據(jù)庫設(shè)計(jì)中,指定學(xué)生Sstudent,專指本科生,相關(guān)的屬性有:學(xué)號、姓名、性別、出生年月等,及每個屬性的類型、長度、取值范圍等都要進(jìn)行確定,這樣就能保證在命名時不會出現(xiàn)同名異義或異名同義、屬性特征及結(jié)構(gòu)沖突等問題。
3.2 數(shù)據(jù)的一致性和完整性
在關(guān)系型數(shù)據(jù)庫中可以采用域完整性、實(shí)體完整性和參照完整性等約束條件來滿足其數(shù)據(jù)的一致性和完整性,用check、default、null、主鍵和外鍵約束來實(shí)現(xiàn)。
3.3 數(shù)據(jù)冗余
數(shù)據(jù)庫中的數(shù)據(jù)應(yīng)盡可能地減少冗余,這就意味著重復(fù)數(shù)據(jù)應(yīng)該減少到最少。例如:若一個部門職員的電話存儲在不同的表中,假設(shè)該職員的電話號碼發(fā)生變化時,冗余數(shù)據(jù)的存在就要求對多個表進(jìn)行更新操作,若某個表不幸被忽略了,那么就會造成數(shù)據(jù)不一致的情況。所以在數(shù)據(jù)庫設(shè)計(jì)中一定要盡可能存在少地冗余。
3.4 范式理論
在關(guān)系數(shù)據(jù)庫設(shè)計(jì)時,一般是通過設(shè)計(jì)滿足某一范式來獲得一個好的數(shù)據(jù)庫模式,通常認(rèn)為3NF在性能、擴(kuò)展性和數(shù)據(jù)完整性方面達(dá)到了最好的平衡,因此,一般數(shù)據(jù)庫設(shè)計(jì)要求達(dá)到3NF,消除數(shù)據(jù)依賴中不合理的部分,最終實(shí)現(xiàn)使一個關(guān)系僅描述一個實(shí)體或者實(shí)體間一種聯(lián)系的目的。
4 以具體實(shí)例設(shè)計(jì)的關(guān)系型數(shù)據(jù)庫設(shè)計(jì)的實(shí)踐
以大學(xué)教學(xué)管理軟件開發(fā)中的數(shù)據(jù)庫設(shè)計(jì)為例進(jìn)行分析。
(1)重視系統(tǒng)的總體設(shè)計(jì)。總體設(shè)計(jì)不僅與軟件項(xiàng)目順利開展的進(jìn)度有關(guān),還與是否可以達(dá)到預(yù)期的項(xiàng)目開發(fā)目標(biāo)有關(guān)。下面以大學(xué)教學(xué)管理數(shù)據(jù)庫開發(fā)為例進(jìn)行說明。
(2)首先對大學(xué)教學(xué)管理軟件所涉及的數(shù)據(jù)進(jìn)行詳細(xì)的分析。按照上述的設(shè)計(jì)思想,共設(shè)計(jì)了如下表,例如,學(xué)生關(guān)系表、專業(yè)關(guān)系表等,然后創(chuàng)建視圖和存儲過程。
①學(xué)生關(guān)系表S:S#(學(xué)號),SNAME(姓名),SSEX(性別),SBIRTHIN(出生年月)等字段,主鍵為S#(學(xué)號)。②專業(yè)關(guān)系表SS:SCODE#(專業(yè)代碼),SSNAME(專業(yè)名稱)等字段,主鍵為SCODE#(專業(yè)代碼)。③課程關(guān)系表C:C#(課程號),CNAME(課程名稱),CLASSH(學(xué)時)等字段,主鍵為C#(課程號)。④設(shè)置關(guān)系表CS:SCODE#(專業(yè)代碼),C#(課程號)等字段,主鍵為SCODE#(專業(yè)代碼),C#(課程號)。⑤學(xué)習(xí)關(guān)系表SC:S#(學(xué)號),C#(課程號),GRADE(分?jǐn)?shù))等字段,主鍵為S#(學(xué)號),C#(課程號)。⑥教師關(guān)系表T:T#(教工號),TNAME(姓名),TSEX(性別)等字段,主鍵為T#(教工號)。⑦講授關(guān)系表TEACH:T#(教工號),C#(課程號)等字段,主鍵為TEACH:T#(教工號),C#(課程號)。
數(shù)據(jù)庫中的每一個表都建立了主鍵,部分表為了滿足查詢和排序的需要,還需要建立索引。例如查詢學(xué)生信息時,除了按學(xué)號查詢,有時還會用到按照班級查詢。因此,在學(xué)生表中除了對主鍵“學(xué)號”建立主索引外,也對“班級”建立了次索引。同時,在數(shù)據(jù)庫中,數(shù)據(jù)按照主鍵和外鍵的關(guān)系,建立起了關(guān)系。另外,根據(jù)查詢需要,還建立了教學(xué)安排視圖、課程成績視圖和學(xué)生平均成績視圖及相關(guān)的存儲過程。
5 結(jié)語
通過前面的分析和研究,數(shù)據(jù)庫的設(shè)計(jì)是非常重要的,為之后整個系統(tǒng)的穩(wěn)定可靠運(yùn)行提供了穩(wěn)固的后臺保障。數(shù)據(jù)庫必須與應(yīng)用程序的業(yè)務(wù)需求相輔相成,在設(shè)計(jì)過程中要嚴(yán)格遵循關(guān)系數(shù)據(jù)庫的設(shè)計(jì)步驟,并靈活運(yùn)用上述原則。
參考文獻(xiàn)
[1] 潘博.計(jì)算機(jī)軟件數(shù)據(jù)庫設(shè)計(jì)的重要性以及原則研究[J].計(jì)算機(jī)光盤軟件與應(yīng)用,2013(8).
[2] 王曉軍.數(shù)據(jù)庫設(shè)計(jì)的理論和實(shí)踐在軟件開發(fā)中的作用[J].科技與生活,2012 (8).
[3] 孟志偉.管理系統(tǒng)的數(shù)據(jù)庫設(shè)計(jì)[J].信息與電腦,2009(7).
[4] 李長海,郭穎,董廣輝.淺析數(shù)據(jù)庫設(shè)計(jì)[J].數(shù)字技術(shù)與應(yīng)用,2010(8).
[5] 李俊山,羅榮.數(shù)據(jù)庫原理及應(yīng)用[M].清華大學(xué)出版社,2012.endprint