數(shù)據(jù)庫是按照一種易于利用程序進(jìn)行存儲和檢索的方式組織的數(shù)據(jù)集合。數(shù)據(jù)庫包含了存儲和檢索信息的方法。
這些信息以及組織這些信息的需求因應(yīng)用程序類型的不同而異。但是,關(guān)系數(shù)據(jù)庫可以滿足大部分的市場和常見需求。其他類型的數(shù)據(jù)庫,比如層次數(shù)據(jù)庫、面向?qū)ο髷?shù)據(jù)庫和超文本數(shù)據(jù)庫也在市場上占有一席之地。
關(guān)系數(shù)據(jù)庫實(shí)現(xiàn)了實(shí)體的一個非常簡單的原則,該原則可以看作是表,以及作為其他實(shí)體的引用的實(shí)體間的關(guān)系。關(guān)系數(shù)據(jù)庫支持的其他概念用于實(shí)現(xiàn)更輕松的訪問、速度和安全性。
關(guān)系數(shù)據(jù)庫建模系統(tǒng)(Relational Data Base Modeling System)技術(shù)是市場上最可靠的技術(shù)之一。其基本思想已有三十多年的歷史,第一個產(chǎn)品也于 25 年前就開發(fā)出來了。
標(biāo)準(zhǔn)化的呼聲越來越高,于是就產(chǎn)生了 SQL,它是用于數(shù)據(jù)定義和數(shù)據(jù)操縱的標(biāo)準(zhǔn)化語言。有三個版本的標(biāo)準(zhǔn),分別叫做 SQL-1、SQL-2 和 SQL-3。盡管早在 1992 年就已標(biāo)準(zhǔn)化,但 SQL-2 仍是目前主要供應(yīng)商最常使用的一種標(biāo)準(zhǔn)。他們利用自己的語言和結(jié)構(gòu)構(gòu)造擴(kuò)展了他們的實(shí)現(xiàn),以涵蓋市場需求。
![]() ![]() |
![]()
|
統(tǒng)一建模語言與 SQL 相比算是一種比較新的技術(shù)。UML 在 1997 年被標(biāo)準(zhǔn)化,之后有一些小的修訂。但是 UML 的源頭可追溯到上世紀(jì) 80 年代以及 90 年代初,當(dāng)時不同的建模語言正試圖建立一種描述和設(shè)計更好的應(yīng)用程序的方法。
該語言最初針對軟件開發(fā),但是它有足夠的遠(yuǎn)見,所以不僅限于任何方向。UML 隱含了自適應(yīng)的概念,可用于描述軟件相關(guān)和不相關(guān)的專業(yè)領(lǐng)域。配置文件在不偏離該語言標(biāo)準(zhǔn)的情況下將 UML 定制到一個領(lǐng)域。
統(tǒng)一建模的力量在于將所有領(lǐng)域的專業(yè)知識合并在一個統(tǒng)一平臺中。不管使用哪種技術(shù),都可以利用相同的語言對它們進(jìn)行描述。
![]() ![]() |
![]()
|
關(guān)系數(shù)據(jù)庫管理系統(tǒng)是最常見的數(shù)據(jù)庫使用形式。IBM Rational 的 UML 數(shù)據(jù)建模配置文件提供了一種為滿足數(shù)據(jù)庫建模和數(shù)據(jù)庫設(shè)計的需要而使用和理解 UML 的簡單的方法。數(shù)據(jù)庫中使用的表和關(guān)系的概念在核心 UML 中被映射為類和關(guān)聯(lián)的概念。但是在數(shù)據(jù)庫建模中還有其他的構(gòu)造和約束(比如數(shù)據(jù)庫和模式)必須被可視化地建模。
圖 1 顯示了數(shù)據(jù)庫部署的多樣性。以下這些復(fù)雜分配:表與視圖到模式、模式到數(shù)據(jù)庫、數(shù)據(jù)庫到表空間(tablespace)和節(jié)點(diǎn),把需要底層構(gòu)架的一種簡單表示的每個數(shù)據(jù)庫管理員(DBA)搞得暈頭轉(zhuǎn)向。因此計劃數(shù)據(jù)庫的分發(fā)和配置成為一項(xiàng)關(guān)鍵能力。
數(shù)據(jù)庫所在的物理實(shí)體(計算機(jī))被表示為節(jié)點(diǎn)。該表示法是核心 UML 的一部分。
節(jié)點(diǎn)用于部署圖中,代表了軟件部署的物理配置。部署圖包括節(jié)點(diǎn)以及節(jié)點(diǎn)間的連接。這些連接代表了通信協(xié)議。
"DB2 Server Lexington"、"Oracle Server Cupertino"和"Oracle Sever Redmond"代表了節(jié)點(diǎn),XML、JDBC 和 OraNet代表了通信協(xié)議。所有的軟件和數(shù)據(jù)庫都必須部署在物理節(jié)點(diǎn)上。
部署圖對于數(shù)據(jù)管理員配置服務(wù)器和跟蹤問題很重要(首先開始部署,然后開始鉆研細(xì)節(jié))。
表空間是數(shù)據(jù)的存儲器,代表了一個數(shù)據(jù)庫系統(tǒng)。它是稱為 Database 的用戶透明物理結(jié)構(gòu)(在下文中描述)和節(jié)點(diǎn)之間的鏈接。表空間是 UML 數(shù)據(jù)建模配置文件中的原型化組件。
表空間可理解為物理存儲上的一個區(qū)域,其中該物理存儲由數(shù)據(jù)庫來維護(hù)。數(shù)據(jù)庫本身可以被分發(fā)給數(shù)個表空間,這些表空間由數(shù)據(jù)的大小、數(shù)據(jù)訪問需求和安全需求來決定。
表空間利用依賴關(guān)系在數(shù)據(jù)庫中關(guān)聯(lián),并且在數(shù)據(jù)庫實(shí)現(xiàn)的設(shè)計階段是可選的。如果沒有使用,將采用數(shù)據(jù)庫維護(hù)的默認(rèn)表空間。
表空間在數(shù)據(jù)庫實(shí)現(xiàn)中的價值在于計劃節(jié)點(diǎn)環(huán)境和建立節(jié)點(diǎn)需求。借助于組件圖的幫助,跟蹤部分?jǐn)?shù)據(jù)庫的問題變得更容易??衫脭?shù)據(jù)庫或表空間來實(shí)現(xiàn)表。在利用數(shù)據(jù)庫實(shí)現(xiàn)時,會使用默認(rèn)的表空間。
表空間作為物理存儲單元的基本結(jié)構(gòu)是由不同的數(shù)據(jù)庫供應(yīng)商實(shí)現(xiàn)的。他們在存儲需求和存儲內(nèi)部結(jié)構(gòu)上給予表空間或多或少的控制。
數(shù)據(jù)庫是用于物理數(shù)據(jù)存儲以及對已存儲數(shù)據(jù)的受控訪問的系統(tǒng)。它是用于數(shù)據(jù)建模的最大的專門元素。數(shù)據(jù)庫是一個原型化組件,并且是 UML 數(shù)據(jù)建模配置文件的一部分。
數(shù)據(jù)庫定義了數(shù)據(jù)庫類型,以及用于數(shù)據(jù)建模的約束,比如數(shù)據(jù)類型、存儲過程、語法等。數(shù)據(jù)庫級別是對信息的基本訪問級別,可以在更高級別上進(jìn)行精化。
數(shù)據(jù)庫與組件圖中的其他組件結(jié)合使用,來定義應(yīng)用程序和數(shù)據(jù)庫之間的依賴關(guān)系。
數(shù)據(jù)庫組件對于設(shè)計者的價值在于計劃數(shù)據(jù)庫的可訪問性。對數(shù)據(jù)庫的模式分配定義了信息存儲的基本結(jié)構(gòu)。
數(shù)據(jù)庫管理員使用部署圖來找出應(yīng)用程序和數(shù)據(jù)庫之間的通信問題,并定義數(shù)據(jù)以及部署圖的物理部署。
表的基本組織單元就是模式。模式是 UML 的組織單元,用包表示。模式是原型化的包,并且是 UML 數(shù)據(jù)建模配置文件的一部分。
模式是應(yīng)用程序使用的基本單元。它還是一個可以被授予特權(quán)的單元。模式在下一個細(xì)節(jié)級別上被指定給數(shù)據(jù)庫組件。
模式是在類圖中組織的。
模式應(yīng)該分配給數(shù)據(jù)庫,因?yàn)閿?shù)據(jù)庫定義了語言約束、數(shù)據(jù)類型、可用觸發(fā)器、可能的數(shù)據(jù)庫約束以及存儲過程類型。
模式不僅僅是一個組織單元;它還是一種安全機(jī)制。類圖允許數(shù)據(jù)庫管理員和分析人員找出基于應(yīng)用程序的包和數(shù)據(jù)之間的依賴關(guān)系,從而產(chǎn)生數(shù)據(jù)庫的使用模式。
表是關(guān)系數(shù)據(jù)庫的基本建模結(jié)構(gòu)。它代表了具有相同結(jié)構(gòu)的一組記錄,也被稱作行(row)。每條記錄都包含數(shù)據(jù)。有關(guān)表結(jié)構(gòu)的信息存儲在數(shù)據(jù)庫中。
表是一種原型化類,并且是UML數(shù)據(jù)建模配置文件的一部分。
表是在數(shù)據(jù)模型圖中表示的。
由于該圖只是模型的一個視圖,因此它可以代表面向表焦點(diǎn)的解決方案。這避免了由于構(gòu)建一個巨型的模型圖而導(dǎo)致無法找到您正在尋找的物理數(shù)據(jù)模型的范圍。
該數(shù)據(jù)模型圖具有表、視圖、表間的關(guān)系、視圖的依賴關(guān)系和存儲過程容器,精確地表示了數(shù)據(jù)詞典的一部分。數(shù)據(jù)管理員可以在更加可讀的圖形表示中找出數(shù)據(jù)庫的結(jié)構(gòu)。
在設(shè)計方面,利用圖形表示更容易調(diào)整數(shù)據(jù)庫,因?yàn)槟軌蚩吹奖淼膬?nèi)容以及文檔的每個細(xì)節(jié)。由于調(diào)整經(jīng)常是一個手動過程,所以表間的數(shù)據(jù)移動是一項(xiàng)必需的功能。只需要知道所有模型約束的知識就能實(shí)現(xiàn)該功能。
構(gòu)架師不關(guān)心數(shù)據(jù)模型圖的詳細(xì)信息,但是他可以檢查是否所有信息都表示在數(shù)據(jù)庫中。
視圖是一個虛擬表。它代表了具有相同結(jié)構(gòu)的一組記錄,這與表完全一樣,唯一的區(qū)別在于數(shù)據(jù)的物理資源在其他表中。
視圖是一個原型化類,并且是 UML 數(shù)據(jù)建模配置文件的一部分。
視圖是在數(shù)據(jù)模型圖中表示的。
由于該圖只是模型的一個視圖,所以它可以代表面向視圖中焦點(diǎn)表中焦點(diǎn)的解決方案。
在視圖中對表進(jìn)行建模的價值不僅僅在于為數(shù)據(jù)庫定義數(shù)據(jù)結(jié)構(gòu),還在于數(shù)據(jù)的面向問題的分析(這不能在數(shù)據(jù)庫本身的知識庫中完成)。很容易發(fā)現(xiàn)數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)源之間的依賴關(guān)系。
列是關(guān)系數(shù)據(jù)庫內(nèi)部的基本組織元素。每個數(shù)據(jù)都必須存儲在表中的行的一列中。這些列作為原型化屬性是 UML 數(shù)據(jù)建模配置文件的一部分。
列添加了必須指定的數(shù)據(jù)類型標(biāo)簽值。另外,列數(shù)據(jù)可以作為工件物理存儲在數(shù)據(jù)庫中,或者利用表達(dá)式從其他列進(jìn)行計算。
列還具有其他標(biāo)簽值,他們指定了數(shù)據(jù)模型的細(xì)節(jié),比如 null 和唯一性。
列定義的價值在于數(shù)據(jù)結(jié)果的規(guī)格說明。另外,它還可用于不同數(shù)據(jù)源的集成以及實(shí)現(xiàn)互相之間相同點(diǎn)和不同點(diǎn)的發(fā)現(xiàn)。
鍵用于訪問表。主鍵唯一標(biāo)識了表中的一行,而外鍵則訪問其他相關(guān)表中的數(shù)據(jù)。
主鍵通常是內(nèi)容無關(guān)的,并且由數(shù)據(jù)庫自動生成,以方便數(shù)據(jù)的更新。
外鍵總是從與其他表的關(guān)系派生而來。
鍵是鍵約束(Key Constraints)的實(shí)現(xiàn)。鍵約束指定了鍵的內(nèi)容(哪些列生成了鍵),以及鍵的物理實(shí)現(xiàn)。為了輕松識別表中的鍵列,它們被用主鍵(<<PK>>)或外鍵(<<FK>>)原型標(biāo)記。在將外鍵用做主鍵的情況下,組合鍵被標(biāo)記為(<<PFK>>)原型。
鍵代表數(shù)據(jù)的識別。因此它們是識別數(shù)據(jù)庫(所有鏈接都位于數(shù)據(jù)之間)的完整結(jié)構(gòu),以獲得純工件之外的信息所必需的。
索引是支持快速數(shù)據(jù)訪問的物理數(shù)據(jù)結(jié)構(gòu)。它完全不改變數(shù)據(jù)的質(zhì)量。
索引在 UML 數(shù)據(jù)建模配置文件中被表示為操作上的原型。
索引和鍵都包含了幾個列。索引中的列必須有順序。
索引規(guī)格說明不但包含索引的列,還包含索引的類型(唯一性等)。
當(dāng)某些因素影響了應(yīng)用程序的性能時,索引的價值就被體現(xiàn)出來。索引是首先要注意的地方。
約束是應(yīng)用于數(shù)據(jù)庫結(jié)構(gòu)的規(guī)則。該規(guī)則可應(yīng)用于列和/或表,并且可能被限制到一個模式或數(shù)據(jù)庫。
UML 數(shù)據(jù)建模配置文件中定義了幾種類型的約束,但是,它們作為原型化操作來實(shí)現(xiàn)。
定義的約束值位于規(guī)格說明的細(xì)節(jié)中。約束描述了數(shù)據(jù)庫的動態(tài)行為,而列和表則沒有描述這些內(nèi)容。
主鍵
主鍵約束定義了表的一個主鍵。每個表只能有一個主鍵。
主鍵約束在 UML 數(shù)據(jù)建模配置文件中使用了原型<<PK>>。
外鍵
外鍵是實(shí)現(xiàn)一個關(guān)系的約束。該約束總是在子表上實(shí)現(xiàn)的。
外鍵約束在 UML 數(shù)據(jù)建模配置文件中使用了原型<<FK>>。
觸發(fā)器
作為其他活動的結(jié)果自動被執(zhí)行的一個活動就是一個觸發(fā)器。它經(jīng)常是數(shù)據(jù)庫中數(shù)據(jù)修改的副產(chǎn)品,并且大部分情況下保證了數(shù)據(jù)庫的一致行為。
觸發(fā)器約束在 UML 數(shù)據(jù)建模配置文件中使用了原型<<Trigger>>。
值驗(yàn)證
列中的值可以利用觸發(fā)器驗(yàn)證。觸發(fā)器不但能與固定范圍的值進(jìn)行比較,還能與數(shù)據(jù)庫中的其他數(shù)據(jù)進(jìn)行比較。
值驗(yàn)證約束在 UML 數(shù)據(jù)建模配置文件中使用了原型<<Check>>。
唯一性
唯一性約束保證了指定列的所有值都是不同的。
唯一性約束在UML數(shù)據(jù)建模配置文件中使用了原型<<Unique>>。
數(shù)據(jù)模型中表之間任意種類的依賴關(guān)系被稱作關(guān)系。
關(guān)系是原型化關(guān)聯(lián)和一組主鍵和外鍵的匯總。每個關(guān)系都位于一個父表和一個子表之間,其中父表必須定義一個主鍵。子鍵創(chuàng)建了一個外鍵列和外鍵約束,以滿足父表的要求。
non-identifying 關(guān)聯(lián)代表了兩個獨(dú)立表之間的關(guān)系。子表的外鍵不包含所有的主鍵列。
一個識別關(guān)系是兩個依賴表間的關(guān)系,其中如果沒有父表子表就不能存在。父表(本例中為 Person)的所有主鍵在子表(Account)中同時變成了主鍵列和外鍵列。
一個關(guān)系有兩個與之關(guān)聯(lián)的角色。它們定義了與其他表關(guān)聯(lián)的一個表的角色??梢岳貌煌巧趦蓚€表間指定一個以上的關(guān)系。
每個關(guān)系都創(chuàng)建了從父表到子表的遷移鍵。