登錄

數(shù)據(jù)庫(kù)設(shè)計(jì)

百科 > 信息管理術(shù)語(yǔ) > 數(shù)據(jù)庫(kù)設(shè)計(jì)

1.什么是數(shù)據(jù)庫(kù)設(shè)計(jì)[1]

數(shù)據(jù)庫(kù)設(shè)計(jì)是指對(duì)于一個(gè)給定的應(yīng)用環(huán)境,構(gòu)造最優(yōu)的數(shù)據(jù)庫(kù)模式,建立數(shù)據(jù)庫(kù)及其應(yīng)用系統(tǒng),使之能夠有效地存儲(chǔ)數(shù)據(jù),滿足各種用戶的應(yīng)用需求

2.數(shù)據(jù)庫(kù)設(shè)計(jì)的任務(wù)[2]

數(shù)據(jù)庫(kù)設(shè)計(jì)的任務(wù)是根據(jù)應(yīng)用系統(tǒng)業(yè)務(wù)信息需求、處理需求及數(shù)據(jù)庫(kù)的支持環(huán)境,設(shè)計(jì)出數(shù)據(jù)模式(包括外模式、邏輯模式及內(nèi)模式)以及相應(yīng)的應(yīng)用程序。

數(shù)據(jù)庫(kù)設(shè)計(jì)有兩個(gè)最重要的目標(biāo),即滿足應(yīng)用功能需求和良好的數(shù)據(jù)庫(kù)性能。滿足應(yīng)用功能需求,主要是指把用戶當(dāng)前應(yīng)用需求以及可預(yù)知的將來(lái)應(yīng)用需求所需要的數(shù)據(jù)及其聯(lián)系能全部準(zhǔn)確地存放在數(shù)據(jù)庫(kù)中,在滿足用戶性能要求的前提下根據(jù)用戶需嗄對(duì)數(shù)據(jù)進(jìn)行增、刪、改、查等操作。良好的數(shù)據(jù)庫(kù)性能是指數(shù)據(jù)庫(kù)應(yīng)有良好的存儲(chǔ)結(jié)構(gòu),良好的數(shù)據(jù)完整性、數(shù)據(jù)一致性以及安全性等。

3.數(shù)據(jù)庫(kù)設(shè)計(jì)的內(nèi)容[2]

根據(jù)設(shè)計(jì)任務(wù),數(shù)據(jù)庫(kù)設(shè)計(jì)一般包括數(shù)據(jù)庫(kù)的結(jié)構(gòu)設(shè)計(jì)和行為設(shè)計(jì)兩方面內(nèi)容.?dāng)?shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)是指系統(tǒng)整體邏輯模式與子模式的設(shè)計(jì),是對(duì)數(shù)據(jù)的分析設(shè)計(jì);數(shù)據(jù)咋的行為設(shè)計(jì)是指施加在數(shù)據(jù)庫(kù)上的動(dòng)態(tài)操作的設(shè)計(jì).是對(duì)應(yīng)用系統(tǒng)功能的設(shè)汁。在設(shè)汁的過(guò)程中,應(yīng)該把對(duì)數(shù)據(jù)庫(kù)的結(jié)構(gòu)設(shè)計(jì)和行為設(shè)計(jì)兩方面緊密結(jié)合起米,將這兩方面的需求分析,抽象、設(shè)計(jì)及實(shí)現(xiàn)在各個(gè)階段同時(shí)進(jìn)行、互相參照、互相補(bǔ)充.不斷完善。

數(shù)據(jù)庫(kù)設(shè)計(jì)結(jié)果不是唯一的,針對(duì)同一個(gè)業(yè)務(wù)需求,不同的設(shè)計(jì)者可能沒汁出不同的數(shù)據(jù)庫(kù)模式.同時(shí).由于在設(shè)計(jì)的過(guò)程中各種需求和制約因素的存存,數(shù)據(jù)庫(kù)的設(shè)計(jì)往往很難達(dá)到非常滿意的效果。經(jīng)常是滿足某方面的需要而降低另一方面的要求.因此需要設(shè)計(jì)者在各種因素中權(quán)衡取舍.從某種意義上說(shuō),數(shù)據(jù)庫(kù)設(shè)計(jì)技術(shù)也是一門藝術(shù)。

4.數(shù)據(jù)庫(kù)設(shè)計(jì)的方法[3]

1.直觀設(shè)計(jì)法

直觀設(shè)計(jì)法其實(shí)算不上什么方法,主要是指在數(shù)據(jù)庫(kù)設(shè)計(jì)的初始階段,數(shù)據(jù)庫(kù)設(shè)計(jì)人員根據(jù)自己的經(jīng)驗(yàn)和水平,運(yùn)用一定的技巧進(jìn)行數(shù)據(jù)庫(kù)的設(shè)計(jì),這種方法缺乏科學(xué)理論和工程方法的支持,很難保證設(shè)計(jì)的質(zhì)量。

2.規(guī)范設(shè)計(jì)法

為改變?cè)O(shè)計(jì)人員直觀、僅憑經(jīng)驗(yàn)的做法,人們又開始運(yùn)用軟件工程的思想來(lái)設(shè)計(jì)數(shù)據(jù)庫(kù),提出了各種設(shè)計(jì)準(zhǔn)則和規(guī)程,對(duì)數(shù)據(jù)庫(kù)進(jìn)行規(guī)范化設(shè)計(jì)。目前常用的規(guī)范設(shè)計(jì)法大多起源于“新奧爾良法”(1978年10月來(lái)自歐美國(guó)家的主要數(shù)據(jù)庫(kù)專家在美國(guó)的新奧爾良市討論數(shù)據(jù)庫(kù)設(shè)計(jì)的問題,并提出了相應(yīng)的工作規(guī)范,因此得名),將數(shù)據(jù)庫(kù)設(shè)計(jì)分為:需求分析、概念設(shè)計(jì)、邏輯設(shè)計(jì)和物理設(shè)計(jì)4個(gè)階段。

3.計(jì)算機(jī)輔助設(shè)計(jì)法

計(jì)算機(jī)輔助設(shè)計(jì)法是指在數(shù)據(jù)庫(kù)設(shè)計(jì)的某些過(guò)程中模擬某一規(guī)范設(shè)計(jì)方法,通過(guò)人機(jī)交互實(shí)現(xiàn)部分設(shè)計(jì),在這一過(guò)程中需要有相關(guān)知識(shí)和經(jīng)驗(yàn)的人的支持。

4.自動(dòng)化設(shè)計(jì)法

用來(lái)幫助設(shè)計(jì)數(shù)據(jù)庫(kù)或數(shù)據(jù)庫(kù)應(yīng)用軟件的工具稱為自動(dòng)化設(shè)計(jì)工具,例如:OracleDesigner、PowerDesigner等,它可以自動(dòng)并加速完成設(shè)計(jì)數(shù)據(jù)庫(kù)系統(tǒng)的任務(wù)。用自動(dòng)化設(shè)計(jì)工具完成設(shè)計(jì)數(shù)據(jù)庫(kù)系統(tǒng)任務(wù)的方法稱為自動(dòng)化設(shè)計(jì)法。

5.數(shù)據(jù)庫(kù)設(shè)計(jì)的原則[4]

1.要善于識(shí)別與正確處理多對(duì)多的關(guān)系

若兩個(gè)實(shí)體之間存在多對(duì)多的關(guān)系,則應(yīng)消除這種關(guān)系。消除的辦法是,在兩者之間增加第三個(gè)實(shí)體。這樣,原來(lái)一個(gè)多對(duì)多的關(guān)系,現(xiàn)在變?yōu)閮蓚€(gè)一對(duì)多的關(guān)系。要將原來(lái)兩個(gè)實(shí)體的屬性合理地分配到三個(gè)實(shí)體中去。這里的第三個(gè)實(shí)體,實(shí)質(zhì)上是一個(gè)較復(fù)雜的關(guān)系,它對(duì)應(yīng)一張基本表。一般來(lái)講,數(shù)據(jù)庫(kù)設(shè)計(jì)工具不能識(shí)別多對(duì)多的關(guān)系,但能處理多對(duì)多的關(guān)系。

2.索引(Index)的使用原則

創(chuàng)建索引一般有以下兩個(gè)目的,即維護(hù)被索引列的唯一性和提供快速訪問表中數(shù)據(jù)的策略。大型數(shù)據(jù)庫(kù)有兩種索引,即簇索引和非簇索引,一個(gè)沒有簇索引的表是按堆結(jié)構(gòu)存儲(chǔ)數(shù)據(jù),所有的數(shù)據(jù)均添加在表的尾部,而建立了簇索引的表,其數(shù)據(jù)在物理上會(huì)按照簇索引鍵的順序存儲(chǔ)。一個(gè)表只允許有一個(gè)簇索引,因此根據(jù)B樹的結(jié)構(gòu)可以認(rèn)為添加任何一種索引均能提高按索引列查詢的速度,但會(huì)降低插入、更新、刪除操作的性能,尤其是當(dāng)填充因子較大時(shí)。所以對(duì)索引較多的表進(jìn)行頻繁的插入、更新、刪除操作時(shí),建表和索引時(shí)應(yīng)設(shè)置較小的填充因子,以便在各數(shù)據(jù)頁(yè)中留下較多的自由空間,減少頁(yè)分割及重新組織的工作。

3.?dāng)?shù)據(jù)的一致性和完整性

為了保證數(shù)據(jù)庫(kù)的一致性和完整性,設(shè)計(jì)人員往往會(huì)設(shè)計(jì)過(guò)多的表間關(guān)聯(lián)(Relation),盡可能地降低數(shù)據(jù)的冗余。表間關(guān)聯(lián)是一種強(qiáng)制性措施,建立后,對(duì)父表(Parent Table)和子表(ChiLdTable)的插入、更新、刪除操作均要占用系統(tǒng)的開銷。另外,最好不要用Identify屬性字段作為主鍵與子表關(guān)聯(lián)。如果數(shù)據(jù)冗余低,數(shù)據(jù)的完整性容易得到保證,但增加了表間連接查詢的操作。

為了提高系統(tǒng)的響應(yīng)時(shí)間,合理的數(shù)據(jù)冗余也是必要的。使用規(guī)則(Rule)和約束(Check)來(lái)防止系統(tǒng)操作人員誤輸人造成的數(shù)據(jù)的錯(cuò)誤是設(shè)計(jì)人員的另一種常用手段,但是,不必要的規(guī)則和約束也會(huì)占用系統(tǒng)的不必要開銷。需要注意的是,約束對(duì)數(shù)據(jù)的有效性驗(yàn)證要比規(guī)則快。所有這些,設(shè)計(jì)人員在設(shè)計(jì)階段應(yīng)根據(jù)系統(tǒng)操作的類型、對(duì)數(shù)據(jù)訪問的頻度加以均衡考慮。

4.事務(wù)的陷阱

事務(wù)是能一次性完成的一組操作。這些操作是單個(gè)的操作,數(shù)據(jù)庫(kù)能夠保證這組操作要么全部都完成,要么一點(diǎn)都不做。正是大型數(shù)據(jù)庫(kù)的這一特性,使得數(shù)據(jù)的完整性得到了極大的保證。

5.通俗地理解3個(gè)范式

通俗地理解3個(gè)范式,對(duì)于數(shù)據(jù)庫(kù)設(shè)計(jì)大有好處。在數(shù)據(jù)庫(kù)設(shè)計(jì)中,為了更好地應(yīng)用3個(gè)范式,就必須通俗地理解3個(gè)范式。第一范式:1NF是對(duì)屬性的原子性約束,要求屬性具有原子性,不可再分解。第二范式:2NF是對(duì)記錄的唯一性約束,要求記錄有唯一標(biāo)識(shí),即實(shí)體的唯一性。第三范式:3NF是對(duì)字段冗余性的約束,即任何字段不能由其他字段派生出來(lái),它要求字段沒有冗余。

沒有冗余的數(shù)據(jù)庫(kù)設(shè)計(jì)可以做到。但是,沒有冗余的數(shù)據(jù)庫(kù)未必是最好的數(shù)據(jù)庫(kù),有時(shí)為了提高運(yùn)行效率,就必須降低范式標(biāo)準(zhǔn),適當(dāng)保留冗余數(shù)據(jù)。具體做法是,在概念數(shù)據(jù)模型設(shè)計(jì)時(shí)遵守第三范式,降低范式標(biāo)準(zhǔn)的工作放到物理數(shù)據(jù)模型設(shè)計(jì)時(shí)考慮。降低范式就是增加字段,允許冗余。

6.正確認(rèn)識(shí)數(shù)據(jù)冗余

主鍵與外鍵在多表中的重復(fù)出現(xiàn),不屬于數(shù)據(jù)冗余。這個(gè)概念必須清楚,事實(shí)上有許多人還不清楚。非鍵字段的重復(fù)出現(xiàn),才是數(shù)據(jù)冗余。而且是一種低級(jí)冗余,即重復(fù)性的冗余。高級(jí)冗余不是字段的重復(fù)出現(xiàn),而是字段的派生出現(xiàn)。

7.?dāng)?shù)據(jù)類型的選擇

數(shù)據(jù)類型的合理選擇對(duì)于數(shù)據(jù)庫(kù)的性能和操作具有很大的影響,有關(guān)這方面的書籍也有不少的闡述,這里主要介紹幾點(diǎn)經(jīng)驗(yàn)。

