官术网_书友最值得收藏!

2.2 邏輯模型

選定數據庫應用系統軟件之后,就需要將概念模型按照數據庫應用軟件的特點轉換成邏輯模型。邏輯模型主要有層次數據模型、網狀數據模型、關系數據模型和對象數據模型4種。邏輯模型的特點如下:①邏輯模型表達了數據庫的整體邏輯結構;②邏輯模型是從數據庫實現的觀點出發對數據建模;③邏輯模型獨立于硬件,但依賴于軟件;④邏輯模型是數據庫設計人員與應用程序員之間交流的工具。

2.2.1 層次數據模型

層次型DBMS是緊隨網絡型數據庫而出現的。最著名、最典型的層次數據庫系統是IBM公司在1968年開發的IMS(Information Management System),一種適合其主機的層次數據庫。這是IBM公司研制的、最早的大型數據庫系統程序產品。從20世紀60年代末起,如今已經發展到IMSV6,提供群集、N路數據共享、消息隊列共享等先進特性的支持。這個具有50年歷史的數據庫產品在如今的WWW應用連接、商務智能應用中扮演著新的角色。

層次模型用樹狀結構表示實體類型與實體間的聯系,實質上是一種有根結點的定向有序樹(在數學中“樹”被定義為一個無回路的連通圖)。樹根與枝點之間的聯系稱為邊,樹根與邊之比為1∶M,即樹根只有1個,樹枝有M個。按照層次模型建立的數據庫系統稱為層次模型數據庫系統。層次模型的表示方法是:樹的結點表示實體集(記錄的型),結點之間的連線表示相連兩實體集之間的關系;通常把表示1的實體集放在上方,稱為父結點,表示M的實體集放在下方,稱為子結點。層次模型的結構特點是:①有且僅有一個根結點;②根結點以外的其他結點有且僅有一個父結點,但可以有任意子結點;③無子女的結點稱為葉結點。

層次模型只能表示1-M關系,而不能直接表示M-M關系。在層次模型中,一個結點稱為一個記錄型,用來描述實體集。每個記錄型可以有一個或多個記錄值,上層一個記錄值對應下層一個或多個記錄值,而下層每個記錄值只能對應上層一個記錄值。層次模型如圖2-4所示,數據如圖2-5所示,在XML文件中數據就是以層次的結構存儲的。

層次模型中對實體集多對多的聯系的處理,解決方法是引入冗余結點。例如,學生和課程之間的多對多的聯系,引入學生和課程的冗余結點,如圖2-6所示,轉換為兩棵樹:一棵樹的根是學生,子結點是課程,它表現了一個學生可以選多門課程,如圖2-7所示;另一棵樹的根是課程,子結點是學生,它反映了一門課程可以被多個學生選,如圖2-8所示。冗余結點可以用虛擬結點實現:在冗余結點處存放一個指向實際結點的指針。例如圖2-7中的課程號結點,以及圖2-8中的學號結點。

圖2-4 通訊錄的層次模型

圖2-5 通訊錄的數據

圖2-6 層次模型的冗余結點法

圖2-7 學生-課程

圖2-8 課程-學生

層次模型的樹是有序樹(層次順序)。對任一結點的所有子樹都規定了先后次序,這一限制隱含了對數據庫存取路徑的控制。樹中父子結點之間只存在一種聯系,對樹中的任一結點,只有一條自根結點到達它的路徑,因此,不能直接表示多對多的聯系。樹結點中任何記錄的屬性只能是不可再分的簡單數據類型。

層次模型的優點是:首先,層次數據模型本身比較簡單;其次,層次模型中父子實體間聯系是固定的,且預先定義好的應用系統,采用層次模型來實現,其性能優于關系模型,不低于網狀模型;最后,層次數據模型提供了良好的完整性支持。

層次模型的缺點主要是:首先,現實世界中很多聯系是非層次性的,如多對多聯系、一個結點具有多個雙親等,層次模型表示這類聯系的方法很笨拙,只能通過引入冗余數據(易產生不一致性)或創建非自然的數據組織(引入虛擬結點)來解決;其次,層次模型對插入和刪除操作的限制比較多,查詢子結點必須通過父結點;最后,層次模型的結構嚴密,層次命令趨于程序化,應用程序的編寫較為復雜。

