轉(zhuǎn)自:https://blog.csdn.net/u010297957/article/details/50846279
考察數(shù)據(jù)庫的結(jié)構(gòu)可以有多種不同的層次或角度兴想。(這里說的數(shù)據(jù)庫不局限于關(guān)系型數(shù)據(jù)庫)
1. 如果從DBMS角度來看扔茅,數(shù)據(jù)庫通常采用三級模式結(jié)構(gòu),也就是說DBMS內(nèi)部的系統(tǒng)結(jié)構(gòu)是三級模式結(jié)構(gòu)
2. 如果從數(shù)據(jù)庫最終用戶角度來看裕寨,數(shù)據(jù)庫系統(tǒng)的結(jié)構(gòu)可分為:單用戶結(jié)構(gòu)、主從式結(jié)構(gòu)派继、分布式結(jié)構(gòu)宾袜、客戶/服務(wù)器、瀏覽器/應(yīng)用服務(wù)器/數(shù)據(jù)庫服務(wù)器多層結(jié)構(gòu)等驾窟。這是數(shù)據(jù)庫系統(tǒng)外部體系結(jié)構(gòu)庆猫。
1. 數(shù)據(jù)庫系統(tǒng)的模式(Schema)
數(shù)據(jù)模型中有“型”和“值”的概念,如:學(xué)生(學(xué)號绅络,性別月培,班級)是“型”,而:張三(20160310001恩急,1杉畜,3年2班)是“值”。
模式(Schema)是數(shù)據(jù)庫中全體數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述衷恭,它僅僅描述型此叠,而并不包括值。模式的值稱為模式的一個實例(Instance)匾荆,同一個模式可以有多個實例拌蜘。
雖然實際的DBMS系統(tǒng)種類很多杆烁,他們支持的數(shù)據(jù)模式不盡相同,使用不同的語言简卧,建立在不同的OS上兔魂,數(shù)據(jù)的存儲結(jié)構(gòu)也各不相同,但他們在體系結(jié)構(gòu)上通常具有相同的特征举娩,即采用三級模式結(jié)構(gòu)并提供兩級影像功能
2. 三級模式
數(shù)據(jù)庫的三級模式結(jié)構(gòu)是指:數(shù)據(jù)庫系統(tǒng)是由外模式析校、模式和內(nèi)模式三級構(gòu)成,如圖:
2.1 模式(Schema)
模式也稱為:邏輯模式铜涉,它是DB中全體數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述智玻,是所有用戶的公共數(shù)據(jù)視圖。模式層是數(shù)據(jù)庫模式結(jié)構(gòu)的中間層芙代,既不涉及到數(shù)據(jù)的物理存儲細節(jié)和硬件環(huán)境吊奢,也與具體的應(yīng)用程序、應(yīng)用開發(fā)工具以及高級程序設(shè)計語言無關(guān)(C纹烹、C++页滚、JAVA等)。
模式就是數(shù)據(jù)庫數(shù)據(jù)在邏輯上的視圖铺呵,且一個數(shù)據(jù)庫只有一個模式裹驰。實際工作中,模式就等同于程序員創(chuàng)建一個具體的數(shù)據(jù)庫的全部操作片挂,如:這是一個MySQL數(shù)據(jù)庫幻林,有2張表,每個表的名字音念,屬性的名字沪饺、類型、取值范圍闷愤,主鍵随闽,外鍵,索引肝谭,其他完整性約束等等。
DBMS提供模式描述語言(模式DDL)來嚴(yán)格地定義模式蛾扇。
2.2 外模式
外模式也稱為:子模式(subschema)/用戶模式攘烛,它是數(shù)據(jù)庫用戶(應(yīng)用程序員、最終用戶)能夠看到的使用的局部數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述镀首,是數(shù)據(jù)庫的數(shù)據(jù)視圖坟漱,是與某一個應(yīng)用有關(guān)的數(shù)據(jù)的邏輯表示。
外模式通常是模式的子集更哄。一個數(shù)據(jù)庫可以有多個外模式芋齿。同一個外模式可以為某一用戶的多個應(yīng)用系統(tǒng)所使用腥寇,但一個應(yīng)用系統(tǒng)只能使用一個外模式。
外模式是保證數(shù)據(jù)庫安全性的一個有力措施觅捆。每個用戶只能看見和訪問所對應(yīng)的外模式中的數(shù)據(jù)赦役,數(shù)據(jù)庫中的其余數(shù)據(jù)是不可見的。
DBMS提供子模式描述語言(子模式DDL)來嚴(yán)格地定義子模式栅炒。
2.3 內(nèi)模式
內(nèi)模式也稱為:存儲模式(Storage schema)掂摔,一個數(shù)據(jù)庫只有一個內(nèi)模式。它是數(shù)據(jù)庫物理結(jié)構(gòu)和存儲方式的描述赢赊,是數(shù)據(jù)在數(shù)據(jù)庫內(nèi)部的表示方式乙漓。如:記錄的存儲方式是堆存儲,還是按照某些屬性值的升(降)存儲释移,還是按照屬性值聚簇(cluster)存儲叭披;索引按照什么方式組織,是B+樹索引玩讳,還是hash索引等等涩蜘。
DBMS提供內(nèi)模式描述語言(內(nèi)模式DDL/存儲模式DDL)來嚴(yán)格定義內(nèi)模式。
三級模式在關(guān)系型數(shù)據(jù)庫的對應(yīng)實現(xiàn)
三級模式是數(shù)據(jù)庫系統(tǒng)通常采用的結(jié)構(gòu)锋边,但這并不意味著你必須按照三級模式結(jié)構(gòu)設(shè)想的那樣來編程皱坛。這是因為,各種類型數(shù)據(jù)庫(層次豆巨、網(wǎng)狀剩辟、關(guān)系)和各個具體數(shù)據(jù)庫對三級模式的提供的支持是不完善和不一致的。
可以看到三級模式都是DDL(Data Definition language)來定義的往扔,那么在RDBMS中三種模式的定義都包含在可以使用的DDL語句中:
外模式(DDL中的Subschema DDL部分)
在RDBMS中就只有一個視圖(View)來支持
當(dāng)然視圖提供的也只是一定程度的數(shù)據(jù)邏輯獨立性贩猎。因為對于視圖的更新是有條件的,因此當(dāng)應(yīng)用程序有需要修改數(shù)據(jù)的語句時萍膛,仍然不得不去操作基本表吭服。所以如果基本表改變了,那么應(yīng)用程序還是要變…
模式(DDL中的Schema DDL部分)
模式就是基本表蝗罗,但我覺得除了視圖和索引組織方式等等之外都是模式的范圍艇棕。表、字段串塑、索引沼琉、存儲過程、觸發(fā)器等等
內(nèi)模式(DDL中的Storage DDL部分)
內(nèi)模式是存儲文件桩匪,但存儲文件的存儲方式和結(jié)構(gòu)可以被定義打瘪,這一部分能操作的情況比較少,舉一個例子如MySQL中創(chuàng)建table并且制定使用MEMORY引擎、使用hash索引
CREATE TABLE testhash (?
? ? fname VARCHAR(50) NOT NULL,?
? ? lname VARCHAR(50) NOT NULL,?
? ? KEY USING HASH(fname)?
) ENGINE=MEMORY;
3. 二級映像功能和數(shù)據(jù)的獨立性
數(shù)據(jù)庫的3級模式是對數(shù)據(jù)的3個抽象級別闺骚。它使得用戶能夠邏輯地抽象地處理數(shù)據(jù)彩扔,而不必再去關(guān)心數(shù)據(jù)在計算機中的具體表示方式與存儲方式。實際上僻爽,為了能夠?qū)崿F(xiàn)在這3個抽象層次之間的聯(lián)系和轉(zhuǎn)換虫碉,DBMS在這三級模式之間設(shè)計了兩層映像:
外模式/模式映像
模式/內(nèi)模式映像
這兩層映像保證了數(shù)據(jù)庫中的數(shù)據(jù)能夠具有較高的邏輯獨立性和物理獨立性。
3.1 外模式/模式映像
由上可知:一個DB只有一個模式进泼,但可以有多個外模式蔗衡。
所以,對于每一個外模式乳绕,數(shù)據(jù)庫系統(tǒng)都有一個外模式/模式映像绞惦,它定義了這個外模式與模式的對應(yīng)關(guān)系。外模式的描述中通常包含了這些映像的定義洋措。
當(dāng)模式改變時(增加新的關(guān)系济蝉、新的屬性、改變屬性的數(shù)據(jù)類型等)菠发,由數(shù)據(jù)庫管理員對各個外模式/模式映像作相應(yīng)的改變王滤,可以使得外模式保持不變。而又由于應(yīng)用程序應(yīng)該是依據(jù)外模式編寫的滓鸠,從而應(yīng)用程序不必修改雁乡,這就保證了數(shù)據(jù)與程序的邏輯獨立性。
總結(jié):外模式/模式映像保證了當(dāng)模式改變時糜俗,外模式不用變 — 邏輯獨立性踱稍。
3.2 模式/內(nèi)模式映像
由上可知:一個DB只有一個模式,也只有一個內(nèi)模式悠抹,所有模式/內(nèi)模式映像是唯一的珠月,它定義了數(shù)據(jù)全局邏輯結(jié)構(gòu)與存儲結(jié)構(gòu)之間的對應(yīng)關(guān)系。
當(dāng)數(shù)據(jù)庫的存儲結(jié)構(gòu)改變時(例如選用了另一個存儲結(jié)構(gòu))楔敌,由數(shù)據(jù)庫管理員對模式/內(nèi)模式映像作出相應(yīng)的改變啤挎,可以使得模式保持不變,從而應(yīng)用程序也不必改變卵凑。這就保證了數(shù)據(jù)和程序的物理獨立性庆聘。
總結(jié):模式/內(nèi)模式映像保證了當(dāng)內(nèi)模式改變時,模式不用變 — 物理獨立性勺卢。
TIPS
兩級映像只是在系統(tǒng)設(shè)計層面上掏觉,在每一個模式上保證了它底層模式(地基)的穩(wěn)定性。就如描述的那樣:模式變了外模式不用變值漫,內(nèi)模式變了模式不用變。
但是织盼,一定要記住兩級映像僅僅是也只能是在系統(tǒng)理論設(shè)計層面上的保證杨何,如果你應(yīng)用需求本身發(fā)生變化了那可能什么都需要改變酱塔。