Identify字段不要作為表的主鍵與其他表關(guān)聯(lián),這將會(huì)影響到該表的數(shù)據(jù)遷移。

Text和Image字段屬指針型數(shù)據(jù),主要用來(lái)存放二進(jìn)制大型對(duì)象(BLOB)。這類數(shù)據(jù)的操作比其他數(shù)據(jù)類型要慢,因此要避開使用。但是在某些場(chǎng)合使用二進(jìn)制對(duì)象字段來(lái)存儲(chǔ)不定長(zhǎng)度的海量數(shù)據(jù)又是一個(gè)不錯(cuò)的選擇。

8.信息隱藏

信息隱藏是軟件工程最重要的基本原則之一。簡(jiǎn)單地說(shuō)就是信息的作用域越小越好,只有需要直接使用它的模塊才能看到它。數(shù)據(jù)庫(kù)的透明度越大越好。使數(shù)據(jù)庫(kù)黑盒化,即透明度高的方法很多,除了設(shè)計(jì)上的局部化處理外,還可以利用DBMS的觸發(fā)器、存儲(chǔ)過(guò)程、函數(shù)等,把數(shù)據(jù)庫(kù)中無(wú)法簡(jiǎn)化的復(fù)雜表關(guān)系封裝到黑盒子中,隱藏起來(lái),特別是放到服務(wù)器端,其優(yōu)越性更是多方面的。

6.數(shù)據(jù)庫(kù)設(shè)計(jì)的特點(diǎn)[5]

數(shù)據(jù)庫(kù)設(shè)計(jì)的工作量大且比較復(fù)雜,是一項(xiàng)數(shù)據(jù)庫(kù)工程,也是一項(xiàng)軟件工程。數(shù)據(jù)庫(kù)設(shè)計(jì)的很多階段都可以對(duì)應(yīng)于軟件工程的階段,軟件工程的某些方法和工具同樣也適合于數(shù)據(jù)庫(kù)工程。但由于數(shù)據(jù)庫(kù)設(shè)計(jì)是與用戶的業(yè)務(wù)需求緊密相關(guān)的,因此,它還有很多自己的特點(diǎn)。

1.綜合性

數(shù)據(jù)庫(kù)設(shè)計(jì)涉及的范圍很廣,包含了計(jì)算機(jī)專業(yè)知識(shí)及業(yè)務(wù)系統(tǒng)的專業(yè)知識(shí),同時(shí)它還要解決技術(shù)及非技術(shù)兩方面的問題。

非技術(shù)問題包括組織機(jī)構(gòu)的調(diào)整,經(jīng)營(yíng)方針的改變,管理體制的變更等。這些問題都不是設(shè)計(jì)人員所能解決的,但新的管理信息系統(tǒng)要求必須有與之相適應(yīng)的新的組織機(jī)構(gòu)、新的經(jīng)營(yíng)方針、新的管理體制,這就是一個(gè)較為尖銳的矛盾。另一方面,由于同時(shí)具備數(shù)據(jù)庫(kù)和業(yè)務(wù)兩方面知識(shí)的人很少,因此,數(shù)據(jù)庫(kù)設(shè)計(jì)者一般都需要花費(fèi)相當(dāng)多的時(shí)間去熟悉應(yīng)用業(yè)務(wù)系統(tǒng)知識(shí),這一過(guò)程有時(shí)很麻煩,可能會(huì)使設(shè)計(jì)人員產(chǎn)生厭煩情緒,從而影響系統(tǒng)的最后成功。而且,由于承擔(dān)部門和應(yīng)用部門是一種委托雇傭關(guān)系,在客觀上存在著一種對(duì)立的勢(shì)態(tài),當(dāng)在某些問題上意見不一致時(shí)會(huì)使雙方關(guān)系比較緊張。這在MIS(管理信息系統(tǒng))中尤為突出。

2.結(jié)構(gòu)設(shè)計(jì)與行為設(shè)計(jì)相分離

結(jié)構(gòu)設(shè)計(jì)是指數(shù)據(jù)庫(kù)的模式結(jié)構(gòu)設(shè)計(jì),包括概念結(jié)構(gòu)、邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu);行為設(shè)計(jì)是指應(yīng)用程序設(shè)計(jì),包括功能組織、流程控制等方面的設(shè)計(jì)。在傳統(tǒng)的軟件工程中,比較注重處理過(guò)程的設(shè)計(jì),不太注重?cái)?shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)。在一般的應(yīng)用程序設(shè)計(jì)中只要可能就盡量推遲數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì),這種方法對(duì)于數(shù)據(jù)庫(kù)設(shè)計(jì)就不太適用。

