- 相關(guān)推薦
Oracle數據庫視圖管理技巧
視圖,對于數據庫來(lái)說(shuō),是一個(gè)最基本的、也是最重要的功能之一。數據庫視圖設計的好壞,直接跟數據庫的性能相關(guān)。而且,在大型數據庫設計中,大家分工合作,基礎表的設計與報表視圖的設計往往由不同的人負責。所以,視圖的設計管理跟基礎表的設計管理一樣,都有很大的學(xué)問(wèn)。
技巧一:把基礎表與視圖脫離開(kāi)來(lái)。
一般來(lái)說(shuō),視圖都是在基礎表的上面建立起來(lái)的。也就是說(shuō),要先有基礎表,而后有視圖。但是,在大型數據庫的設計過(guò)程中,出于項目時(shí)間的考慮,往往基礎表與視圖的設計是同時(shí)進(jìn)行的。如一些人負責基礎表的建立,另一些人則負責視圖的設計與建立等等。在這個(gè)過(guò)程中,往往基礎表不存在的時(shí)候,就需要建立一些視圖,以加快項目的進(jìn)度。
為了使得基礎表的創(chuàng )建和修改與視圖的創(chuàng )建于修改沒(méi)有必然的聯(lián)系,以便于員工之間工作的同步,提高工作效率,所以,在Oracle數據庫中提出了一個(gè)“強制創(chuàng )建視圖”的概念。也就是說(shuō),正常情況下,如果基本表不存在,則創(chuàng )建視圖就會(huì )失敗。但是,我們可以在創(chuàng )建視圖的過(guò)程中,加入一個(gè)參數,只要創(chuàng )建視圖的語(yǔ)法沒(méi)有錯誤的話(huà),即使基礎表不存在,仍然可以建立這張表格。這個(gè)有用的參數就是force選項。如我們建立視圖時(shí),CREATE FORCE VIEW TEXT,只需要在關(guān)鍵字VIEW之前加入FORCE參數即可。如此的話(huà),系統在編譯視圖的時(shí)候,就不會(huì )去考慮基礎表是否存在。
不過(guò)這里要注意一點(diǎn),若基礎表不存在的話(huà),則編譯后該視圖的狀態(tài)為“無(wú)效”,不能再這個(gè)視圖的基礎上執行一些操作,如查詢(xún)操作等等。當下次訪(fǎng)問(wèn)這個(gè)視圖的時(shí)候,則數據庫會(huì )對這個(gè)視圖進(jìn)行重新編譯,若此時(shí)基礎表存在了,則該基礎表就會(huì )變?yōu)橛行?若基礎表不存在,則這視圖就會(huì )失效。
Oracle數據庫之所以如此設置,主要是出于在數據庫設計過(guò)程中協(xié)同辦公的需要。有了這個(gè)功能之后,則在數據庫建立的過(guò)程中,只要把數據庫基礎表與視圖設計好之后,大家就可以分工合作,在數據庫中建立相關(guān)的對象。不然的話(huà),要等基礎表建立好之后再建立視圖,如此就會(huì )明顯的影響數據庫建立的進(jìn)度。所以,在數據庫建立的過(guò)程中,特別是中大型的數據庫系統,這是一個(gè)很實(shí)用的功能。
技巧二:創(chuàng )建視圖的理想步驟。
無(wú)論是簡(jiǎn)單視圖,還是比較復雜的視圖,筆者覺(jué)得數據庫管理員在創(chuàng )建視圖的時(shí)候,最好能夠遵循一定的步驟。這一方面是因為視圖的更改相對來(lái)說(shuō),是一件比較麻煩的工作,所以,我們在建立視圖的時(shí)候,要確保視圖的準確性。另一方面,視圖是基礎表的一個(gè)體現形式,若不按步驟來(lái)做的話(huà),有可能就不能夠達到我們預計的需求。
當然這個(gè)步驟沒(méi)有官方的版本,完全是數據庫管理員根據實(shí)際的經(jīng)驗總結出來(lái)的。這個(gè)步驟不僅對Oracle數據庫有效,對于其他數據庫來(lái)說(shuō),也是類(lèi)似的道理。
一般來(lái)說(shuō),視圖創(chuàng )建可以分為五步走,
第一步:先考慮Select語(yǔ)句的編寫(xiě)。
我們知道,視圖其實(shí)就是一個(gè)Select語(yǔ)句的集合。所以,我們建立視圖的第一步,就是考慮這個(gè)Select語(yǔ)句該如何編寫(xiě)。這個(gè)Select語(yǔ)句編寫(xiě)的是否合理、執行效率的高低直接影響著(zhù)這個(gè)視圖的性能。另外,在Select語(yǔ)句中,可能還會(huì )有格式的控制、內容的編排等等。如在Select語(yǔ)句中,可以把一些字段合并成一個(gè)字段;也可以把相關(guān)的內容進(jìn)行倒置等等。這些功能都是Select語(yǔ)句完成的。所以可以這么說(shuō),Select語(yǔ)句的編寫(xiě)是視圖建立的基礎。
第二步:對這個(gè)Select語(yǔ)句進(jìn)行測試。
當我們編寫(xiě)好Select語(yǔ)句之后,就需要在數據庫中執行這條語(yǔ)句,看其能否查詢(xún)到我們想要的值。在對Select語(yǔ)句進(jìn)行測試的時(shí)候,需要注意一個(gè)問(wèn)題,有時(shí)候Select查詢(xún)語(yǔ)句可以查到準確的數據,但是在以這條語(yǔ)句建立視圖的時(shí)候,可能就會(huì )通不過(guò)。如在一些表之間的連接查詢(xún)的時(shí)候,如果兩個(gè)表中有個(gè)字段名相同,是可以的。因為他們除了字段名字之外,還有表名一起來(lái)定義這個(gè)字段。如A.name與B.name。這是不算重名的。但是,若在建立視圖的時(shí)候,這就會(huì )被認為是重復的列明,需要對其中的一個(gè)列名進(jìn)行重定義。這一點(diǎn)在數據庫視圖建立的時(shí)候,要特別的注意。
第三步:考慮查詢(xún)結果的準確性。
通過(guò)查詢(xún)語(yǔ)句把我們想要的結果查詢(xún)出來(lái)后,我們就需要看看這個(gè)結果是否滿(mǎn)足我們的需要。在這個(gè)過(guò)程中,我們主要注意兩點(diǎn)。一是形式字段是否齊全。在一些應用系統中,若數據庫的視圖要能夠被前臺的應用程序調用的話(huà),則必須包含一些形式字段。如筆者以前在設計一個(gè)ERP系統的時(shí)候,若前臺系統要調用數據庫中的視圖的時(shí)候,必須包含記錄更新時(shí)間、更新者、記錄創(chuàng )建時(shí)間、創(chuàng )建者等相關(guān)信息。若缺乏這些信息的話(huà),則前臺調用這張視圖的時(shí)候,就會(huì )出現錯誤。故在考慮查詢(xún)結果準確性的問(wèn)題的時(shí)候,就要考慮到前臺應用程序的需要,看看這些形式字段是否齊全。二是實(shí)體內容的完整性。我們到底需要顯示表中的哪些字段呢,這個(gè)我們在這里要確認清楚。若顯示內容太多的話(huà),則會(huì )影響視圖的執行效率,而且也會(huì )降低視圖的安全性作用;但是,若字段內容顯示不足的話(huà),則以后要添加字段的話(huà),會(huì )比較麻煩,有一定的工作量。所以在這個(gè)檢驗的時(shí)候,需要根據視圖的實(shí)際功用,確定視圖需要顯示的內容。
第四步:視圖的修飾。
有時(shí)候,為了閱讀的方便,我們需要對查詢(xún)結果進(jìn)行一些修飾。如現在有兩張表,一張是員工基本信息表,這表中有員工姓名、員工職位編號等等;另一張表是職位基本信息表,在這表中有職位編號、職位名稱(chēng)。我們希望在視圖中能夠如下顯示:“職位:?jiǎn)T工名字”,如數據庫工程師:Victor。也就是說(shuō),把兩個(gè)字段合并起來(lái),并且在中間加入一個(gè)冒號。這些格式性的內容都是在查詢(xún)的時(shí)候實(shí)現的。所以,我們確認查詢(xún)的結果沒(méi)有錯誤之后,接下來(lái)就要確認格式問(wèn)題。若能夠在視圖中規范這些格式問(wèn)題,則前臺的程序設計就會(huì )相對來(lái)說(shuō)比較簡(jiǎn)單。
第五步:建立視圖。
等到上面四步都確認無(wú)誤后,我們就要根據上面的查詢(xún)語(yǔ)句來(lái)建立視圖了。不過(guò)在這一步過(guò)程中,也有一些問(wèn)題需要注意。一是視圖名字的命名規格。我們除了遵循數據庫的強制命名格式之外,如不能以數字開(kāi)頭等等,還需要遵循一些軟規則。如視圖最好能夠以V開(kāi)頭,跟基礎表進(jìn)行隔開(kāi);另外在視圖命名中,能夠根據應用模塊的不同,來(lái)進(jìn)行分類(lèi),并體現在視圖的名字中。這對于我們后續視圖的查找都具有非,F實(shí)的意義。二是雖然可以在視圖中直接更新基礎表,不過(guò),為了安全與數據統一的考慮,我們這些過(guò)來(lái)人一般都不建議通過(guò)視圖來(lái)直接更新基礎表中的數據。雖然數據庫提供了類(lèi)似的功能。若要更改相關(guān)數據的話(huà),則直接去更改基礎表的內容為好。在建立視圖的時(shí)候,默認情況下是不能夠通過(guò)視圖直接更新基礎表。
【Oracle數據庫視圖管理技巧】相關(guān)文章:
Oracle 數據庫查詢(xún)小技巧10-17
學(xué)習Oracle數據庫技巧攻略08-16
Oracle重做日志文件管理技巧08-31
Oracle數據庫語(yǔ)句大全10-08
ORACLE數據庫碎片的整理08-18
oracle數據庫基本語(yǔ)句08-21
Oracle數據庫認證層次08-29
Oracle數據庫的基本介紹09-04
Oracle數據庫SQLPLUS介紹10-09