高見斌
(武漢職業(yè)技術(shù)學院,武漢 430074)
信息社會離不開數(shù)據(jù)庫,只有科學規(guī)范的數(shù)據(jù)庫才能夠滿足人們對信息的需求。數(shù)據(jù)庫設(shè)計是開發(fā)應用數(shù)據(jù)庫整個過程的第一環(huán),這個環(huán)節(jié)的優(yōu)劣直接影響后續(xù)的使用和開發(fā)效果,因此,數(shù)據(jù)庫的設(shè)計與優(yōu)化顯得尤為重要。
數(shù)據(jù)庫采用New Orleans方法設(shè)計,主要思想是過程迭代和逐步求精。數(shù)據(jù)庫設(shè)計通常分為四個階段:需求分析、概念設(shè)計、邏輯設(shè)計和物理設(shè)計。
此階段是與用戶交流溝通的過程,了解用戶需求,熟悉其數(shù)據(jù)及處理流程。根據(jù)用戶需求,畫出數(shù)據(jù)流程圖,數(shù)據(jù)流程圖表達了數(shù)據(jù)和處理過程之間的關(guān)系,一般包括數(shù)據(jù)項、數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)流、數(shù)據(jù)存儲和處理過程五個部分。同時建立數(shù)據(jù)字典,數(shù)據(jù)字典是各類數(shù)據(jù)描述和功能需求描述的集合。需求分析的重點是用戶對信息的要求、對數(shù)據(jù)處理的要求、數(shù)據(jù)安全性與完整性要求。最后把數(shù)據(jù)流程圖和數(shù)據(jù)字典反饋給用戶看,要求用戶簽字確認,形成原始文檔材料,這是進行下一步概念設(shè)計的依據(jù)。
依據(jù)需求分析的結(jié)果,形成不依賴于具體機器、獨立于各種數(shù)據(jù)庫管理系統(tǒng)產(chǎn)品的概念數(shù)據(jù)模型。這種概念數(shù)據(jù)模型利用ER或IDEF1X建模方法實現(xiàn),用特定的圖形方式表達實體及其屬性、實體間的聯(lián)系以及各種約束等。
2.2.1 概念設(shè)計的一般步驟
(1)準備工作。這個階段所需做的是,組織建模人員,制定規(guī)章制度,確定建模目標,制訂建模計劃,收集源材料,源材料包括各種報表、數(shù)據(jù)和功能描述、業(yè)務(wù)流程等。
(2)定義實體。實體集是指具有相同屬性或特征的事物集合。大部分實體可以從收集的源材料中直接或間接標識出來。一般來說,表示物的術(shù)語和具有編號的術(shù)語,如學生、教師、教材、學號、課程號等名詞代表的實體能夠直接標識出來,形成初步的實體表。一些隱形的實體,比如診斷號,處罰號等,要結(jié)合業(yè)務(wù)需要和事情處理過程分析標識出來。
(3)定義主鍵。為了能夠惟一標識一個實體或聯(lián)系實例,從實體屬性中找出多個候選鍵,再從候選鍵中選定主鍵。通過非空約束和取值惟一約束來保證主鍵的有效性。比如把職工號定義成主鍵,那么它的取值不能是空值,也不能取相同值。
(4)定義聯(lián)系。實體集之間或一個實體集內(nèi)各實體之間存在聯(lián)系,聯(lián)系類型有三種:一對一聯(lián)系、一對多聯(lián)系、多對多聯(lián)系。在此基礎(chǔ)上,聯(lián)系可再進一步分為分類聯(lián)系、標識聯(lián)系和非標識聯(lián)系。分類聯(lián)系是指父實體與子實體之間的聯(lián)系,父子代表的是同一個對象。標識聯(lián)系也是指父實體與子實體之間的聯(lián)系,特點是子實體的每個實例都需要通過和父實體的聯(lián)系來標識,否則為非標識聯(lián)系。非標識聯(lián)系又分為中強制聯(lián)系和為非強制聯(lián)系,強制聯(lián)系是指每個子實體的實例都與而且只與一個父實體的一個實例關(guān)聯(lián),否則為非強制聯(lián)系。
(5)定義屬性。從上述實體表中,找出每個實體中包含的說明性字段作為屬性,比如學生實體屬性有學號、姓名、性別、出生日期等。實體集之間的聯(lián)系也有自己的屬性,比如學生和課程之間的聯(lián)系的屬性應是成績。屬性分為主屬性和非主屬性,作為主鍵的屬性是主屬性,否則是非主屬性。非主屬性要滿足完全函數(shù)依賴規(guī)則和非傳遞規(guī)則。完全函數(shù)依賴規(guī)則是指每個非主屬性必須依賴于整個主鍵且僅依賴于主鍵,非傳遞規(guī)則是指屬性之間不存在傳遞關(guān)系。
(6)定義其他對象和規(guī)則。定義屬性的數(shù)據(jù)類型、長度、默認值、非空和約束規(guī)則等。定義視圖、存儲過程、觸發(fā)器、角色、同義詞等對象信息。
2.2.2 ER方法設(shè)計概念模型的過程
(1)設(shè)計出局部ER圖。局部ER圖模型設(shè)計是從數(shù)據(jù)流程圖和數(shù)據(jù)字典出發(fā),確定實體和屬性。同時根據(jù)數(shù)據(jù)流程圖中表示的數(shù)據(jù)間的處理關(guān)系,確定實體之間的聯(lián)系。實體用矩形框表示,屬性用橢園表示,聯(lián)系用菱形表示,數(shù)據(jù)間聯(lián)結(jié)關(guān)系用直線表示。局部ER圖一般含有若干個。
(2)綜合成初步ER圖。局部ER圖設(shè)計完成之后,將所有的局部ER圖合并成全局概念ER圖。合并方法是,同一實體只出現(xiàn)一次,兩兩合并,消除合并引起的命名、屬性和結(jié)構(gòu)的沖突問題。全局概念ER圖不僅要支持所有的局部ER圖,而且必須表示一個完整一致的數(shù)據(jù)概念模型。
(3)優(yōu)化成完美ER圖。上述得到的初步ER圖是全局的數(shù)據(jù)概念模型,基本能反映現(xiàn)實世界數(shù)據(jù)及其聯(lián)系,但它不一定是最優(yōu)的,可能還存在潛在的冗余屬性或聯(lián)系,這要根據(jù)實際應用情況來確定是否加以消除。
此階段的任務(wù)是將前面建立起來的概念模型轉(zhuǎn)換成某個具體的數(shù)據(jù)庫管理系統(tǒng)支持的數(shù)據(jù)模型。數(shù)據(jù)模型通常有三種:層次模型、網(wǎng)狀模型和關(guān)系模型。當前廣泛使用的數(shù)據(jù)模型是關(guān)系模型。關(guān)系模型是用用二維表結(jié)構(gòu)來表示實體以及實體之間的聯(lián)系。目前流行的數(shù)據(jù)庫管理系統(tǒng)如SQL server、Mysql、Oracle、Access等都支持關(guān)系模型。概念模型轉(zhuǎn)換成關(guān)系模型的方法:
(1)實體轉(zhuǎn)換為關(guān)系模式。一個實體轉(zhuǎn)換為一個關(guān)系模式,實體的屬性就是關(guān)系的屬性。實體的主鍵就是關(guān)系的主鍵。這種轉(zhuǎn)換是直接轉(zhuǎn)換。(2)聯(lián)系轉(zhuǎn)化為關(guān)系模式。因聯(lián)系有三種類型,所以分三種情況分別進行轉(zhuǎn)換:一對一聯(lián)系時,將聯(lián)系與任意端合并,加入另一端主鍵和聯(lián)系的屬性;一對多聯(lián)系時,將聯(lián)系與n端合并,加入1端實體的主鍵和聯(lián)系的屬性;多對多聯(lián)系時,將聯(lián)系轉(zhuǎn)換成一個關(guān)系,加兩端實體的主鍵和聯(lián)系的屬性。
關(guān)系模型建立起來后,根據(jù)需求分析的要求,需要進行數(shù)據(jù)庫的完整性設(shè)計和規(guī)范化處理。數(shù)據(jù)的完整性是指保證數(shù)據(jù)庫中數(shù)據(jù)及語義的正確性和有效性,防止任何對數(shù)據(jù)造成錯誤的操作。規(guī)范是指改善數(shù)據(jù)的結(jié)構(gòu)化、共享性、一致性和可操作性。不規(guī)范會產(chǎn)生數(shù)據(jù)冗余,帶來很多問題。在關(guān)系數(shù)據(jù)庫中的每個關(guān)系都需要進行規(guī)范化,使之達到一定的規(guī)范化程度。
一般說來,一個關(guān)系模式需要滿足三個范式。范式是指規(guī)范化的程度或級別。第一范式是指關(guān)系的所有屬性不可再分,這是最基本的要求,否則它就不是關(guān)系。第二范式是指所有非主屬性完全函數(shù)依賴每個候選關(guān)鍵字,非主屬性是指不是主鍵的屬性。第三范式是指所有非主屬性都不傳遞函數(shù)依賴每個候選鍵。如果一個關(guān)系不滿足第二、第三范式,會帶來數(shù)據(jù)冗余、更新異常、插入異常、刪除異常等問題。
關(guān)系模型,亦即基本表,就是數(shù)據(jù)庫的模式。在對模式進行規(guī)范化處理后,從安全性和用戶對處理的要求考慮,在基本表(TABLE)的基礎(chǔ)上再建立必要的視圖(VIEW),形成數(shù)據(jù)庫的外模式。視圖內(nèi)容由SELECT查詢語句指定。同真實的表相似,包含一系列帶有名稱的列和行數(shù)據(jù)。行和列數(shù)據(jù)來自創(chuàng)建視圖的查詢所引用的表。視圖并不在數(shù)據(jù)庫中以存儲的數(shù)據(jù)值集形式存在,它是在被引用時動態(tài)生成,因此視圖是虛擬的表。視圖(VIEW)形成數(shù)據(jù)庫的外模式。視圖的作用有:簡化用戶的操作,即被經(jīng)常使用的查詢可以被定義為視圖,使得用戶不必為以后的操作每次都指定全部的條件;提高安全性,即通過視圖,用戶只能查詢和修改他們所能見到的數(shù)據(jù),并能限制到某些數(shù)據(jù)行,而其他數(shù)據(jù)既看不見也取不到;提高邏輯數(shù)據(jù)獨立性,即如果沒有視圖,應用一定是建立在表上。有了視圖之后,程序可以建立在視圖之上,從而使程序與數(shù)據(jù)庫表被視圖分隔開來。
根據(jù)數(shù)據(jù)庫管理系統(tǒng)的特點和處理的需要,對邏輯設(shè)計形式的關(guān)系模型進行物理存儲安排,設(shè)計索引,形成數(shù)據(jù)庫(DATABASE)內(nèi)模式。物理設(shè)計由操作系統(tǒng)和數(shù)據(jù)庫管理系統(tǒng)共同完成。
[1] 熊發(fā)涯.SQL Server 2008數(shù)據(jù)庫技術(shù)與應用[M].北京:高等教育出版社,2017.