在 ANSI-SPARC 三層結(jié)構(gòu)中硬梁, 描述了數(shù)據(jù)庫結(jié)構(gòu)呈現(xiàn)在特定用戶面前的一個外部視圖滋捶。在關(guān)系模型中 “視圖(view)” 這個詞的含義稍微有些不同抓歼。它不完全是用戶看到的外部模型嚷闭,它指 虛關(guān)系 或者 導(dǎo)出關(guān)系勤众,即無需單獨存在掩浙,必要時可從一或多個基本關(guān)系中動態(tài)的將其導(dǎo)出花吟。因此衅澈,一個外部模型可以由基本關(guān)系(概念級)和基本關(guān)系導(dǎo)出的視圖共同組成。
1. 術(shù)語
前述關(guān)系均為基本關(guān)系部默。
- 基本關(guān)系(base relation):與概念模式中的一個實體相對應(yīng)的具名關(guān)系婚夫,它的元組都存儲在數(shù)據(jù)庫的物理結(jié)構(gòu)中。
可以根據(jù)關(guān)系定義視圖。
- 視圖(view):對一個或多個基本關(guān)系進行關(guān)系操作得到的動態(tài)結(jié)果。視圖是一個無需存在于數(shù)據(jù)庫當(dāng)中禽笑,但卻可以根據(jù)某個特定用戶需要在必要時再產(chǎn)生的虛關(guān)系僚稿。
視圖是一個因用戶存在,并呈現(xiàn)在用戶面前的關(guān)系,可以把它當(dāng)做基本關(guān)系進行操作,但與基本關(guān)系不同的是,它并不是真正存在于存儲器中(雖然它的定義存儲在系統(tǒng)目錄中)方库。視圖的內(nèi)容被定義成基于一個或多個基本關(guān)系的查詢配喳。對試圖所進行的任何操作自動的轉(zhuǎn)換成對導(dǎo)出它的關(guān)系進行操作。視圖是 動態(tài)的,這意味著,對導(dǎo)出視圖的基本關(guān)系的修改將立即反映到視圖上。當(dāng)用戶對視圖做允許的修改時刊棕,這些修改將作用到基本關(guān)系上。
2. 視圖的用途
需要視圖機制的原因:
通過對特定用戶隱藏部分數(shù)據(jù)庫信息,提供了一個強大而靈活的安全機制。如果屬性或元組不出現(xiàn)在視圖中杈曲,用戶將無從得知其存在。
允許用戶根據(jù)自己的需求自定義訪問數(shù)據(jù)的方法,因此不同的用戶可以通過不同的途徑同時看到相同的數(shù)據(jù)枢劝。
可以簡化對基本關(guān)系的復(fù)雜操作。例如卜壕,如果一個視圖被定義成兩個關(guān)系的聯(lián)合(連接)您旁,用戶就可以在該視圖上執(zhí)行更為簡單的操作,而這個操作將會被 DBMS 轉(zhuǎn)換成該連接上的等價操作轴捎。
可以讓視圖支持用戶所熟悉的外部模型鹤盒。例如:
用戶可能需要這樣的 Branch 元組,它包含經(jīng)理的姓名和 Branch 中已有的其他屬性侦副≌炀猓可以將關(guān)系 Branch 與關(guān)系 Staff 連接起來,并限定關(guān)系 Staff 中員工的職位必須是 “Manager”秦驯,從而創(chuàng)建所需視圖率触。
應(yīng)該讓一些員工看不到 Staff 中的 salary 屬性。
可以對屬性進行重命名,或者是更改屬性的順序葱蝗。例如穴张,某個用戶習(xí)慣把分公司的屬性 branchNo 的全稱 Branch Number 寫出來,那么两曼,可以通過自定義的視圖讓他看到那樣的列標題皂甘。
某些員工應(yīng)該只能看到他們所管理的房產(chǎn)記錄。
雖然這些例子足以說明視圖提供了 邏輯數(shù)據(jù)獨立性悼凑,但實際上偿枕,視圖還提供了更為重要的一類邏輯數(shù)據(jù)獨立性,即允許概念模式的重組户辫。例如渐夸,如果在某個關(guān)系中添加了一個新的屬性,當(dāng)前用戶可以完全不知道他的存在渔欢,只要他們的視圖不涉及該屬性墓塌。再則,一個現(xiàn)有的關(guān)系被重新排列或是被拆分奥额,仍然可以通過定義視圖而讓用戶按原樣使用數(shù)據(jù)庫苫幢。
3. 視圖的更新
對某個基本關(guān)系的所有更新應(yīng)該立即反映到涉及這個基本關(guān)系的視圖中。同樣垫挨,如果這個視圖被更新韩肝,那么它涉及的底層基本關(guān)系也應(yīng)該反應(yīng)出這種變化。但通過視圖進行更新存在一些約束九榔。下面給出大多數(shù)系統(tǒng)允許通過視圖進行更新操作的條件:
- 如果視圖由一個基本關(guān)系的簡單查詢生成哀峻,而且他還包含了基本關(guān)系中的主關(guān)鍵字或是候選關(guān)鍵字,則可以通過這個視圖進行更新操作哲泊。
- 不允許對涉及多個基本關(guān)系的視圖進行更新剩蟀。
- 如果視圖的生成中涉及聚集或是分組操作,則不允許通過這個視圖進行更新攻旦。
可以根據(jù)理論上不可更新喻旷、理論上可更新和部分可更新來對視圖進行分類生逸。