官术网_书友最值得收藏!

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

數(shù)據(jù)庫是開發(fā)應(yīng)用程序的基礎(chǔ),數(shù)據(jù)庫設(shè)計(jì)的質(zhì)量優(yōu)劣是決定應(yīng)用程序能否開發(fā)成功的關(guān)鍵環(huán)節(jié)之一。數(shù)據(jù)庫的設(shè)計(jì)是從用戶的數(shù)據(jù)需求、處理要求和建立數(shù)據(jù)庫的環(huán)境條件,如硬件特性、操作系統(tǒng)和DBMS特性及其他限制等出發(fā),把給定的應(yīng)用環(huán)境內(nèi)存在的數(shù)據(jù)合理地組織起來,逐步抽象成已經(jīng)選定的某個(gè)DBMS能夠定義和描述的具體數(shù)據(jù)結(jié)構(gòu)的過程。根據(jù)這一數(shù)據(jù)結(jié)構(gòu)能夠建立既能反映現(xiàn)實(shí)世界中信息間的聯(lián)系,滿足用戶的數(shù)據(jù)需求和處理要求,又能被某個(gè)DBMS所接受,實(shí)現(xiàn)系統(tǒng)目標(biāo)的數(shù)據(jù)庫。

1.3.1 數(shù)據(jù)庫設(shè)計(jì)的規(guī)范化

數(shù)據(jù)庫應(yīng)用程序的性質(zhì)和復(fù)雜性可以使得數(shù)據(jù)庫的設(shè)計(jì)過程變化很大。一個(gè)簡單的數(shù)據(jù)庫設(shè)計(jì),可以依賴于設(shè)計(jì)者的技巧和經(jīng)驗(yàn),采用直接設(shè)計(jì)數(shù)據(jù)庫的方式進(jìn)行。而對于為成千上萬的客戶處理事務(wù)的數(shù)據(jù)庫,數(shù)據(jù)庫設(shè)計(jì)可能是長達(dá)數(shù)百頁的正式文檔,其中需要包含有關(guān)數(shù)據(jù)庫的各種可能細(xì)節(jié)。要進(jìn)行較復(fù)雜的數(shù)據(jù)庫設(shè)計(jì),必須遵守?cái)?shù)據(jù)庫設(shè)計(jì)規(guī)范化規(guī)則(Normalization Rules),并按照軟件工程提供的規(guī)范才能進(jìn)行數(shù)據(jù)庫設(shè)計(jì)。

1.?dāng)?shù)據(jù)庫設(shè)計(jì)的范式

按照規(guī)范化規(guī)則設(shè)計(jì)數(shù)據(jù)庫,可以將數(shù)據(jù)冗余降至最低,使得應(yīng)用程序軟件可以在此數(shù)據(jù)庫中輕松實(shí)現(xiàn)強(qiáng)制完整性,且很少包括執(zhí)行涉及4個(gè)以上表的查詢。規(guī)范化理論就是為了設(shè)計(jì)好的基本關(guān)系,使每個(gè)基本關(guān)系獨(dú)立表示一個(gè)實(shí)體,并且盡量減少數(shù)據(jù)冗余。滿足一定條件的關(guān)系模式稱為范式(Normal Form,NF),一個(gè)低級范式的關(guān)系模式,通過分解(投影)方法可轉(zhuǎn)換成多個(gè)高一級范式的關(guān)系模式的集合,這個(gè)過程稱為規(guī)范化。

(1)第一范式(1NF)。如果一個(gè)關(guān)系模式,它的每一個(gè)數(shù)據(jù)項(xiàng)是不可分的,即其域?yàn)楹唵斡颍瑒t此關(guān)系模式為第一范式。第一范式易出現(xiàn)的問題是數(shù)據(jù)冗余和更新數(shù)據(jù)的遺漏。

第一范式是最低的規(guī)范化要求,包括以下規(guī)則。

①數(shù)據(jù)表不能存在重復(fù)的記錄,即存在一個(gè)關(guān)鍵字,且主關(guān)鍵字應(yīng)滿足唯一性、非空性等的條件。