2.2.2 網狀數據模型

最早出現的是網狀DBMS,是美國通用電氣公司Bachman等在1961年開發成功的IDS(Integrated Data Store)。1961年通用電氣公司(General Electric Co.)的Charles Bachman成功地開發出世界上第一個網狀DBMS也是第一個數據庫管理系統——集成數據存儲(Integrated Data Store IDS),奠定了網狀數據庫的基礎,并在當時得到了廣泛的發行和應用。IDS具有數據模式和日志的特征,但它只能在GE主機上運行,并且數據庫只有一個文件,數據庫中所有的表必須通過手工編碼來生成。之后,通用電氣公司一個客戶BF Goodrich Chemical公司最終不得不重寫了整個系統,并將重寫后的系統命名為集成數據管理系統(IDMS)。網狀數據庫模型對于層次和非層次結構的事物都能比較自然地模擬,在關系數據庫出現之前網狀DBMS要比層次DBMS用得普遍。在數據庫發展史上,網狀數據庫占有重要地位。1973年,Cullinane公司(也就是后來的Cullinet軟件公司),開始出售Goodrich公司的IDMS改進版本,并且逐漸成為當時世界上最大的軟件公司。

網狀數據模型用有向圖表示實體類型及實體之間的聯系。有向圖是一種比層次模型更具普遍性的結構,它去掉了層次模型的兩個限制:①允許多個結點沒有雙親結點;②允許結點有多個父結點,此外它還允許兩個結點之間有多種聯系(稱為復合聯系)。結點表示實體,邊表示實體之間的聯系。

在網狀數據模型中,雖然每個結點可以有多個父結點,但是每個父記錄和子記錄之間的聯系只能是1∶N的聯系。因此,在網狀數據模型中,對于M∶N的聯系,必須人為地增加記錄類型,把M∶N的聯系分解為多個1∶N的二元聯系。例如,學生和課程之間的多對多的聯系,如圖2-9所示。

圖2-9 學生-課程的網狀模型

網狀模型的優點在于可以表示豐富的關系(包括多對多的關系),性能良好,存取效率高等。但是它也存在致命的弱點:結構復雜,其數據定義語言數據操作語言較為復雜,用戶掌握使用較為困難,編程復雜等。

2.2.3 關系數據模型

網狀數據庫和層次數據庫已經很好地解決了數據的集中和共享問題,但在數據獨立性和抽象級別上仍有很大欠缺。用戶在對這兩種數據庫進行存取時,仍然需要明確數據的存儲結構,指出存取路徑,而后來出現的關系數據庫較好地解決了這些問題。

1.發展歷程

1970年,IBM的研究員E.F.Codd博士在刊物“Communication of the ACM”上發表了一篇名為“A Relational Model of Data for Large Shared Data Banks”的論文,提出了關系模型的概念,奠定了關系模型的理論基礎。盡管之前在1968年Childs已經提出了面向集合的模型,然而這篇論文仍然被普遍認為是數據庫系統歷史上具有劃時代意義的里程碑。Codd的心愿是為數據庫建立一個優美的數據模型。后來Codd又陸續發表多篇文章,論述了范式理論和衡量關系系統的12條標準,用數學理論奠定了關系數據庫的基礎。關系模型有嚴格的數學基礎,抽象級別比較高,而且簡單清晰,便于理解和使用。但是當時也有人認為關系模型是理想化的數據模型,用來實現DBMS是不現實的,尤其擔心關系數據庫的性能難以被接受,更有人視其為對當時正在進行中的網狀數據庫規范化工作的嚴重威脅。為了促進對問題的理解,1974年ACM牽頭組織了一次研討會,會上開展了一場分別以Codd和Bachman為首的支持和反對關系數據庫兩派之間的辯論。這次著名的辯論推動了關系數據庫的發展,使其最終成為現代數據庫產品的主流。

1970年,關系模型建立之后,IBM公司在San Jose實驗室增加了更多研究人員研究這個項目,這個項目就是著名的System R。其目標是論證一個全功能關系DBMS的可行性。該項目結束于1979年,完成了第一個實現SQL的DBMS。然而,IBM對IMS的承諾阻止了System R的投產,一直到1980年System R才作為產品正式推向市場。IBM產品化步伐緩慢的3個原因是:IBM重視信譽,重視質量,盡量減少故障;IBM是個大公司,行政體系龐大;IBM內部已經有層次數據庫產品,相關人員不積極,甚至反對。

