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