②每個(gè)字段都不可再分,即已經(jīng)分到最小。

(2)第二范式(2NF)。如果一個(gè)關(guān)系屬于1NF,且所有的非主關(guān)鍵字段都完全地依賴于主關(guān)鍵字,則稱之為第二范式。例如,零件關(guān)系中,倉庫地址和主鍵(零件號)不存在依賴關(guān)系。

零件(零件號,倉庫號,數(shù)量,倉庫地址)

那么,該關(guān)系按照第二范式的要求,就應(yīng)該拆分為零件和倉庫兩個(gè)關(guān)系。

①零件(零件號,倉庫號,數(shù)量)。

②倉庫(倉庫號,倉庫地址)。

(3)第三范式(3NF)。如果一個(gè)關(guān)系屬于2NF,且每個(gè)非關(guān)鍵字不傳遞依賴于主鍵,這種關(guān)系就是3NF。例如,常見關(guān)系中的數(shù)據(jù)項(xiàng)年齡和出生日期、期末成績和總評成績等就存在傳遞依賴,需要消除。

2.?dāng)?shù)據(jù)庫設(shè)計(jì)的方法

設(shè)計(jì)數(shù)據(jù)庫是創(chuàng)建數(shù)據(jù)庫的第一步,此設(shè)計(jì)本身還可以作為數(shù)據(jù)庫實(shí)現(xiàn)后用作數(shù)據(jù)庫的功能說明。數(shù)據(jù)庫設(shè)計(jì)的復(fù)雜性和細(xì)節(jié)由數(shù)據(jù)庫應(yīng)用程序的復(fù)雜性和大小以及用戶數(shù)決定。經(jīng)過長期的探索與調(diào)研,人們提出了對各類數(shù)據(jù)庫設(shè)計(jì)的一系列準(zhǔn)則和規(guī)范化方案,常見的有E-R模型、視圖概念、分步設(shè)計(jì)法等數(shù)據(jù)庫設(shè)計(jì)方法。

(1)實(shí)體關(guān)系(E-R)的數(shù)據(jù)庫設(shè)計(jì)方法。基于實(shí)體關(guān)系的數(shù)據(jù)庫設(shè)計(jì)方法的基本思想是在需求分析的基礎(chǔ)上,用E-R圖構(gòu)造一個(gè)純粹反映現(xiàn)實(shí)世界實(shí)體之間內(nèi)在關(guān)系的企業(yè)模式,然后再將此企業(yè)模式轉(zhuǎn)換成選定的DBMS上的概念模式。每個(gè)實(shí)體或聯(lián)系將來就映射為一個(gè)數(shù)據(jù)表。

(2)視圖概念的數(shù)據(jù)庫設(shè)計(jì)方法。基于視圖概念的數(shù)據(jù)庫設(shè)計(jì)方法先從分析各個(gè)應(yīng)用的數(shù)據(jù)著手,為每個(gè)應(yīng)用建立各自的視圖,然后再把這些視圖匯總起來合并成整個(gè)數(shù)據(jù)庫的概念模式。合并時(shí)必須注意解決下列問題。

①消除命名沖突。

②消除冗余的實(shí)體和關(guān)系。

③進(jìn)行模式重構(gòu)。

④對整個(gè)匯總模式進(jìn)行調(diào)整,使其滿足全部完整性約束條件。

在實(shí)際設(shè)計(jì)過程中,各種方法可以結(jié)合起來使用,如在基于視圖概念的設(shè)計(jì)方法中可用E-R圖的方法來表示各個(gè)視圖。

(3)分步設(shè)計(jì)法已在數(shù)據(jù)庫設(shè)計(jì)中得到廣泛的應(yīng)用并獲得較好的效果,此方法遵循“自頂向下、逐步求精”的原則,將數(shù)據(jù)庫的設(shè)計(jì)過程分解為若干相互獨(dú)立又相互依存的階段,每一階段采用不同的技術(shù)與工具,解決不同的問題,從而將問題局部化,減少了局部問題對整體設(shè)計(jì)的影響。