1973年加州大學伯克利分校的Michael Stonebraker和Eugene Wong利用System R已發布的信息開始開發自己的關系數據庫系統Ingres。他們開發的Ingres項目最后由Oracle公司、Ingres公司及硅谷的其他廠商所商品化。后來,System R和Ingres系統雙雙獲得ACM的1988年“軟件系統獎”。

1976年霍尼韋爾公司(Honeywell)開發了第一個商用關系數據庫系統Multics Relational Data Store。關系型數據庫系統以關系代數為堅實的理論基礎經過幾十年的發展和實際應用,技術越來越成熟和完善。其代表產品有甲骨文公司的Oracle、IBM公司的DB2、微軟公司的MS SQL Server,以及Informix、ADA BASD。

2.概述

關系模型的主要特征是用二維表格表達實體集。與前兩種模型相比,其數據結構簡單,容易理解,可以表示一對一、一對多、多對多的關系。關系模型是由若干個關系模式組成的集合。學生課程的關系模型如圖2-10所示,數據如圖2-11所示。

圖2-10 學生-課程的關系模型

圖2-11 學生-課程的關系數據

根據關系數據理論和Codd準則的定義,一種語言必須能處理與數據庫的所有通信問題,這種語言有時也稱為綜合數據專用語言,該語言在關系型數據庫管理系統中就是SQL。SQL的使用主要通過數據操縱、數據定義和數據管理3種操作實現。

關系模型的完整性規則是對數據的約束。關系模型提供了3類完整性規則:實體完整性規則、參照完整性規則和用戶定義完整性規則。其中,實體完整性規則和參照完整性規則是關系模型必須滿足的完整性約束條件,稱為關系完整性規則。

(1)實體完整性

實體完整性指關系的主屬性(主鍵的組成部分)不能是空值。現實世界中的實體是可區分的,即它們具有某種唯一性標識。相應地,關系模型中以主鍵作為唯一性標識,主鍵中的屬性即主屬性不能取空值(“不知道”或“無意義”的值)。如果主屬性取空值,就說明存在某個不可標識的實體,即存在不可區分的實體,這與現實世界的環境相矛盾,因此這個實體一定不是一個完整的實體。例如“學生表”中的屬性“學號”不能為空。

(2)參照完整性

如果關系的外鍵R1與關系R2中的主鍵相符,那么外鍵的每個值必須在關系R2中主鍵的值中找到或者其為空值。例如,“課程表”的屬性“學號”必須與“學生表”的屬性“學號”相符。

(3)用戶定義完整性

它是針對某一具體的實際數據庫的約束條件,由應用環境所決定,反映某一具體應用所涉及的數據必須滿足的要求。關系模型提供定義和檢驗這類完整性的機制,以便用統一、系統的方法處理,而不必由應用程序承擔這一功能。例如,“成績表”中的屬性“成績”的取值范圍在0-100之間,就是用戶定義的完整性。

3.基本概念

在現實世界中,要描述一個事物,常常取其若干特征來表示。這些特征稱為屬性。例如,大學生可用姓名、學號、性別、系別等屬性來描述。每個屬性對應一個值的集合,作為其可以取值的范圍,稱為屬性的域。例如,姓名的域是所有合法姓名的集合,性別的域是{男,女}等。

一個對象可以用一個或多個關系來表示。關系就是定義在它的所有屬性域上的多元關系。設為R,它有屬性A1、A2、…、An,其對應的域分別為D1、D2、…、Dn,則關系R可表示為:R=(A1/D1,A2/D2,…,An/Dn)或R=(A1,A2,…,An)。元組是關系中各屬性的一個取值的集合。

關系數據庫的特點在于它將每個具有相同屬性的數據獨立地存在一個表中。對任何一個表而言,用戶可以新增、刪除和修改表中的數據,而不會影響表中的其他數據。下面介紹關系數據庫中的一些基本術語。

