視圖最終是定義在基本表之上的,對視圖的一切操作最終也要轉換為對基本表的操作。而且對于非行列子集視圖進行查詢或更新時還有可能出現問題。既然如此,為什么還要定義視圖呢?這是因為合理使用視圖能夠帶來許多好處:
1.視圖能夠簡化用戶的操作
視圖機制使用戶可以將注意力集中在所關心的數據上。如果這些數據不是直接來自基本表,則可以通過定義視圖,使數據庫看起來結構簡單、清晰,并且可以簡化用戶的數據查詢操作。例如,那些定義了若干張表連接的視圖,就將表與表之間的連接操作對用戶隱蔽起來了。換句話說,用戶所做的只是對—個虛表的簡單查詢,而這個虛表是怎樣得來的,用戶無需了解。
2.視圖使用戶能以多種角度看待同一數據
視圖機制能使不同的用戶以不同的方式看待同一個數據,當有許多不同種類的用戶共享同一個數據庫時,這種靈活性是非常重要的。
3.視圖提供了一定程度的邏輯獨立性
第一章中已經介紹過數據的物理獨獨立性性與邏輯獨立性的概念。數據的物理獨立性是指用戶的應用程序不依賴于數據庫的物理結構。數據的邏輯獨立性是指當數據庫重構造時,如增加新的關系或對原有關系增加新的字段等,用戶的應用程序不會受影響。層次數據庫和網狀數據庫一般能較好地支持數據的物理獨立性,而對于邏輯獨立性則不能完全地支持。
在關系數據庫中,數據庫的重構往往是不可避免的。重構數據庫最常見的是將一個基本表“垂直”地分成多個基本表。例如:將學生關系
Student(Sno, Sname, Ssex, Sage, Sdept)
分為SX(Sno, Sname, Sage)和SY(Sno, Ssex, Sdept)兩個關系。這時原表Student為SX表和SY表自然連接的結果。如果建立一個視圖Student:
CREATE VIEW Student(Sno, Sname, Ssex, Sage, Sdept)
AS
SELECT SX.Sno, SX.Sname, SY.Ssex, SX.Sage, SY.Sdept
FROM SX JOIN SY ON SX.Sno = SY.Sno
這樣盡管數據庫的邏輯結構改變了(變為SX和SY兩個表了),但應用程序不必修改,因為新建立的視圖定義為用戶原來的關系,使用戶的外模式保持不變,用戶的應用程序通過視圖仍然能夠查找數據。
當然,視圖只能在一定程度上提供數據的邏輯獨立性,比如由于對視圖的更新是有條件的,因此應用程序中修改數據的語句可能仍會因基本表結構的改變而改變。
4.視圖提高了數據的安全性
有了視圖機制,就可以在設計數據庫應用系統時,對不同的用戶定義不同的視圖,使機密數據不出現在不應看到這些數據的用戶視圖上。這樣視圖機制就自動提供了對機密數據的安全保護功能。例如Student表涉及全校15個院系的學生數據,可以在其上定義15個視圖,每個視圖只包含一個院系的學生數據,并只允許每個院系的主任查詢和修改自己院系的學生視圖。
新聞熱點
疑難解答