1.3.2 數(shù)據(jù)庫設(shè)計(jì)的主要內(nèi)容

設(shè)計(jì)數(shù)據(jù)庫時(shí)要及時(shí)聽取用戶的意見,并根據(jù)用戶提出的需求和數(shù)據(jù)庫本身的功能特點(diǎn),改進(jìn)數(shù)據(jù)庫的設(shè)計(jì)方案。要充分考慮數(shù)據(jù)庫的擴(kuò)充性與動(dòng)態(tài)性,提高數(shù)據(jù)庫應(yīng)用的靈活性,從而保證應(yīng)用程序具有較高的性能。

(1)靜態(tài)特性設(shè)計(jì)。根據(jù)給定的應(yīng)用環(huán)境、用戶的數(shù)據(jù)需求,設(shè)計(jì)數(shù)據(jù)庫的數(shù)據(jù)模型。靜態(tài)特性設(shè)計(jì)包括數(shù)據(jù)庫的概念結(jié)構(gòu)設(shè)計(jì)和邏輯結(jié)構(gòu)設(shè)計(jì)兩個(gè)方面。

(2)動(dòng)態(tài)特性設(shè)計(jì)。根據(jù)應(yīng)用處理要求,設(shè)計(jì)數(shù)據(jù)庫的查詢、事務(wù)處理和報(bào)表處理等應(yīng)用程序。動(dòng)態(tài)特性設(shè)計(jì)反映了數(shù)據(jù)庫在處理上的要求,所以又稱為數(shù)據(jù)庫的行為特性設(shè)計(jì)。

(3)物理設(shè)計(jì)。根據(jù)動(dòng)態(tài)特性,即應(yīng)用處理要求,在選定的DBMS環(huán)境下把靜態(tài)特性設(shè)計(jì)中得到的數(shù)據(jù)庫模式加以物理實(shí)現(xiàn),即設(shè)計(jì)數(shù)據(jù)庫的存儲模式和存取方法。

1.3.3 數(shù)據(jù)庫設(shè)計(jì)的過程

一般來說,按照目前分步設(shè)計(jì)法要求進(jìn)行數(shù)據(jù)庫設(shè)計(jì)的步驟分為需求分析、概念設(shè)計(jì)、邏輯設(shè)計(jì)和物理設(shè)計(jì)4個(gè)階段,如圖1-8所示。

圖1-8 數(shù)據(jù)庫設(shè)計(jì)的步驟

1.?dāng)?shù)據(jù)庫設(shè)計(jì)的步驟

(1)需求分析。需求分析的目標(biāo)是通過調(diào)查研究,了解用戶的數(shù)據(jù)要求和處理要求,并按一定的格式整理形成需求說明書。需求說明書是需求分析階段的成果,也是以后設(shè)計(jì)的依據(jù),它包括數(shù)據(jù)庫所涉及的數(shù)據(jù)、數(shù)據(jù)的特征、數(shù)據(jù)量和使用頻率的估計(jì)等,如數(shù)據(jù)名、屬性及其類型、主關(guān)鍵字屬性、保密要求、完整性約束條件、使用頻率、更改要求和數(shù)據(jù)量估計(jì)等。

(2)概念設(shè)計(jì)。概念設(shè)計(jì)是數(shù)據(jù)庫設(shè)計(jì)的第2階段,其目標(biāo)是對需求說明書提供的所有數(shù)據(jù)和處理要求進(jìn)行抽象與綜合處理,按一定的方法構(gòu)造反映用戶環(huán)境的數(shù)據(jù)及其相互聯(lián)系的概念模型。這種概念數(shù)據(jù)模型與DBMS無關(guān),是面向現(xiàn)實(shí)世界的數(shù)據(jù)模型,極易為用戶所理解。為保證所設(shè)計(jì)的概念數(shù)據(jù)模型能正確、完全地反映用戶(單位)的數(shù)據(jù)及其相互關(guān)系,便于進(jìn)行所要求的各種處理,在本階段設(shè)計(jì)中可吸收用戶參與和評議設(shè)計(jì),并將結(jié)果寫成概念設(shè)計(jì)說明書,重點(diǎn)內(nèi)容是概念模型的生成。