①候選碼(Key):關系中的某一屬性或屬性組的值唯一地決定其他所有屬性的值,也就是唯一地決定一個元組,而其任何真子集無此性質,則稱這個屬性或屬性組為該關系的候選碼。

②主碼(Primary Key):它是被挑選出來作為表行的唯一標識的候選碼,一個表中只有一個主碼。主碼又稱為主鍵。主碼可以由一個字段,也可以由多個字段組成,分別稱為單字段主碼或多字段主碼,主碼又稱主鍵。

③外碼(Foreign Key):如果一個碼在一個關系中是主碼,則在另一個關系中是外碼。由此可見,外碼表示了兩個關系之間的聯系,外碼又稱為外鍵。

例如圖2-11中,“學號”是“學生表”的主碼,“成績表”中“學號”則是外碼,“學號”+“課程號”是“成績表”的主碼,“課程號”是“課程表”的主碼。所有主碼在沒有被選為主碼前都是候選碼,候選碼可以有多個,而主碼有一個。如果“學生表”同時有“學號”和“身份證”兩個屬性,這兩個屬性都能唯一地確定一個元組,因此,兩個屬性都是“候選碼”,可以選擇任意一個作為主碼。

4.關系的性質

關系模型原理的核心是“規范化”概念,規范化是把數據庫組織成在保持存儲數據完整性的同時最小化冗余數據的結構的過程。規范化的數據庫是符合關系模型規則的數據庫,通常把這些規則稱為范式。

范式是符合某一種級別的關系模式的集合。關系數據庫中的關系必須滿足一定的要求即滿足不同的范式。目前關系數據庫有6種范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、Boyce-Codd范式(BCNF)、第四范式(4NF)和第五范式(5NF)。在實際的數據庫設計過程中,通常需要用到的是前三類范式。

關系模型的優點是:結構簡單,容易被用戶理解,數據具有獨立性,采用非過程化的數據請求,用戶不需要知道數據存儲的細節——更重要的是關系模型具有堅實的理論基礎。當然,關系模型也存在數據類型表達能力差、復雜查詢的功能較弱等缺點。關系模型有如下特點:

①關系是一個二維表,表中的每一行對應一個元組,表中的每一列有一個屬性名且對應一個域。列是同質的,即每一列的值來自同一域。

②關系中的每一個屬性不可再分解,即所有域都應是原子數據的集合。

③關系中任意兩個元組不能完全相同。關系中行的排列順序、列的排列順序是無關緊要的。每個關系都由關鍵字的屬性集唯一標識各元組。

2.2.4 面向對象數據模型

隨著信息技術和市場的發展,人們發現關系型數據庫系統雖然技術很成熟,但其局限性也是顯而易見的:它能很好地處理所謂的“表格型數據”,卻對技術界出現的越來越多的復雜類型的數據無能為力。20世紀90年代以后,技術界一直在研究和尋求新型數據庫系統。但在什么是新型數據庫系統的發展方向的問題上,產業界一度相當困惑。受當時技術風潮的影響,在相當一段時間內,人們把大量精力花在研究“面向對象的數據庫系統(Object Oriented Database)”或簡稱“OO數據庫系統”上。值得一提的是,美國Stonebraker教授提出的面向對象的關系型數據庫理論曾一度受到產業界的青睞。而Stonebraker本人也在當時被Informix花大價錢聘為技術總負責人。

面向對象的關系型數據庫系統產品的市場發展情況并不理想。理論上的完美并沒有帶來市場的熱烈反應。其不成功的主要原因在于,這種數據庫產品的主要設計思想是企圖用新型數據庫系統來取代現有的數據庫系統。這對許多已經運用數據庫系統多年并積累了大量工作數據的客戶,尤其是大客戶來說,他們是無法承受新舊數據間的轉換而帶來的巨大工作量及巨額開支的。另外,面向對象的關系型數據庫系統使查詢語言變得極其復雜,從而使得無論是數據庫的開發商家還是應用客戶都視其復雜的應用技術為畏途。

1.對象和對象標識符

