視圖
出自 MBA智库百科(https://wiki.mbalib.com/)
目錄 |
視圖是一個虛擬表,其內容由查詢定義。同真實的表一樣,視圖的作用類似於篩選。定義視圖的篩選可以來自當前或其它資料庫的一個或多個表,或者其它視圖。分散式查詢也可用於定義使用多個異類源數據的視圖。
從用戶角度來看,一個視圖是從一個特定的角度來查看資料庫中的數據。從資料庫系統內部來看,一個視圖是由SELECT語句組成的查詢定義的虛擬表。從資料庫系統內部來看,視圖是由一張或多張表中的數據組成的,從資料庫系統外部來看,視圖就如同一張表一樣,對錶能夠進行的一般操作都可以應用於視圖,例如查詢,插入,修改,刪除操作等。
視圖是存儲在資料庫中的查詢的SQL 語句,它主要出於兩種原因:安全原因, 視圖可以隱藏一些數據,如:社會保險基金表,可以用視圖只顯示姓名,地址,而不顯示社會保險號和工資數等,另一原因是可使複雜的查詢易於理解和使用。
視圖:查看圖形或文檔的方式。
視圖一經定義便存儲在資料庫中,與其相對應的數據並沒有像表那樣又在資料庫中再存儲一份,通過視圖看到的數據只是存放在基本表中的數據。對視圖的操作與對錶的操作一樣,可以對其進行查詢、修改(有一定的限制)、刪除。
當對通過視圖看到的數據進行修改時,相應的基本表的數據也要發生變化,同時,若基本表的數據發生變化,則這種變化也可以自動地反映到視圖中。
- 簡單性。看到的就是需要的。視圖不僅可以簡化用戶對數據的理解,也可以簡化他們的操作。那些被經常使用的查詢可以被定義為視圖,從而使得用戶不必為以後的操作每次指定全部的條件。
- 安全性。通過視圖用戶只能查詢和修改他們所能見到的數據。但不能授權到資料庫特定行和特定的列上。通過視圖,用戶可以被限制在數據的不同子集上:使用權限可被限制在另一視圖的一個子集上,或是一些視圖和基表合併後的子集上。
視圖有很多優點,主要表現在:
1.視點集中
視圖集中即是使用戶只關心它感興趣的某些特定數據和他們所負責的特定任務。這樣通過只允許用戶看到視圖中所定義的數據而不是視圖引用表中的數據而提高了數據的安全性。
2.簡化操作
視圖大大簡化了用戶對數據的操作。因為在定義視圖時,若視圖本身就是一個複雜查詢的結果集,這樣在每一次執行相同的查詢時,不必重新寫這些複雜的查詢語句,只要一條簡單的查詢視圖語句即可。可見視圖向用戶隱藏了表與表之間的複雜的連接操作。
3.定製數據
視圖能夠實現讓不同的用戶以不同的方式看到不同或相同的數據集。因此,當有許多不同水平的用戶共用同一資料庫時,這顯得極為重要。
4.合併分割數據
在有些情況下,由於表中數據量太大,故在表的設計時常將表進行水平分割或垂直分割,但表的結構的變化卻對應用程式產生不良的影響。如果使用視圖就可以重新保持原有的結構關係,從而使外模式保持不變,原有的應用程式仍可以通過視圖來重載數據。
5.安全性
視圖可以作為一種安全機制。通過視圖用戶只能查看和修改他們所能看到的數據。其它資料庫或表既不可見也不可以訪問。如果某一用戶想要訪問視圖的結果集,必須授予其訪問許可權。視圖所引用表的訪問許可權與視圖許可權的設置互不影響。
視圖的安全性可以防止未授權用戶查看特定的行或列,是用戶只能看到表中特定行的方法如下:
- 在表中增加一個標誌用戶名的列;
- 建立視圖,是用戶只能看到標有自己用戶名的行;
- 把視圖授權給其他用戶。
視圖可以使應用程式和資料庫表在一定程度上獨立。如果沒有視圖,應用一定是建立在表上的。有了視圖之後,程式可以建立在視圖之上,從而程式與資料庫表被視圖分割開來。視圖可以在以下幾個方面使程式與數據獨立:
1 如果應用建立在資料庫表上,當資料庫表發生變化時,可以在表上建立視圖,通過視圖屏蔽表的變化,從而應用程式可以不動。
2 如果應用建立在資料庫表上,當應用發生變化時,可以在表上建立視圖,通過視圖屏蔽應用的變化,從而使資料庫表不動。
3 如果應用建立在視圖上,當資料庫表發生變化時,可以在表上修改視圖,通過視圖屏蔽表的變化,從而應用程式可以不動。
4 如果應用建立在視圖上,當應用發生變化時,可以在表上修改視圖,通過視圖屏蔽應用的變化,從而資料庫可以不動。
(創建視圖時註意事項的介紹)
(一)利用企業管理器創建與管理視圖
- 使用企業管理器創建視圖。
- 使用企業管理器的“嚮導”創建視圖。
- 使用企業管理器的修改視圖。
註意:在 “設計視圖”時完成的工作:添加表/刪除表添加引用欄位/刪除引用欄位調整欄位順序設置分組設置過濾條件設置引用欄位是否輸出設置視圖其他屬性4.使用企業管理器的刪除視圖:
(二)用T-SQL語句創建與管理視圖
(查看由企業管理器創建的視圖—“項目信息”其相應的T-SQL語句)(“視圖屬性”) 1. 使用CREATE VIEW創建視圖的語法:例子1:選擇‘員工表’和‘項目表’中的部分欄位和記錄創建視圖,並且限製表‘員工表’ 中的記錄只能是部門為“項目部”的記錄集合,視圖定義為view_part。