(3)邏輯設(shè)計(jì)。邏輯設(shè)計(jì)階段的設(shè)計(jì)目標(biāo)是把上一階段得到的與DBMS無關(guān)的概念數(shù)據(jù)模型轉(zhuǎn)換成等價(jià)的,并為某個(gè)特定的DBMS所接受的邏輯模型所表示的概念模式,同時(shí)將概念設(shè)計(jì)階段得到的應(yīng)用視圖轉(zhuǎn)換成特定DBMS下的應(yīng)用視圖。在轉(zhuǎn)換過程中要進(jìn)一步落實(shí)需求說明,并滿足DBMS的各種限制條件。邏輯設(shè)計(jì)階段的結(jié)果是DBMS提供的用數(shù)據(jù)定義語言(DDL)寫成的數(shù)據(jù)模式。

(4)物理設(shè)計(jì)。物理設(shè)計(jì)階段的任務(wù)是把邏輯設(shè)計(jì)階段得到的邏輯數(shù)據(jù)庫在物理上加以實(shí)現(xiàn),其主要內(nèi)容是根據(jù)DBMS提供的各種手段,設(shè)計(jì)數(shù)據(jù)的存儲形式和存取路徑,如文件結(jié)構(gòu)、索引設(shè)計(jì)等,即設(shè)計(jì)數(shù)據(jù)庫的內(nèi)模式或存儲模式。數(shù)據(jù)庫的內(nèi)模式對數(shù)據(jù)庫的性能影響很大,應(yīng)根據(jù)處理需求及DBMS、操作系統(tǒng)和硬件的性能進(jìn)行精心設(shè)計(jì)。

2.?dāng)?shù)據(jù)庫表列的信息類型

確定數(shù)據(jù)庫中需要的表是數(shù)據(jù)庫設(shè)計(jì)過程中技巧性最強(qiáng)的一步。根據(jù)概念設(shè)計(jì)模型的結(jié)果,可以將實(shí)體、聯(lián)系等轉(zhuǎn)化成數(shù)據(jù)庫表,其屬性就可以按照數(shù)據(jù)庫設(shè)計(jì)范式的要求轉(zhuǎn)化成列。數(shù)據(jù)庫表中的列包含幾個(gè)常見的信息類型。

(1)原始數(shù)據(jù)列。用于存儲有形信息(如名稱),由數(shù)據(jù)庫外部的源確定。

(2)分類列。用于對數(shù)據(jù)進(jìn)行分類或分組,并存儲限定選擇范圍的數(shù)據(jù)(如真/假、已婚/單身和副總裁/主管/組長)。

(3)標(biāo)識符列。用于提供一種機(jī)制來標(biāo)識存儲在表中的每個(gè)記錄行。

(4)引用列。用于建立一個(gè)表中的信息與另一個(gè)表中相關(guān)信息之間的鏈接。

在數(shù)據(jù)庫設(shè)計(jì)的基本過程中,每一階段設(shè)計(jì)基本完成后都要進(jìn)行認(rèn)真的檢查,看看是否滿足應(yīng)用需求、是否符合前面已執(zhí)行步驟的要求和滿足后續(xù)步驟的需要,并分析設(shè)計(jì)結(jié)果的合理性。數(shù)據(jù)庫設(shè)計(jì)完成后,就可以利用DBMS創(chuàng)建數(shù)據(jù)庫了。

主站蜘蛛池模板: 闸北区| 马公市| 北票市| 西昌市| 保德县| 黄冈市| 团风县| 界首市| 湖口县| 常宁市| 玉田县| 东丰县| 光泽县| 繁昌县| 垣曲县| 共和县| 边坝县| 儋州市| 建宁县| 厦门市| 白城市| 石嘴山市| 西青区| 吉隆县| 宜州市| 县级市| 望城县| 哈尔滨市| 长阳| 沙雅县| 连云港市| 台中市| 上林县| 新河县| 江北区| 商河县| 万荣县| 漠河县| 察雅县| 石柱| 信宜市|