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

2.6 視圖

下面各小節(jié)將介紹一般數(shù)據(jù)庫用戶、開發(fā)人員或DBA創(chuàng)建并使用基本視圖的基礎(chǔ)知識。

2.6.1 普通枧圖

通常稱之為“視圖”,不會占據(jù)任何內(nèi)存空間,只有它的定義(查詢)存儲在數(shù)據(jù)字典中。視圖底層查詢的表稱為“基表”,視圖中的每個基表都可以進(jìn)一步定義為視圖。

視圖有許多優(yōu)點(diǎn),它可以隱藏數(shù)據(jù)復(fù)雜性:高級分析人員可以定義包含EMPLOYEE表的視圖,這樣上層管理部門可以更容易地使用select語句檢索相關(guān)信息,這種檢索表面上看起來是使用表,但實(shí)際上是包含查詢的視圖,該查詢連接EMPLOYEE表。視圖也可以用于實(shí)施安全性。EMPLOYEE表上的視圖EMPINFO只能檢索雇員名和雇員編號,并且該視圖應(yīng)定義為只讀,從而防止更新該表。

【示例2-19】創(chuàng)建普通視圖

create view empinfo as select EMPNO, ENAME from employee with read only;

如果沒有read only子句,則可以更新某行或添加行到視圖中,甚至在包含多個表的視圖上進(jìn)行這些操作。視圖中有一些構(gòu)造可防止對其進(jìn)行更新,例如使用distinct操作符、聚集函數(shù)或group by子句。當(dāng)Oracle處理包含視圖的查詢時,它替換用戶select語句中的底層查詢定義,并且處理結(jié)果查詢,就好像視圖不存在一樣。因此,在使用視圖時,基表上任何已有索引的優(yōu)點(diǎn)并沒有改變。

2.6.2 物化視圖

在某些方面,物化視圖非常類似于普通視圖:視圖的定義存儲在數(shù)據(jù)字典中,并且該視圖對用戶隱藏底層基查詢的細(xì)節(jié)。但是,相似之處僅限于此。

物化視圖也在數(shù)據(jù)庫段中分配空間,用于保存執(zhí)行基查詢得到的結(jié)果集。物化視圖可用于將表的只讀副本復(fù)制到另一個數(shù)據(jù)庫,該副本具有和基表相同的列定義和數(shù)據(jù)。這是物化視圖最簡單的實(shí)現(xiàn)。為了減少刷新物化視圖時的響應(yīng)時間,可以創(chuàng)建物化視圖日志以刷新物化視圖。否則,在需要刷新時就必須進(jìn)行完全刷新,即必須獲取基查詢的全部結(jié)果以刷新物化視圖。

物化視圖日志為以增量方式更新物化視圖提供了方便。在數(shù)據(jù)倉庫環(huán)境中,物化視圖可存儲來自于group by rollup或group by cube查詢的聚集數(shù)據(jù),如果設(shè)置適當(dāng)?shù)某跏紖?shù)值,例如query rewrite enable,并且查詢自身允許查詢重寫(使用query rente子句),則任何與物化視圖執(zhí)行相同類型的聚集操作的查詢將自動使用物化視圖,而不是運(yùn)行初始的查詢。無論物化視圖的類型是什么,在基表中提交事務(wù)或根據(jù)需要刷新它時,系統(tǒng)都會自動對物化視圖進(jìn)行刷新。

物化視圖在很多方面類似于索引,它們都直接和表聯(lián)系并且占用空間,在更新基表時必須刷新它們,它們的存在對用戶而言實(shí)際上是透明的。通過使用可選的訪問路徑來返回查詢結(jié)果,它們可以幫助優(yōu)化查詢。

2.6.3 對象視圖

面向?qū)ο螅∣O)的應(yīng)用程序開發(fā)環(huán)境已經(jīng)變得越來越流行,Oracle 10g數(shù)據(jù)庫完全支持?jǐn)?shù)據(jù)庫中本地化對象和方法的實(shí)現(xiàn)。然而,從純粹的關(guān)系數(shù)據(jù)庫環(huán)境向純粹的OO數(shù)據(jù)庫環(huán)境遷移并不是容易的過程,很少有組織愿意花費(fèi)時間和資源從頭開始構(gòu)建新的系統(tǒng),而Oracle 10g使用對象視圖使這種變遷變得更為容易。

對象視圖允許面向?qū)ο蟮膽?yīng)用程序查看作為對象集合的數(shù)據(jù),這種對象集合具有屬性和方法,而遺留系統(tǒng)仍然可以對INVENTORY表運(yùn)行批處理作業(yè)。對象視圖可以模仿抽象數(shù)據(jù)類型、對象標(biāo)識符(OID)以及純粹的OO數(shù)據(jù)庫環(huán)境能夠提供的引用。和普通視圖一樣,可以在視圖定義中使用instead of觸發(fā)器來允許針對視圖的DML,這里使用的是pl/sql代碼塊,而不是用戶或應(yīng)用程序提供的實(shí)際DML語句。

主站蜘蛛池模板: 米易县| 巴林左旗| 沁源县| 田东县| 搜索| 古交市| 宜都市| 凌云县| 彝良县| 元谋县| 凤山市| 花莲市| 简阳市| 蓬溪县| 巴青县| 道孚县| 花垣县| 城口县| 盖州市| 嘉义县| 儋州市| 遵义县| 武汉市| 平定县| 施甸县| 莒南县| 塔城市| 安吉县| 忻城县| 东海县| 阳春市| 葵青区| 砀山县| 庆元县| 昭通市| 大石桥市| 从化市| 正安县| 西畴县| 天峻县| 锡林浩特市|