本節書摘來自華章出版社《資料庫原理與應用(第3版)》一 書中的第2章,第2.4節,作者:何玉潔,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。
考察資料庫系統結構可以有不同的層次或不同的角度。
1)從資料庫管理角度看,資料庫系統通常采用三級模式結構。這是資料庫系統的内部結構。
2)從最終使用者角度看,資料庫系統的結構分為集中式結構、檔案伺服器結構、客戶/伺服器結構等。這是資料庫系統的外部結構。
本節讨論資料庫系統的内部結構。它是為後續章節的内容建立一個架構結構,這個架構用于描述一般資料庫管理系統的概念,但并不是所有的資料庫管理系統都一定要使用這個架構,它在資料庫管理系統中并不是唯一的,特别是一些“小”的資料庫管理系統将難以支援這個結構的所有方面。這裡介紹的資料庫系統結構基本上能很好地适應大多數資料庫管理系統,而且,它基本上與ansi/sparc dbms研究組提出的資料庫管理系統的體系結構(稱作ansi/sparc體系結構)相同。
資料模型(組織層資料模型)用于描述資料的組織形式,模式則是用給定的資料模型對具體資料的描述(就像用某一種程式設計語言編寫具體應用程式一樣)。
模式是資料庫中全體資料的邏輯結構和特征的描述,它僅僅涉及“型”的描述,不涉及具體的值。關系模式是關系的“型”或元組的結構共性的描述,它對應的是關系表的表頭。
模式的一個具體值稱為模式的一個執行個體,比如表2-1中的每一行資料就是其表頭結構(模式)的一個具體執行個體。一個模式可以有多個執行個體。模式是相對穩定的(結構不會經常變動),而執行個體是相對變動的(具體的資料值可以經常變化)。資料模式描述一類事物的結構、屬性、類型和限制,實質上是用資料模型對一類事物進行模拟,而執行個體是反映某類事物在某一時刻的目前狀态。
雖然實際的資料庫管理系統産品種類很多,支援的資料模型和資料庫語言也不盡相同,資料的存儲結構也各不相同,但它們在體系結構上通常都具有相同的特征,即采用三級模式結構并提供兩級映像功能。
資料庫的三級模式結構是指資料庫的外模式、模式和内模式。圖2-11所示為各級模式之間的關系。
1)内模式:最接近實體存儲,也就是資料的實體存儲方式,包括資料存儲位置、存儲方式等。
2)外模式:最接近使用者,也就是使用者所看到的資料視圖。
3)模式:是介于内模式和外模式之間的中間層,是資料的邏輯組織方式。
在圖2-11中,外模式是面向每類使用者的資料需求而設計的,而模式描述的是一個部門或公司的全體資料。換句話說,外模式可以有許多,每一個都或多或少地抽象表示整個資料庫的某一部分資料,而模式隻有一個,它是對包含現實世界業務中的全體資料的抽象表示,注意這裡的抽象指的是記錄和字段這些更加面向使用者的概念,而不是位和位元組那些面向機器的概念。内模式也隻有一個,它表示資料的實體存儲。
我們這裡所讨論的内容與資料庫是否是關系型的沒有直接關系,但簡要說明一下關系系統中的三級模式結構,将有助于了解這些概念。
第一,關系資料庫中的模式一定是關系的,在該層可見的實體是關系的表和關系的操作符。
第二,外模式也是關系的或接近關系的,它們的内容來自模式。例如我們可以定義兩個外模式,一個記錄學生的姓名、性别[表示為:學生基本資訊1(姓名,性别)],另一個記錄學生的姓名和所在系[表示為:學生基本資訊2(姓名,所在系)],這兩個外模式的内容均來自“學生基本資訊”這個模式。外模式對應到關系資料庫中是“外部視圖”或簡稱為“視圖”,它在關系資料庫中有特定的含義,我們将在第7章詳細讨論視圖的概念。
第三,内模式不是關系的,它是資料的實體存儲方式。其實,不管是什麼系統,其内模式都是一樣的,都是存儲記錄、指針、索引、散清單等。事實上,關系模型與内模式無關,它關心的是使用者的資料。
下面我們以圖2-11為基礎,從外模式開始進一步詳細讨論這三層結構。

