摘要:文章從數(shù)據(jù)庫系統(tǒng)的邏輯結(jié)構(gòu)設(shè)計(jì)的重要性切題,以關(guān)系型數(shù)據(jù)庫為例,闡明邏輯結(jié)構(gòu)設(shè)計(jì)原則與方法,用實(shí)例回答了良好的邏輯結(jié)構(gòu)設(shè)計(jì)所帶來的好處,最后進(jìn)行總結(jié),指出基本概念是關(guān)鍵,邏輯結(jié)構(gòu)中的表盡量符合第三范式,表與表之間的聯(lián)系通過外鍵來表達(dá)。同時(shí)也要兼顧表的規(guī)范化及數(shù)據(jù)庫的性能,保證數(shù)據(jù)庫系統(tǒng)的穩(wěn)定性、高可用。
關(guān)鍵詞:邏輯結(jié)構(gòu)設(shè)計(jì);函數(shù)依賴;關(guān)系規(guī)范化
中圖分類號(hào):TP3 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2024)19-0084-03
數(shù)據(jù)庫系統(tǒng)設(shè)計(jì)的步驟主要包括需求分析、概念結(jié)構(gòu)設(shè)計(jì)、邏輯結(jié)構(gòu)設(shè)計(jì)以及數(shù)據(jù)庫的實(shí)施和維護(hù)。邏輯結(jié)構(gòu)設(shè)計(jì)是關(guān)鍵環(huán)節(jié)之一,這個(gè)環(huán)節(jié)做好做實(shí)了,數(shù)據(jù)庫系統(tǒng)的穩(wěn)定性、安全性、完整性和高性能才有基礎(chǔ)。
1 數(shù)據(jù)庫系統(tǒng)邏輯結(jié)構(gòu)設(shè)計(jì)的重要性
數(shù)據(jù)庫系統(tǒng)設(shè)計(jì)的根本目的是滿足用戶收集、存儲(chǔ)、操作和管理數(shù)據(jù)的需要。數(shù)據(jù)庫系統(tǒng)的三個(gè)模式兩級(jí)映像保證了數(shù)據(jù)庫外模式的穩(wěn)定性,既保證了數(shù)據(jù)的邏輯獨(dú)立性;也從底層保證了應(yīng)用程序的穩(wěn)定性,還保證了數(shù)據(jù)的物理獨(dú)立性。除非應(yīng)用需求本身發(fā)生變化,否則應(yīng)用程序一般不需要修改。
在數(shù)據(jù)庫系統(tǒng)的三級(jí)模式結(jié)構(gòu)中,數(shù)據(jù)庫邏輯模式是數(shù)據(jù)庫的中心與關(guān)鍵,它獨(dú)立于數(shù)據(jù)庫的其他層次,因此設(shè)計(jì)數(shù)據(jù)庫模式結(jié)構(gòu)時(shí)應(yīng)首先確定數(shù)據(jù)庫的邏輯模式,進(jìn)行邏輯結(jié)構(gòu)設(shè)計(jì)。良好的數(shù)據(jù)庫系統(tǒng)的邏輯結(jié)構(gòu)設(shè)計(jì),可以節(jié)省數(shù)據(jù)的存儲(chǔ)空間,能夠保證數(shù)據(jù)的完整性,方便進(jìn)行數(shù)據(jù)庫系統(tǒng)的開發(fā)。反之,會(huì)導(dǎo)致數(shù)據(jù)冗余、存儲(chǔ)空間浪費(fèi),數(shù)據(jù)更新、刪除和插入的異常。
2 數(shù)據(jù)庫系統(tǒng)的邏輯結(jié)構(gòu)設(shè)計(jì)的原則
數(shù)據(jù)庫常見的數(shù)據(jù)模型有層次模型、網(wǎng)狀模型、關(guān)系模型、對(duì)象-關(guān)系模型等,關(guān)系模型是目前最重要的一種數(shù)據(jù)模型,關(guān)系數(shù)據(jù)庫就是采用關(guān)系模型作為數(shù)據(jù)的組織方式。關(guān)系模型源于數(shù)學(xué),它把數(shù)據(jù)看成是二維表中的元素,而這個(gè)二維表在關(guān)系數(shù)據(jù)庫中就稱為關(guān)系。在關(guān)系數(shù)據(jù)庫中,記錄值僅構(gòu)成關(guān)系,關(guān)系之間的聯(lián)系是靠語義相同的字段(稱為連接字段)值表達(dá)的[1]。理解關(guān)系和連接字段(即列)的思想在關(guān)系數(shù)據(jù)庫中是非常重要的。本文討論數(shù)據(jù)庫系統(tǒng)的邏輯結(jié)構(gòu)設(shè)計(jì)就是以關(guān)系模型為例。
2.1 表設(shè)計(jì)原則
在關(guān)系型數(shù)據(jù)庫系統(tǒng)中的邏輯結(jié)構(gòu)設(shè)計(jì)體現(xiàn)在二維表結(jié)構(gòu)的設(shè)計(jì),在設(shè)計(jì)時(shí)盡可能遵守第三范式標(biāo)準(zhǔn)的表設(shè)計(jì)原則,一個(gè)主題對(duì)應(yīng)一張表,即一個(gè)表中只包含其本身的基本屬性。
之所以要盡可能遵守第三范式標(biāo)準(zhǔn)的表設(shè)計(jì)原則,是因?yàn)榈谝环妒?、第二范式都有可能存在?shù)據(jù)冗余,如果存在數(shù)據(jù)冗余,就有可能引起操作異常,包括插入異常、刪除異常、更新異常。為了避免數(shù)據(jù)操作異常,我們一般把數(shù)據(jù)庫設(shè)計(jì)到第三范式,也就是說我們?cè)谝粡埍碇胁辉试S存在部分函數(shù)依賴和傳遞函數(shù)依賴:從第一范式規(guī)范到第二范式時(shí)消除了部分函數(shù)依賴;從第二范式規(guī)范到第三范式時(shí)消除了傳遞函數(shù)依賴,在規(guī)范化的過程中逐步消除了“不良”的函數(shù)依賴[2]。
表的規(guī)范化可以保證表內(nèi)的字段都是最基本的要素,同時(shí)規(guī)范化這一措施也有助于消除數(shù)據(jù)中的數(shù)據(jù)冗余。規(guī)范化有好幾種形式:1NF、2NF、3NF、BCNF、4NF、5NF等。但3NF通常被認(rèn)為在性能、擴(kuò)展性和數(shù)據(jù)完整性方面達(dá)到了最佳平衡。而BCNF、4NF、5NF更多是作為數(shù)據(jù)理論研究。簡單來說,滿足3NF的表,有如下3個(gè)特點(diǎn),表內(nèi)的每一個(gè)值都只能被表達(dá)一次;表內(nèi)的每一行都能被區(qū)分;每一個(gè)表都不包含其他表已經(jīng)包含的非主關(guān)鍵字信息。
2.2 字段設(shè)計(jì)原則
在進(jìn)行數(shù)據(jù)庫系統(tǒng)邏輯設(shè)計(jì)中,表中的字段設(shè)計(jì)在長度上要盡量充足,同時(shí)考慮未來發(fā)展。比如企業(yè)目前職工人數(shù)是數(shù)百人,則職工編號(hào)為3位數(shù)字,但考慮到今后企業(yè)有可能壯大到數(shù)千人,則可將職工編號(hào)設(shè)置為4位數(shù)字,這樣盡量滿足一段時(shí)間內(nèi)企業(yè)發(fā)展的需求。給字段留足余量,將來無須重構(gòu)整個(gè)數(shù)據(jù)庫就可以實(shí)現(xiàn)數(shù)據(jù)庫規(guī)模的增長了,增強(qiáng)了系統(tǒng)的靈活性[3]。
在進(jìn)行數(shù)據(jù)庫系統(tǒng)邏輯設(shè)計(jì)中,還要考慮表字段的命名規(guī)范。字段的名稱要易于理解,便于閱讀,要有意義,不宜太長,要保證數(shù)據(jù)庫表中字段名沒有和保留字或者常用訪問方法沖突,否則在程序連接時(shí)會(huì)出錯(cuò),在用SELECT語句查詢時(shí),會(huì)得到一大堆無用處的信息。還要注意的是:在命名字段并為其指定數(shù)據(jù)類型的時(shí)候,一定要在各個(gè)表中保證一致性;字段名都采用加上前綴的方式,如加上所屬表縮寫名的前綴,那么在編寫SQL表達(dá)式的時(shí)候會(huì)得到大大的簡化;對(duì)地址采用多個(gè)字段,可以提供更大的靈活性;有時(shí)在表中創(chuàng)建一個(gè)計(jì)算列(如成績總分),通過它可以自動(dòng)地連接標(biāo)準(zhǔn)化的字段,這樣數(shù)據(jù)變動(dòng)的時(shí)候,計(jì)算列也跟著變動(dòng),實(shí)現(xiàn)數(shù)據(jù)的自動(dòng)更新。
進(jìn)行數(shù)據(jù)庫邏輯設(shè)計(jì)時(shí),還要有一種服務(wù)意識(shí)、大局意識(shí),因?yàn)閿?shù)據(jù)庫邏輯設(shè)計(jì)只是一個(gè)小小的環(huán)節(jié),還有數(shù)據(jù)庫管理員、應(yīng)用程序開發(fā)員等,最終用戶要使用數(shù)據(jù)庫系統(tǒng),所以要考慮周全。
2.3 謹(jǐn)慎使用觸發(fā)器
觸發(fā)器在保證數(shù)據(jù)完整性及商業(yè)規(guī)則方面有積極作用,比如我們要限制不能將學(xué)生成績由不及格改成及格這樣復(fù)雜的業(yè)務(wù)規(guī)則,我們則用觸發(fā)器來實(shí)現(xiàn)。
但不當(dāng)?shù)厥褂糜|發(fā)器時(shí),它會(huì)帶來效率方面的問題。比如,我們用觸發(fā)器來限制學(xué)生的考試成績?cè)?~150分。我們知道觸發(fā)器有兩種類型,一種是前觸發(fā)型,另一種是后觸發(fā)型。假設(shè)先使用了一個(gè)后觸發(fā)型觸發(fā)器來實(shí)現(xiàn),那這個(gè)處理流程是這樣的:先完成數(shù)據(jù)的插入,再執(zhí)行觸發(fā)器。在觸發(fā)器中判斷新插入的數(shù)據(jù)是否不在0~150分,如果不在,要作一個(gè)回滾roll?back的操作,把剛插入的數(shù)據(jù)撤銷。如果使用的是前觸發(fā)型觸發(fā)器,同樣假設(shè)是在一個(gè)插入操作上定義觸發(fā)器。執(zhí)行插入操作時(shí),系統(tǒng)它本身并不實(shí)際執(zhí)行插入操作,而是去執(zhí)行觸發(fā)器的代碼。當(dāng)我們?cè)谟|發(fā)器當(dāng)中發(fā)現(xiàn)新插入的成績滿足在0~150分時(shí),再在觸發(fā)器當(dāng)中寫一個(gè)重新插入這樣一條語句。
不管是后觸發(fā)型的觸發(fā)器作一個(gè)回滾rollback操作,還是前觸發(fā)型的觸發(fā)器再重新寫一遍插入操作,這些都比直接做插入操作多了一些額外的工作。因此不當(dāng)使用觸發(fā)器會(huì)降低數(shù)據(jù)的操作效率。觸發(fā)器的功能通常可以用其他方式實(shí)現(xiàn),如果我們定的是一個(gè)check約束,情況就不一樣了,數(shù)據(jù)庫管理系統(tǒng)首先會(huì)檢查我們的數(shù)據(jù)是否滿足我們的check約束的要求。如果不滿足,這個(gè)操作是不會(huì)執(zhí)行的,這樣顯然比我們用觸發(fā)器的效率高很多。所以我們能夠用check約束或唯一值約束等完整性約束來實(shí)現(xiàn)這些約束,都不要使用觸發(fā)器來實(shí)現(xiàn),只有他們實(shí)現(xiàn)不了的復(fù)雜約束和企業(yè)規(guī)則,才使用觸發(fā)器。
2.4 恰當(dāng)使用視圖
視圖主要是為了在數(shù)據(jù)庫和應(yīng)用程序代碼之間提供另一層抽象。我們知道數(shù)據(jù)庫系統(tǒng)是三級(jí)模式兩級(jí)映像的結(jié)構(gòu)。三層模式是內(nèi)模式、概念模式、外模式,視圖就對(duì)應(yīng)到外模式。外模式是針對(duì)每一類用戶對(duì)信息的需求來設(shè)計(jì)的,因此我們?cè)谠O(shè)計(jì)外模式的時(shí)候,實(shí)際上是可以滿足每一類用戶的信息需求的。
在定義視圖時(shí),實(shí)際上它可以實(shí)現(xiàn)包含復(fù)雜查詢的語句。用戶需要查詢這些數(shù)據(jù),如果我們定義好了視圖,在客戶端用戶中需要對(duì)這個(gè)視圖進(jìn)行訪問就可以,不需要去編寫復(fù)雜的查詢語句。當(dāng)然了我們通過視圖,通過外模式訪問數(shù)據(jù),它最終都會(huì)轉(zhuǎn)換到內(nèi)模式,對(duì)基本表的訪問。因此通過視圖訪問數(shù)據(jù)效率會(huì)有一些降低,但可以簡化客戶端的編程,可以封裝復(fù)雜的查詢,可以恰當(dāng)?shù)厝ナ褂靡晥D。
2.5 編寫設(shè)計(jì)文檔
對(duì)所有的設(shè)計(jì)都要編寫相應(yīng)文檔,每一個(gè)設(shè)計(jì)階段都要產(chǎn)生一些文檔,便于后期維護(hù)和經(jīng)驗(yàn)總結(jié)。
3 數(shù)據(jù)庫系統(tǒng)邏輯結(jié)構(gòu)設(shè)計(jì)的方法
3.1 數(shù)據(jù)冗余帶來的操作異常
數(shù)據(jù)庫設(shè)計(jì)是數(shù)據(jù)庫應(yīng)用領(lǐng)域中的重要研究課題,其主要任務(wù)是創(chuàng)建滿足用戶需求且性能良好的數(shù)據(jù)庫模式。對(duì)于關(guān)系型數(shù)據(jù)庫設(shè)計(jì)確切地講其主要任務(wù)就是關(guān)系數(shù)據(jù)庫的邏輯設(shè)計(jì)問題:如何為數(shù)據(jù)庫應(yīng)用系統(tǒng)設(shè)計(jì)合適的關(guān)系模式,應(yīng)設(shè)計(jì)幾個(gè)關(guān)系模式,每個(gè)關(guān)系模式由哪些屬性組成等等。
某電子有限責(zé)任公司需要開發(fā)一個(gè)員工信息管理系統(tǒng),現(xiàn)設(shè)計(jì)了一張員工信息表,表中有5項(xiàng)屬性(工號(hào)、工作車間、宿舍樓、零件號(hào)、工分),前提假設(shè)同一工作車間的員工住在同一棟宿舍樓里,一位員工可以加工不同的零件來取得工分。這個(gè)表的主鍵是(工號(hào)、零件號(hào))。現(xiàn)有如下數(shù)據(jù),見表1最初的員工信息表。
我們來分析一下這個(gè)表的數(shù)據(jù),看看可有數(shù)據(jù)冗余的情況,如有,在數(shù)據(jù)冗余的情況下,會(huì)出現(xiàn)哪些操作異常。
從行的角度來看,前面4 行數(shù)據(jù)實(shí)際上是描述QC1910001這位員工的。之所以出現(xiàn)了4次,是因?yàn)樗竺孢x的加工零件有4種。從列的角度來看,前兩列描述的是這位員工在哪個(gè)車間工作這個(gè)主題,第二列與第三列描述的是這個(gè)車間的員工住在哪棟宿舍樓這個(gè)主題。這兩個(gè)主題由于與后面所選的加工零件合在一張表進(jìn)行描述,所以被重復(fù)描述了多遍,有數(shù)據(jù)冗余的情況。
在有數(shù)據(jù)冗余的情況,它帶來的最直觀的問題是造成存儲(chǔ)空間的浪費(fèi)。除了存儲(chǔ)空間的浪費(fèi),還會(huì)帶來不好的后果,就是操作異常。
1) 數(shù)據(jù)插入異常
假設(shè)公司的規(guī)模不斷擴(kuò)大,現(xiàn)要新增一個(gè)車間:工作車間4,也分配了這個(gè)車間的員工住在4號(hào)樓。但目前還沒開始招收員工,因此還沒有工號(hào)與零件號(hào)的數(shù)據(jù),而(工號(hào)、零件號(hào))是這張表的主鍵,我們知道要插入一行數(shù)據(jù),主鍵為空是插入不了的。這樣新增的這個(gè)車間的信息就插不進(jìn)去了。所以說數(shù)據(jù)冗余有可能造成數(shù)據(jù)插入異常。
2) 數(shù)據(jù)更新異常
假設(shè)公司新蓋了宿舍樓,現(xiàn)要把車間1的員工搬到新蓋的宿舍樓:新1號(hào)樓。按常理來說,要更改這樣一個(gè)主題,只要更改一次就夠了。但對(duì)于我們這個(gè)設(shè)計(jì)方法,在這張表中就要更改6次。那由小及大,如果這個(gè)車間1的員工是100人,那起碼得更改100次。這就造成了時(shí)間的浪費(fèi),效率的低下,出錯(cuò)的可能。所以說數(shù)據(jù)冗余有可能造成數(shù)據(jù)更新異常。
3) 數(shù)據(jù)刪除異常
假設(shè)有員工只加工一種型號(hào)的零件,現(xiàn)公司不再加工這個(gè)零件了,要把這行數(shù)據(jù)刪除。那么刪除掉這行信息,同時(shí)也就把這位員工的其他基本信息一并刪除了。可見,多個(gè)主題合在一起,放在同一張表中進(jìn)行描述的這種設(shè)計(jì)方法,有可能造成數(shù)據(jù)刪除異常。
顯然,好的數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計(jì)很重要。不僅避免了空間的浪費(fèi),也避免了數(shù)據(jù)操作異常,還能提高效率,能夠保證數(shù)據(jù)的完整性,方便進(jìn)行數(shù)據(jù)庫系統(tǒng)的開發(fā)[4]。
3.2 數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計(jì)的規(guī)范化
進(jìn)行數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計(jì),要遵循關(guān)系規(guī)范化理論,要理解函數(shù)依賴與范式間的內(nèi)在關(guān)系。某電子有限責(zé)任公司這張員工信息表不是一個(gè)好的關(guān)系模式,只有通過模式分解,把這個(gè)關(guān)系模式分解成更高級(jí)別的兩個(gè)或是多個(gè)關(guān)系模式,在分解的過程中消除那些“不良”的函數(shù)依賴,從而獲得良好的關(guān)系模式。
1) 消除部分函數(shù)依賴,規(guī)范化到第二范式
我們知道,不包含非原子項(xiàng)屬性的關(guān)系是第一范式的關(guān)系。也只有滿足第一范式的表,我們?cè)陉P(guān)系模式的數(shù)據(jù)庫中才能去存儲(chǔ)。員工信息表(工號(hào)、工作車間、宿舍樓、零件號(hào)、工分)都是原子項(xiàng)屬性,所以它是第一范式的關(guān)系。
在員工信息表當(dāng)中,(工號(hào)、零件號(hào))是主鍵,而工作車間完全函數(shù)依賴于工號(hào),這樣就存在工作車間部分函數(shù)依賴于主鍵。同時(shí)存在數(shù)據(jù)冗余,操作異常的情況。因此,我們用分解的方法,把這張表規(guī)范化到第二范式,消除部分函數(shù)依賴。
首先,用組成主鍵的屬性集合的每一個(gè)子集,作為主鍵構(gòu)成關(guān)系表。在這,我們得到主鍵的3個(gè)子集分別為:工號(hào),零件號(hào),(工號(hào)、零件號(hào))。
再者,將依賴于不同主鍵的屬性放置到相應(yīng)的關(guān)系表中。得到3張表:(工號(hào)、工作車間、宿舍樓);(工號(hào)、零件號(hào)、工分);(零件號(hào))。
最后,去掉只由主鍵的子集構(gòu)成的關(guān)系表。
這樣就把員工信息表規(guī)范化到第二范式了,得到兩張表。(工號(hào)、工作車間、宿舍樓);(工號(hào)、零件號(hào)、工分)。
已規(guī)范化到第二范式的關(guān)系表,再看表2的工作車間與宿舍樓這兩列數(shù)據(jù),還是存在數(shù)據(jù)冗余的情況。有數(shù)據(jù)冗余就可能存在數(shù)據(jù)操作異常。因此,繼續(xù)向第三范式進(jìn)行規(guī)范化。
2) 消除傳遞函數(shù)依賴,規(guī)范化到第三范式
在(工號(hào)、工作車間、宿舍樓)這張第二范式的關(guān)系表中,工作車間完全函數(shù)依賴于工號(hào),宿舍樓又完全函數(shù)依賴于工作車間,因此,宿舍樓傳遞函數(shù)依賴于工號(hào),并且有數(shù)據(jù)冗余的情況。繼續(xù)用分解的方法,把這張表規(guī)范化到第三范式,消除傳遞函數(shù)依賴。
首先,對(duì)于不是候選鍵的每個(gè)決定因子,從關(guān)系模式中刪去依賴于它的所有屬性。在此表中,工作車間決定宿舍樓,工作車間這個(gè)決定因子并不是一個(gè)候選鍵,因此,把依賴于它的屬性宿舍樓刪去。
再者,新建一個(gè)關(guān)系模式,新關(guān)系模式中包含在原關(guān)系模式中所有依賴于該決定因子的屬性。那么新關(guān)系模式為(宿舍樓)。
最后,將決定因子作為新關(guān)系模式的主鍵。那么新關(guān)系模式為(工作車間、宿舍樓)。
這樣,我們就把(工號(hào)、工作車間、宿舍樓)這張第二范式的關(guān)系表分解為兩張第三范式的表(工號(hào)、工作車間),(工作車間、宿舍樓)。分解到第三范式了,這兩張表基本上不存在數(shù)據(jù)冗余,沒有數(shù)據(jù)冗余,也就基本上消除了操作異常。
3) 設(shè)置外鍵,保持表間的聯(lián)系,保證數(shù)據(jù)的完整性
經(jīng)過規(guī)范化,最終把員工信息表分解成了三個(gè)第三范式的關(guān)系表:
form1(工號(hào)、工作車間),工號(hào)是主鍵,工作車間為引用form2的外鍵。
form2(工作車間、宿舍樓),工作車間是主鍵,沒有外鍵。
form3(工號(hào)、零件號(hào)、工分),(工號(hào)、零件號(hào))是主鍵,工號(hào)為引用form1的外鍵。
表之間的關(guān)系是通過外鍵來連接的。原來在一張表中的數(shù)據(jù),為了保證數(shù)據(jù)庫的性能,通過分解的方法變成了多張表,規(guī)范化到了第三范式,為了保持表中原數(shù)據(jù)間的聯(lián)系,我們可以通過設(shè)計(jì)外鍵的方法保持表間的聯(lián)系,保持?jǐn)?shù)據(jù)的依賴關(guān)系。例如,在前面的表中,定義form3表當(dāng)中的工號(hào)當(dāng)作外鍵,它參照form1表中的工號(hào),這樣可以保證進(jìn)行零件加工的員工是在form1表中登記在冊(cè)的員工。這樣也就保證了這兩張表數(shù)據(jù)間的關(guān)聯(lián)關(guān)系。
關(guān)系規(guī)范化的方法是進(jìn)行模式分解,但分解后產(chǎn)生的關(guān)系模式應(yīng)與原關(guān)系模式等價(jià),不能表面上消除了操作異?,F(xiàn)象,卻留下了其他的問題。為此,模式分解還要注意兩點(diǎn):一是模式分解具有無損連接性;二是模式分解能夠保持函數(shù)依賴。
4) 堅(jiān)持標(biāo)準(zhǔn)化的設(shè)計(jì)理念
在表設(shè)計(jì)原則中,應(yīng)盡量遵守第三范式的標(biāo)準(zhǔn),更高層次的標(biāo)準(zhǔn)也有,但更高標(biāo)準(zhǔn)不一定更好。事實(shí)上,對(duì)某些項(xiàng)目而言,甚至就連3NF都可能給數(shù)據(jù)庫引入太高的復(fù)雜性。有時(shí)為了提高運(yùn)行效率,就得適當(dāng)保留冗余數(shù)據(jù),對(duì)表不進(jìn)行標(biāo)準(zhǔn)化有時(shí)也是必要的,非標(biāo)準(zhǔn)化與加速訪問之間的妥協(xié)是有一定意義的,但絕不能把數(shù)據(jù)表的非標(biāo)準(zhǔn)化當(dāng)作理所當(dāng)然的設(shè)計(jì)理念[5]。適當(dāng)保留冗余數(shù)據(jù),具體做法是增加字段,但這具體的操作不過是一種派生,所以標(biāo)準(zhǔn)化的設(shè)計(jì)理念是要堅(jiān)持的,從根本上保證數(shù)據(jù)庫系統(tǒng)的高性能、高可用。
4 數(shù)據(jù)庫系統(tǒng)邏輯結(jié)構(gòu)設(shè)計(jì)的意義
數(shù)據(jù)庫系統(tǒng)邏輯結(jié)構(gòu)設(shè)計(jì)的意義在于為數(shù)據(jù)庫系統(tǒng)的穩(wěn)定性、安全性、完整性和高性能提供支撐。數(shù)據(jù)庫系統(tǒng)邏輯結(jié)構(gòu)設(shè)計(jì)是數(shù)據(jù)庫設(shè)計(jì)的“綱”。在數(shù)據(jù)庫系統(tǒng)的三級(jí)模式中,邏輯模式是數(shù)據(jù)庫系統(tǒng)的中間層,是對(duì)數(shù)據(jù)庫中的全體數(shù)據(jù)的描述,是所有用戶的公共數(shù)據(jù)視圖?!耙家渚V,萬目皆張”,設(shè)計(jì)出良好的邏輯模式,不僅能節(jié)省數(shù)據(jù)的存儲(chǔ)空間,而且方便數(shù)據(jù)庫應(yīng)用系統(tǒng)的開發(fā),還能保證數(shù)據(jù)的完整性等。
數(shù)據(jù)庫系統(tǒng)的設(shè)計(jì)往往工作量比較大,過程復(fù)雜,綜合性強(qiáng),涉及面廣,要確切表達(dá)用戶的需求,構(gòu)造最優(yōu)的數(shù)據(jù)庫模式,因此要努力把數(shù)據(jù)庫設(shè)計(jì)和系統(tǒng)其他成分的設(shè)計(jì)緊密結(jié)合,把數(shù)據(jù)和處理的需求、分析、抽象、設(shè)計(jì)和實(shí)現(xiàn)在各個(gè)階段同時(shí)進(jìn)行,相互參照,相互融合。
參考文獻(xiàn):
[1] 王珊,薩師煊.數(shù)據(jù)庫系統(tǒng)概論[M].5版.北京:高等教育出版社,2014.
[2] 丁智斌,石浩磊.關(guān)系數(shù)據(jù)庫設(shè)計(jì)與規(guī)范化[J].計(jì)算機(jī)與數(shù)字工程,2005,33(2):114-116.
[3] 舒思思.淺談圖書管理系統(tǒng)的設(shè)計(jì)[J].湖北科技學(xué)院學(xué)報(bào),2013,33(2):159-160.
[4] 郭文明.數(shù)據(jù)庫運(yùn)維[M].北京:國家開放大學(xué)出版社,2019.
[5] 陶勇,丁維明.數(shù)據(jù)庫中規(guī)范化與反規(guī)范化設(shè)計(jì)的比較與分析[J].計(jì)算機(jī)技術(shù)與發(fā)展,2006,16(4):107-109,121.
【通聯(lián)編輯:朱寶貴】