面向對象數據模型(Object-Oriented Data Model,OO數據模型)是面向對象程序設計方法與數據庫技術相結合的產物,用以支持非傳統應用領域對數據模型提出的新需求。在面向對象數據模型中,所有現實世界中的實體都模擬為對象,小至一個整數、字符串,大至一個公司、一部電影,都可以看成對象,每個對象都有一個系統內唯一不變的標識符,稱為對象標識符(OID)。OID一般由系統產生,用戶不得修改。OID是區別對象的唯一標識,與對象的屬性值無關。

①如果對象的屬性值和方法一樣,但OID不同,則仍認為是兩個“相等”而不同的對象。

②如果一個對象的屬性值修改了,只要其標識符不變,則仍認為是同一對象。因此,OID可看成是對象的替身,以構造更復雜的對象。一個對象一般是由一組屬性、一組方法、一個OID組成的。

每個對象包含若干屬性,用以描述對象的狀態、組成和特性。屬性也是對象,它又可能包含其他對象作為其屬性。這種遞歸引用對象的過程可以繼續下去,從而組成各種復雜的對象。除了屬性外,對象還包含若干方法,用以描述對象的行為特性。方法又稱為操作,它可以改變對象的狀態,對對象進行各種數據庫操作。方法的定義與表示包含兩個部分:一是方法的接口,說明方法的名稱、參數和結果的類型;二是方法的實現部分,是用程序編寫的一個過程,以實現方法的功能。面向對象邏輯模型如圖2-12所示。

圖2-12 面向對象邏輯模型

2.封裝和消息傳遞

在OO數據模型中,系統把一個對象的屬性和方法封裝成一個整體。對象的封裝性體現在以下3個方面:①對象具有清晰的邊界;②對象具有統一的外部接口;③對象的內部實現是不公開的。對象是封裝的,對象與外界、對象之間的通信一般只能借助于消息。消息傳送給對象,調用對象的相應方法,進行相應的操作,再以消息形式返回操作的結果。這種通信機制稱為消息傳遞。消息一般由操作者、接收者、操作參數3個部分組成。對象、消息之間的關系如圖2-13所示。

圖2-13 對象的消息傳遞

3.類和實例

類是具有共同屬性和方法的對象的集合,這些屬性和方法可以在類中統一說明。同類對象在數據結構和操作性質方面具有共性。例如,大學生、研究生是一些有共同性質的對象,能抽象為一個學生。類中每個對象稱為該類的一個實例。同一個類中,對象的屬性名雖然是相同的,但這些屬性的取值會因各實例而異。圖2-14(a)所示為學生類,圖2-14(b)所示為該學生類的一個實例。

在一些OO數據模型中,類視為對象,因此由類可以組成新的類。這種由類組成的類稱為元類,元類的實例是類。圖2-15(a)所示的班級類是圖2-15(b)中學生類的組成部分,因此學生類為元類。

圖2-14 類和實例

圖2-15 元類的實例

在類層次結構中,一個類的下層可以是多個子類;一個類的上層也可以有多個超類。在類繼承時,可能發生屬性名和方法名的同名沖突:①各超類之間的沖突;②子類與超類之間的沖突。

在關系數據模型中基本數據結構是表,這相當于OO數據模型中的類,而關系中的數據元組相當于OO數據模型中的實例。在關系數據模型中,對數據庫的操作都歸結為對關系的運算,而在OO數據模型中,對類層次結構的操作分為兩部分:一是封裝在類內的操作,即方法;二是類間相互溝通的操作,即消息。在關系數據模型中有域、實體和參照完整性約束。完整性約束條件可以用邏輯公式表示,稱為完整性約束方法。在OO數據模型中,這些用于約束的公式可以用方法或消息表示,稱為完整性約束消息。

主站蜘蛛池模板: 灵璧县| 陇西县| 浪卡子县| 绥化市| 厦门市| 刚察县| 郸城县| 通化市| 佛教| 德昌县| 洛宁县| 青阳县| 乐亭县| 阳东县| 彭阳县| 甘德县| 潜山县| 彭州市| 鄂伦春自治旗| 康保县| 铜山县| 赤城县| 鄂托克前旗| 雷波县| 土默特右旗| 嘉禾县| 鲁甸县| 呼和浩特市| 五原县| 六安市| 根河市| 乌拉特前旗| 昌黎县| 宣威市| 尚义县| 民县| 桂阳县| 安远县| 大洼县| 邯郸县| 名山县|