1.?外模式
外模式也稱為使用者模式或子模式,它是對現實系統中使用者感興趣的整體資料的局部描述,用于滿足資料庫的不同使用者對資料的需求。外模式是對資料庫使用者能夠看見和使用的局部資料的邏輯結構和特征的描述,是資料庫整體資料結構(即模式)的子集或局部重構。
外模式通常是模式的子集。一個資料庫可以有多個外模式。由于它是各個使用者的資料視圖,如果不同的使用者在應用需求、看待資料的方式、對資料保密要求等方面存在差異,則其外模式的描述就是不同的。即使對模式中同樣的資料,在外模式中的結構、類型、長度等都可以不同。
例如,學生性别資訊(學号,姓名,性别)視圖就是表2-1所示關系的子集,它是宿舍配置設定部門所關心的資訊,是學生基本資訊的子集。又例如,學生成績(學号,姓名,課程号,成績)外模式是任課教師所關心的資訊,這個外模式的資料就是表2-1的學生基本資訊表(模式)和表2-2的學生選課資訊表(模式)所含資訊的組合(或稱為重構)。
外模式同時也是保證資料庫安全的一個措施。每個使用者隻能看到和通路其所對應的外模式中的資料,并屏蔽掉不需要的資料,是以保證不會出現由于使用者的誤操作和有意破壞而造成資料損失。例如,假設有描述職工資訊的關系模式,結構如下:
職工(職工号,姓名,所在部門,基本工資,職務工資,獎勵工資)
如果不希望一般職工看到每個職工的獎勵工資,則可生成一個包含一般職工可以看的資訊的外模式,結構如下:
職工資訊(職工号,姓名,所在部門,基本工資,職務工資)
這樣就可以保證一般使用者不會看到“獎勵工資”項。
外模式就是特定使用者所看到的資料庫的内容,對那些使用者來說,外模式就是他們的資料庫。
2.?模式
模式也稱為邏輯模式或概念模式,是對資料庫中全體資料的邏輯結構和特征的描述,是所有使用者的公共資料視圖。概念模式表示資料庫中的全部資訊,其形式要比資料的實體存儲方式抽象。它是資料庫結構的中間層,既不涉及資料的實體存儲細節和硬體環境,也與具體的應用程式、所使用的應用開發工具和環境無關。
模式實際上是資料庫資料在邏輯級上的視圖。一個資料庫隻有一種模式。資料庫模式以某種資料模型為基礎,綜合地考慮了所有使用者的需求,并将這些需求有機地結合成一個邏輯整體。定義資料庫模式時不僅要定義資料的邏輯結構,比如資料記錄由哪些資料項組成,資料項的名字、類型、取值範圍等,而且還要定義資料之間的聯系,定義與資料有關的安全性、完整性要求。
模式不涉及存儲字段的表示,不涉及存儲記錄對列、索引、指針或其他存儲的通路細節。如果模式以這種方式真正地實作了資料獨立性,那麼根據這些模式定義的外模式也會有很強的獨立性。
資料庫管理系統提供了模式定義語言(ddl)來定義資料庫的模式。
3.?内模式
内模式也稱為存儲模式。内模式是對整個資料庫的底層表示,它描述了資料的存儲結構,比如資料的組織與存儲方式,是順序存儲、b樹存儲還是散列存儲,索引按什麼方式組織、是否加密等。注意,内模式與實體層不一樣,它不涉及實體記錄的形式(即實體塊或頁,輸入/輸出機關),也不考慮具體裝置的柱面或磁道大小。換句話說,内模式假定了一個無限大的線性位址空間,位址空間到實體存儲的映射細節是與特定系統有關的,并不反映在體系結構中。
資料庫的三級模式是對資料的三個抽象級别,它把資料的具體組織留給dbms,使使用者能邏輯、抽象地處理資料,而不必關心資料在計算機中的具體表示方式與存儲方式。為了能夠在内部實作這三個抽象層次間的聯系和轉換,資料庫管理系統在三個模式之間提供了以下兩級映像(參見圖2-11):
外模式/模式映像。
模式/内模式映像。
正是這兩級映像功能保證了資料庫中的資料能夠具有較高的邏輯獨立性和實體獨立性,使資料庫應用程式不随資料庫資料的邏輯或存儲結構的變動而變動。
1.?外模式/模式映像
模式描述的是資料的全局邏輯結構,外模式描述的是資料的局部邏輯結構。對應于同一個模式可以有多個外模式。對于每個外模式,資料庫管理系統都有一個外模式到模式的映像,它定義了該外模式與模式之間的對應關系,即如何從外模式找到其對應的模式。這些映像定義通常包含在各自的外模式描述中。
當模式改變時(比如增加新的關系、新的屬性,改變屬性的資料類型等),可由資料庫管理者用外模式定義語句,調整外模式到模式的映像,進而保持外模式不變。由于應用程式一般是依據資料的外模式編寫的,是以也不必修改應用程式,進而保證了程式與資料的邏輯獨立性。
2.?模式/内模式映像
模式/内模式映像定義了資料庫的邏輯結構與實體存儲之間的對應關系,該映像關系通常被儲存在資料庫的系統表(由資料庫管理系統自動建立和維護,用于存放維護系統正常運作的表)中。當資料庫的實體存儲改變了,比如選擇了另一個存儲位置,隻需要對模式/内模式映像作相應的調整,就可以保持模式不變,進而也不必改變應用程式。是以,保證了資料與程式的實體獨立性。
在資料庫的三級模式結構中,模式(即全局邏輯結構)是資料庫的中心與關鍵,它獨立于資料庫的其他層。設計資料庫時也是首先設計資料庫的邏輯模式。
資料庫的内模式依賴于資料庫的全局邏輯結構,它獨立于資料庫的使用者視圖(也就是外模式),也獨立于具體的儲存設備。内模式将全局邏輯結構中所定義的資料結構及其聯系按照一定的實體存儲政策進行組織,以達到較好的時間與空間效率。
資料庫的外模式面向具體的使用者需求,它定義在邏輯模式之上,獨立于存儲模式和儲存設備。當應用需求發生變化,相應的外模式不能滿足使用者的要求時,就需要對外模式作相應的修改以适應這些變化。是以設計外模式時應充分考慮到應用的擴充性。
原則上,應用程式都是在外模式描述的資料結構上編寫的,而且它應該隻依賴于資料庫的外模式,并與資料庫的模式和存儲結構獨立(但目前很多應用程式都是直接針對模式進行編寫的)。不同的應用程式有時可以共用同一個外模式。資料庫管理系統提供的兩級映像功能保證了資料庫外模式的穩定性,進而從底層保證了應用程式的穩定性,除非應用需求本身發生變化,否則應用程式一般不需要修改。
資料與程式之間的獨立性使得資料的定義和描述可以從應用程式中分離出來。另外,由于資料的存取由dbms負責管理和實施,是以,使用者不必考慮存取路徑等細節,進而簡化了應用程式的編制,減少了對應用程式的維護和修改工作。