国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

面向?qū)ο蟮年P(guān)系數(shù)據(jù)庫設(shè)計

2024-07-21 02:41:01
字體:
供稿:網(wǎng)友
p>  北京市公路局系統(tǒng)使用的是Oracle 7.3關(guān)系數(shù)據(jù)庫,即RDBMS。由于我們對整個工程用了面向?qū)ο蟮能浖こ?OOSE)開發(fā)方法學(xué),所以數(shù)據(jù)庫設(shè)計也是面向?qū)ο蟮摹?   一、概念的區(qū)分   有些人把面向?qū)ο蟮臄?shù)據(jù)庫設(shè)計(即數(shù)據(jù)庫模式)思想與面向?qū)ο髷?shù)據(jù)庫治理系統(tǒng)(OODBMS)理論混為一談。其實前者是數(shù)據(jù)庫用戶定義數(shù)據(jù)庫模式的思路,后者是數(shù)據(jù)庫治理程序的思路。用戶使用面向?qū)ο蠓椒▽W(xué)可以定義任何一種DBMS數(shù)據(jù)庫,即網(wǎng)絡(luò)型、層次型、關(guān)系型、面向?qū)ο笮途?甚至文件系統(tǒng)設(shè)計也照樣可以遵循面向?qū)ο蟮乃悸贰? 面向?qū)ο蟮乃悸坊蚍Q規(guī)范可以用于系統(tǒng)分析、系統(tǒng)設(shè)計、程序設(shè)計,也可以用于數(shù)據(jù) 結(jié)構(gòu)設(shè)計、數(shù)據(jù)庫設(shè)計。OOSE自上至下、自始至終地貫徹面向?qū)ο笏悸?是一個一氣呵成 的統(tǒng)一體。面向?qū)ο蟮臄?shù)據(jù)庫設(shè)計只是 OOSE 的一個環(huán)節(jié)。   二、數(shù)據(jù)庫設(shè)計的重要性   一般數(shù)據(jù)庫設(shè)計方法有兩種,即屬性主導(dǎo)型和實體主導(dǎo)型。屬性主導(dǎo)型從歸納數(shù)據(jù)庫應(yīng)用的屬性出發(fā),在歸并屬性集合(實體)時維持屬性間的函數(shù)依靠關(guān)系。實體主導(dǎo)型則先 從尋找對數(shù)據(jù)庫應(yīng)用有意義的實體入手,然后通過定義屬性來定義實體。一般現(xiàn)實世界的 實體數(shù)在屬性數(shù) 1/10 以下時,宜使用實體主導(dǎo)型設(shè)計方法。面向?qū)ο蟮臄?shù)據(jù)庫設(shè)計是從對象模型出發(fā)的,屬于實體主導(dǎo)型設(shè)計。 一般數(shù)據(jù)庫應(yīng)用系統(tǒng)都遵循以下相關(guān)開發(fā)步驟: 1設(shè)計應(yīng)用系統(tǒng)結(jié)構(gòu); 2 選擇便于將應(yīng)
   用程序與DBMS結(jié)合的DBMS體系結(jié)構(gòu),如RDBMS; 3 根據(jù)應(yīng)用程序使用的環(huán)境平臺,選擇適宜的DBMS(如Oracle)和開發(fā)工具(如PB); 4 設(shè)計數(shù)據(jù)庫,編寫定義數(shù)據(jù)庫模式的SQL程序; 5 編寫確保數(shù)據(jù)正確錄入數(shù)據(jù)庫的用戶接口應(yīng)用程序; 6 錄入數(shù)據(jù)庫數(shù)據(jù); 7 運行各種與 數(shù)據(jù)庫相關(guān)的應(yīng)用程序,以確認和修正數(shù)據(jù)庫的內(nèi)容。   對以上各步驟,有幾點需要說明: (1) 這不是瀑布模型,每一步都可以有反饋。
  在公路局系統(tǒng)中,以上各步不僅有反饋、有反復(fù),還有并行處理。比如一些庫表在數(shù) 據(jù)錄入時,另一些庫表設(shè)計還在修改。這與我們的遞增式開發(fā)方法有關(guān),也與面向?qū)ο蟮? 特征有關(guān)。 (2) 上述順序不是絕對的,大多數(shù)場合是從第三步開始的。 (3) 對大多數(shù)數(shù)據(jù)庫應(yīng)用系統(tǒng)來說,上述各步中最重要、最困難的不是應(yīng)用系統(tǒng)設(shè)計而是數(shù)據(jù)庫設(shè)計。 ?三、DBMS的支持和數(shù)據(jù)庫設(shè)計   多數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)者不重視數(shù)據(jù)庫設(shè)計的原因是:他們太迷信DBMS,認為購入一個功能強大的DBMS后數(shù)據(jù)庫設(shè)計就不困難、不重要了。一些國內(nèi)外的數(shù)據(jù)庫教材經(jīng)常 是在為DBMS的開發(fā)廠商做宣傳,而很少站在數(shù)據(jù)庫用戶角度,從數(shù)據(jù)庫應(yīng)用系統(tǒng)出發(fā)介紹數(shù)據(jù)庫設(shè)計方法。結(jié)果往往使讀者搞不清書中介紹的是數(shù)據(jù)庫治理程序的設(shè)計思想,還是 應(yīng)用這種 DBMS 進行數(shù)據(jù)庫設(shè)計的思想。 其實,DBMS只是給用戶為已采用的數(shù)據(jù)庫提供一個舞臺,而是否使用這個舞臺上的道具以及唱什么戲,則完全取決于用戶的戲劇腳本和導(dǎo)演(開發(fā)者)的安排。例如,公路局系統(tǒng)所使用的數(shù)據(jù)庫治理系統(tǒng),是以二維表為基本治理單元、支持所有關(guān)系代數(shù)操作、支持 實體完整性與實體間參照完整性的全關(guān)系型RDBMS,而我們要在這個舞臺上利用上述"道具"設(shè)計一個面向?qū)ο蟮年P(guān)系數(shù)據(jù)庫。   四、應(yīng)用對象模型與RDBMS模型的映射   數(shù)據(jù)庫設(shè)計(模式)是否支持應(yīng)用系統(tǒng)的對象模型,這是判定是否是面向?qū)ο髷?shù)據(jù)庫系統(tǒng)的基本出發(fā)點。由于應(yīng)用系統(tǒng)設(shè)計在前,數(shù)據(jù)庫設(shè)計隨后,所以應(yīng)用系統(tǒng)對象模型向 數(shù)據(jù)庫模式的映射是面向?qū)ο髷?shù)據(jù)庫設(shè)計的要害。   1. 三層數(shù)據(jù)庫模式面向?qū)ο竽P偷臄U展   一般數(shù)據(jù)庫設(shè)計多參照ANSL/SPARC關(guān)于數(shù)據(jù)庫模式的3層標(biāo)準(zhǔn)結(jié)構(gòu)提案。最接近物理數(shù)據(jù)庫的內(nèi)部模式由DBMS提供的SQL來描述。概念模式可以由若干個內(nèi)部模式聚集而成 ,它是由數(shù)據(jù)庫用戶規(guī)范的一些表的集合。例如,公路局計劃處數(shù)據(jù)庫模式、機務(wù)處數(shù)據(jù) 庫模式等,它們是邏輯數(shù)據(jù)庫,經(jīng)常通過庫表ID來界定庫邊界。一般的概念模式是數(shù)據(jù)庫 物理模式作用域的邊界,它能實現(xiàn)數(shù)據(jù)庫的物理意義、特定DBMS 的非凡操作對外部應(yīng)用 程序的信息隱蔽。外部模式是從特定用戶應(yīng)用角度看待的數(shù)據(jù)庫模式,從不同的應(yīng)用出發(fā)對同一概念模式可以給出多種不同的外部模式。例如:公路綠化情況查詢應(yīng)用看到的數(shù)據(jù) 庫是公路上的樹木種類、數(shù)量、分布比率等, 梁隧道狀況查詢應(yīng)用看到的是公路上的橋 梁、隧道長度、個數(shù)、路段等,但是它們可能訪問的是同一個庫表的不同子集。 當(dāng)外部應(yīng)用系統(tǒng)以對象模型進行抽象時,從各個應(yīng)用出發(fā)抽象出的對象模型可以映射 到外部模型上,對此我們不妨稱之為外部對象模型。但是,外部模型只是概念模型的子集 ,所以面向?qū)ο蟮臄?shù)據(jù)庫設(shè)計核心在于系統(tǒng)對象模型(不妨稱之為概念對象模型) 向數(shù)據(jù) 庫概念模型的映射(參見圖1) 。   2. 對象模型向數(shù)據(jù)庫表的映射規(guī)則   由于RDBMS是以二維表為基本治理單元的,所以對象模型最終是由二維表及表間關(guān)系來描述的。換言之,對象模型向數(shù)據(jù)庫概念模型的映射就是向數(shù)據(jù)庫表的變換過程。有關(guān)的變換規(guī)則簡單歸納如下: (1) 一個對象類可以映射為一個以上的庫表,當(dāng)類間有一對多的關(guān)系時,一個表也可 以對應(yīng)多個類。 (2) 關(guān)系(一對一、一對多、多對多以及三項關(guān)系)的映射可能有多種情況,但一般映 射為一個表,也可以在對象類表間定義相應(yīng)的外鍵。對于條件關(guān)系的映射,一個表至少應(yīng) 有3個屬性。 (3) 單一繼續(xù)的泛化關(guān)系可以對超類、子類分別映射表,也可以不定義父類表而讓子 類表擁有父類屬性;反之,也可以不定義子類表而讓父類表擁有全部子類屬性。 (4) 對多重繼續(xù)的超類和子類分別映射表,對多次多重繼續(xù)的泛化關(guān)系也映射一個表 。 (5) 對映射后的庫表進行冗余控制調(diào)整,使其達到合理的關(guān)系范式。   3. 數(shù)據(jù)庫模式要面向應(yīng)用系統(tǒng)   我們選擇面向?qū)ο蟮南到y(tǒng)設(shè)計也好,面向?qū)ο蟮臄?shù)據(jù)庫設(shè)計也好,根本目的是服務(wù)于應(yīng)用系統(tǒng)的需要。 以公路局計劃處子系統(tǒng)為例。計劃處的最大工作量就是處理成堆的報表,因此如何有 效地存取這些報表是計劃處數(shù)據(jù)庫設(shè)計的要害??紤]到每月上交的報表是同構(gòu)的,我們可 以創(chuàng)建一張庫表去存儲同一種報表,例如公路工程月報表。但是又產(chǎn)生另一個問題,當(dāng)用戶想查詢某個月的公路工程月報表時,如何從庫表中取出數(shù)據(jù)呢?按照數(shù)據(jù)庫的思想應(yīng)該 有一個主鍵來標(biāo)識這張報表。在公路局的報表里,區(qū)別月報表靠上報時間和上報單位,但 假如為每條記錄都加上這兩個字段,無疑會加大庫表冗余,增加查詢時間,降低效率。更何 況每張報表都有單位負責(zé)人、填表人的屬性,那么怎樣解決這個問題呢?我們設(shè)計了超類 對象 X3 表和流水號表。

  將它們加入由應(yīng)用對象模型映射出的數(shù)據(jù)庫概念模型后,得到圖2所示的結(jié)構(gòu)。
  每一個應(yīng)用模塊對象對應(yīng)建立一張流水號表,同一類的報表屬同一流水號表,由流水號表統(tǒng)一治理。流水號表對各分局、處室提交和建立的每一張報表分配一個流水號,該流 水號在整個數(shù)據(jù)庫中是唯一的,因此在庫中存放任何一張報表都是明確的。流水號的數(shù)據(jù)類型為 Char(10),前4位為表號,后6位為序列號,其中序列號取自X3表中最大序列號。也 就是說,流水號就是對象標(biāo)識符,報表是一個對象,一個對象標(biāo)識符唯一決定一個對象。流 水號一旦被分配出去后,在這張報表的生存期內(nèi)就具有了永久不變性。無論報表的內(nèi)容及 結(jié)構(gòu)怎么變化,它都不變,直到報表被刪除,流水號才會消失。流水號表是父類,報表是子類,流水號表之間的聯(lián)系只能通過 X3 表。5個應(yīng)用模塊對象完全映射到數(shù)據(jù)庫概念模型中,形成應(yīng)用對象與數(shù)據(jù)庫對象的一一對應(yīng),保持了5個應(yīng)用對象在目標(biāo)系統(tǒng)設(shè)計中原有的 獨立性,具有很好的封裝性和信息隱蔽性。盡管流水號表會有一些冗余,但它是值得的。   五、面向?qū)ο箨P(guān)系數(shù)據(jù)庫設(shè)計效果   在公路局系統(tǒng)設(shè)計中,從某種意義上講,是數(shù)據(jù)庫設(shè)計的面向?qū)ο筇卣髯罱K奠定了整個系統(tǒng)的面向?qū)ο笮?才使面向?qū)ο蠓椒ㄔ诔绦蜷_發(fā)階段全面開花。其效果歸納如下:   1. 數(shù)據(jù)庫結(jié)構(gòu)清楚
  便于實現(xiàn)OOP由于實現(xiàn)了應(yīng)用模塊對象對數(shù)據(jù)庫對象的完全映射,數(shù)據(jù)庫邏輯模型可以自然且直接 地模擬現(xiàn)實世界的實體關(guān)系。公路局用戶所處的當(dāng)前物理世界、系統(tǒng)開發(fā)者所抽象的系 統(tǒng)外部功能,與支持系統(tǒng)功能的內(nèi)部數(shù)據(jù)庫 (數(shù)據(jù)結(jié)構(gòu))一一對應(yīng),所以用戶、開發(fā)者和數(shù) 據(jù)庫維護人員可以用一致的語言進行溝通。 非凡是對多數(shù)不了解公路局業(yè)務(wù)的程序開發(fā)人員來說,這種將應(yīng)用對象與相應(yīng)的數(shù)據(jù) 對象封裝在對象統(tǒng)一體中的設(shè)計方法,大大減輕了程序?qū)崿F(xiàn)的難度,使他們只要知道加工的數(shù)據(jù)及所需的操作即可,而且應(yīng)用程序大多雷同,可以多處繼續(xù)由設(shè)計人員抽象出來的 、預(yù)先開發(fā)好的各種物理級超類。   2. 數(shù)據(jù)庫對象具有獨立性,便于維護
  除了數(shù)據(jù)庫表對象與應(yīng)用模塊對象一一對應(yīng)外,在邏輯對象模型中我們沒有設(shè)計多重 繼續(xù)的泛化關(guān)系,所以這樣得到的數(shù)據(jù)庫結(jié)構(gòu)基本上是由父表類和子表類構(gòu)成的樹型層次 結(jié)構(gòu),表類間很少有繼續(xù)以外的復(fù)雜關(guān)系,是一個符合局部化原則的結(jié)構(gòu),從而使數(shù)據(jù)庫表 數(shù)據(jù)破壞的影響控制在局部范圍且便于修復(fù),給公路局系統(tǒng)開通后的數(shù)據(jù)庫日常維護工作帶來便利。   3. 需求變更時程序與數(shù)據(jù)庫重用率高,修改少
  在映射應(yīng)用對象時,除關(guān)系映射規(guī)范化后可能出現(xiàn)一對多的表映射外,大多數(shù)應(yīng)用對 象與表對象是一一對應(yīng)的。我們可以把規(guī)范化處理后的、由一個應(yīng)用對象映射出來的多個表看成一個數(shù)據(jù)庫對象。因此當(dāng)部分應(yīng)用需求變更時,首先,系統(tǒng)修改可以不涉及需求 不變更的部分。其次,變更部分的修改可以基本上只限于追加或刪除程序模塊或追加新庫 表,而基本上不必修改原有程序代碼或原有庫表定義,從而大大減少了工作量,降低了工作難度。   六、最簡單的就是最好的   客觀世界是錯綜復(fù)雜的,計算機科學(xué)理論的發(fā)展也越來越高深、復(fù)雜。然而,人類探索理論和技術(shù)的最終目的是:讓客觀世界的復(fù)雜變簡單,最簡單的就是最好的。
  為此我們 給出以下幾點忠告:   1. 慎用外鍵   RDBMS 支持復(fù)雜關(guān)系的能力很強,無論用戶怎么在邏輯上設(shè)定外鍵,它基本上都能從 物理上幫用戶實現(xiàn)。但是外鍵把許多獨立的實體牽連在一起,不僅使 RDBMS 維持數(shù)據(jù)一 致性負擔(dān)沉重,也使數(shù)據(jù)庫應(yīng)用復(fù)雜化,加重了程序開發(fā)負擔(dān)。這樣的數(shù)據(jù)庫很難理解,很 難實現(xiàn)信息隱蔽性設(shè)計,往往把簡單問題復(fù)雜化。   2. 適當(dāng)冗余   減少數(shù)據(jù)庫冗余的設(shè)計思路產(chǎn)生于70年代,它是促使 DBMS 進步的重要動力之一。然 而,如同為了節(jié)省2個字節(jié)的存儲空間而釀成了如今全球為之頭痛的2000年問題一樣,它是 計算機硬件主導(dǎo)時代的產(chǎn)物。以今天國內(nèi)計算機市場價格為例,6G服務(wù)器硬盤的價格不過 2000元,而上海物價局 1996 年頒發(fā)的一個人月軟件開發(fā)的指導(dǎo)價約8000元,即一個人月 的軟件價格就可以購買20G左右的硬盤。即使有5萬行數(shù)據(jù)的庫表,每個記錄壓縮40字符的 冗余,單純計算合計也不足2M,即節(jié)省0.6元錢的磁盤空間。 今天的世界已進入軟件主導(dǎo)的計算機時代。因此,最輕易理解、應(yīng)用開發(fā)工作量最少 、維護最簡單的數(shù)據(jù)庫結(jié)構(gòu)才是最好的。只要數(shù)據(jù)完整性、一致性不受威脅,有些冗余,不足為慮。換言之,最節(jié)省軟件成本 (而不是硬件成本) 的是最好的。   3. 信息隱蔽   這是軟件工程最重要的基本原則之一。簡言之即信息的作用域越小越好,數(shù)據(jù)庫的透 明度越大越好,因為應(yīng)用程序需要知道得越多就越復(fù)雜。使數(shù)據(jù)庫黑盒化 (透明度高) 的方法很多,除了設(shè)計上的局部化處理外,還可以利用 DBMS 的觸發(fā)器、存儲過程、函數(shù)等 ,把數(shù)據(jù)庫中無法簡化的復(fù)雜表關(guān)系封裝到黑盒子里,隱藏起來,非凡是放到服務(wù)器端,其 優(yōu)越性更是多方面的。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 安溪县| 宣化县| 东港市| 屯昌县| 额尔古纳市| 泸溪县| 治县。| 扎兰屯市| 湾仔区| 宜城市| 玉门市| 津南区| 峨边| 德令哈市| 沿河| 弋阳县| 将乐县| 洞头县| 扬州市| 长子县| 容城县| 农安县| 陆丰市| 集安市| 杭州市| 宁国市| 崇左市| 丁青县| 微博| 洪泽县| 苏尼特左旗| 察隅县| 武威市| 红河县| 淅川县| 海伦市| 庐江县| 荔浦县| 西乡县| 西乡县| 恩平市|