數(shù)據(jù)庫(kù)設(shè)計(jì)與傳統(tǒng)的軟件工程的做法正好相反。數(shù)據(jù)庫(kù)設(shè)計(jì)的主要精力首先是放在數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)上,比如數(shù)據(jù)庫(kù)的表結(jié)構(gòu)、視圖等。

7.數(shù)據(jù)庫(kù)設(shè)計(jì)的一般步驟[6]

1.確定創(chuàng)建數(shù)據(jù)庫(kù)的目的

設(shè)計(jì)數(shù)據(jù)庫(kù)和用戶的需求息息相關(guān)。首先,要明確創(chuàng)建數(shù)據(jù)庫(kù)的目的以及如何使用,用戶希望從數(shù)據(jù)庫(kù)得到什么信息,由此可以確定需要什么樣的表和定義哪些字段;其次,要與用戶進(jìn)行交流,集體討論需要數(shù)據(jù)庫(kù)解決的問題,并描述需要數(shù)據(jù)庫(kù)完成的各項(xiàng)功能。

2.確定數(shù)據(jù)庫(kù)中需要的表

一個(gè)數(shù)據(jù)庫(kù)可能是由若干個(gè)表組成的,所以確定表是數(shù)據(jù)庫(kù)設(shè)計(jì)過(guò)程中最重要的環(huán)節(jié)。在設(shè)計(jì)表時(shí),應(yīng)該按以下設(shè)計(jì)原則對(duì)信息進(jìn)行分類。

(1)每個(gè)表最好只包含關(guān)于一個(gè)主題的信息。

(2)同一個(gè)表中不允許出現(xiàn)同名字段。

(3)表間不應(yīng)有重復(fù)信息。

(4)當(dāng)一個(gè)表中的字段信息太多時(shí),可根據(jù)使用頻率將其分解為兩個(gè)表。

3.確定字段

確定表的過(guò)程實(shí)際上就是定義字段的過(guò)程,字段是表的結(jié)構(gòu),記錄是表的內(nèi)容。所以確定字段是設(shè)計(jì)數(shù)據(jù)庫(kù)不可缺少的環(huán)節(jié)。在定義每個(gè)表字段時(shí),注意以下幾點(diǎn)。

(1)主題相關(guān)。將所有原始字段信息分配至各個(gè)表中,使每個(gè)字段直接與表的主題相關(guān)。

(2)信息獨(dú)立。字段信息不包含能夠使用推導(dǎo)和計(jì)算得出的數(shù)據(jù)信息。

(3)方便維護(hù)。除主鍵字段外,兩個(gè)不同表之間不能包含其他的相同字段。

4.確定主鍵

為了連接保存在不同表中的信息,使多表協(xié)同工作,在Access數(shù)據(jù)庫(kù)的表中必須要確定主鍵。主鍵是表中能夠唯一確定一個(gè)記錄的字段或字段集合。如“學(xué)號(hào)”字段可以作為“學(xué)生”表和“學(xué)生其他情況”表中的主鍵,而“學(xué)號(hào)”和“課程代碼”兩個(gè)字段可以共同承擔(dān)“成績(jī)”表中的主鍵責(zé)任。

5.確定表之間的關(guān)系

因?yàn)橐呀?jīng)將信息分配到各個(gè)表中,并且定義了主鍵字段,若想將保存在不同表中的相關(guān)信息重新組合到一起,必須定義表與表之間的關(guān)系,不同表之間確立了關(guān)系,才能進(jìn)行相互訪問。

6.確定各個(gè)表的使用數(shù)據(jù)

表的結(jié)構(gòu)設(shè)計(jì)達(dá)到設(shè)計(jì)要求后,就可針對(duì)各個(gè)表分別準(zhǔn)備要存放的數(shù)據(jù)了,即常說(shuō)的表中記錄內(nèi)容。

7.確定數(shù)據(jù)的使用場(chǎng)所和管理手段

利用Access2003數(shù)據(jù)庫(kù)提供的查詢、報(bào)表、窗體等高級(jí)工具,根據(jù)實(shí)際使用要求,考慮在數(shù)據(jù)庫(kù)中創(chuàng)建哪些查詢,設(shè)計(jì)哪些打印報(bào)表,規(guī)劃輸入數(shù)據(jù)窗體與顯示結(jié)果窗體的設(shè)計(jì)風(fēng)格等具體應(yīng)用。

評(píng)論  |   0條評(píng)論