數據庫的體系結構
DBMS系統種類很多,他們支持的數據模式不盡相同,使用不同的語言,建立在不同的OS上,數據的存儲結構也各不相同,但他們在體系結構上通常具有相同的特征,即采用三級模式結構並提供兩層映射功能。
數據庫模式
為了保障數據與程序之間的獨立性,使用戶能以簡單的邏輯結構操作數據而無須考慮數據的物理結構,簡化應用程序的編制和程序員的負擔,增強系統的可靠性。所以通常DBMS將數據庫的體系結構分為三級模式。
數據庫三級模式
數據庫三級模式分別是外模式,概念模式,內模式。
外模式
外模式也稱用戶模式或子模式,是用戶與數據庫系統的接口。也就是數據庫用戶(包括應用程序員和最終用戶)能夠看見和使用的局部數據的邏輯結構和特征的描述,是數據庫用戶的數據視圖,是與某一應用有關的數據的邏輯表示。
外模式通常是概念模式的子集。一個數據庫可以用很多外模式。同一個外模式可以給某個用戶的多個應用系統所使用,但一個應用系統只能使用一個外模式。
外模式是保證數據庫安全性的一個有力措施。每個用戶只能看到和訪問所對應的外模式中的數據,數據庫中的其余數據是不可見的,這樣可以屏蔽大量無關信息且有利於數據的保護。
在一般的DBMS中都提供有相關的外模式描述語言(外模式DDL)。
++理解下面的文字++:
外模式是以視圖的形式展現給用戶,這里的視圖不是UI,而是數據庫中的視圖,又叫虛表,是相對於基本表而言。基本表就是我們平常在數據庫中創建的那些表,而視圖是對這些基本表中的數據的某種展現形式,是這些數據的一個子集,但不限於某張表的數據的子集,也可以是多張表聯合起來進行顯示的一組數據。比如學校的教務系統,每個學生只能看到自己的成績,而教師可以看到學生們的成績,輔導員可以看到系里所有學生的成績等等。那么可以基於所有學生的成績數據,針對不同權限的用戶選取不同的子集,這個子集就是所謂的視圖。注意:視圖本身並不是實際存放數據,而是對於如何選取數據的一種描述,也就是虛。並且當全局數據改變時,視圖中的數據也會隨着改變。
通過外模式,可以讓不同用戶看到他們可以看到的。
概念模式
概念模式也稱為模式或者邏輯模式。是數據庫中全體數據的邏輯結構和特性的描述,是所有用戶的公共數據視圖。看上圖,它是在外模式和內模式之間,即不涉及數據的物理存儲細節和硬件環境,也與具體的應用程序,開發工具以及高級程序設計語言無關。
一個數據庫只有一個模式。 實際工作中,模式就等同於程序員創建一個具體的數據庫的全部操作。比如這是一個MySQL數據庫,有n張表,每張表的名稱,表中的字段,字段類型,主鍵等等。
DBMS提供模式描述語言(模式DDL)來嚴格地定義模式。
內模式
內模式也稱存儲模式。一個數據庫只有一個內模式。
它是數據庫物理結構和存儲方式的描述,是數據在數據庫內部的表達方式。比如:記錄的存儲方式是堆存儲,還是按照某些屬性值的升(降)存儲;索引按照什么方式組織,是B+樹索引,還是Hash索引等。
DBMS提供內模式描述語言(內模式DDL/存儲模式DDL)來嚴格定義內模式。
三級模式在關系型數據庫的對應關系
1.三級模式是數據庫系統通常采用的結構,但這並不意味着你必須按照三級模式結構設想的那樣來編程。這是因為,各種類型數據庫(層次、網狀、關系)和各個具體數據庫對三級模式的提供的支持是不完善和不一致的。
2.三級模式都是以DDL(Data Definition Language)定義的,那么在RDBMS(關系型)中三種模式的定義都包含在可以使用的DDL語句中:
- 外模式(DDL中的Subschema DLL部分),在RDBMS中就只有一個視圖支持。視圖提供的也只是一定程度的數據邏輯獨立性。因為對於視圖的更新是有條件的,因此當應用程序有需要修改數據的語句時,仍然不得不去操作基本表。所以如果基本表改變了,那么應用程序還是要變的。
- 模式(DDL中的Schema DDL部分),模式就是基本表。除了視圖和索引組織方式等等之外都是模式的范圍,比如表、字段、索引、存儲過程、觸發器等等。
- 內模式(DDL中的Storage DDL部分),內模式是存儲文件。但存儲文件的存儲方式和結構可以被定義,這一部分能操作的情況比較少,舉一個例子如MySQL中創建table並且制定使用MEMORY引擎、使用hash索引
兩層映射
為了能夠實現在這3個抽象層次之間的聯系和轉換,數據庫管理系統在三級模式中提供了兩層映射,分別為 外模式/模式映射 和 模式/內模式映射。
1.外模式/模式映射
對於同一個模式可以有任意多個外模式。對於每一個外模式,數據庫系統都有一個外模式/模式映射。當模式被改變時,數據庫管理員對各個外模式/模式映射做相應的改變,可以使外模式保持不變。這樣,依據數據外模式編寫的應用程序就不用修改,保證了數據與程序的邏輯獨立性。
總結:外模式/模式映射保證了當模式改變時,外模式不用變,即邏輯獨立性。
2.模式/內模式映射
數據庫中只有一個模式和一個內模式,所以模式/內模式的映射是唯一的,它定義了數據庫的全局邏輯結構與存儲結構之間的對應關系。當數據庫的存儲結構被改變時,數據庫管理員對模式/內模式映射做相應的改變,可以使模式保持不變,應用程序相應地也不做變動。這樣,保證了數據與程序的物理獨立性。
總結:模式/內模式映射保證了當內模式改變時,模式不用變,即物理獨立性。
兩層映射只是在系統設計層面上,在每一個模式上保證了它底層模式(地基)的穩定性。兩層映射僅僅是也只能是在系統理論設計層面上的保證,如果你應用需求本身發生變化了那可能什么都需要改變。
參考: