亂談SQL Server數據庫視圖
數據庫里存儲著大量的數據,但是為了保證數據的安全也為了方便,并不是所有用戶的都可瀏覽所有數據。為此SQL Server里用權限、角色、視圖來解決這一系列問題。本篇博客我先介紹視圖。
概念:視圖是從一個或多個關聯表中派生出的一個虛擬表,換句話說就是以一個或多個表中的部分數據組成的虛擬“表”。
特點:
一、分割數據,簡化視點:即通過SELECT和WHERE語句來選擇你關心的數據,而去除無關的數據。
二、簡化操作:視圖可以避免對表的訪問和存取操作,同時視圖是一個很好的查詢窗口。
三、保護數據:針對用戶創建視圖,自動屏蔽權限外的數據。
四、為數據重構提供一定的邏輯獨立性:在關系型數據庫中數據重構是不可避免的,最常見的是垂直分割為兩個表,那么由于表中的數據類型和值并沒有改變,所以只要稍微改動視圖的定義既可以滿足變更之后的表
五、自動更新:在數據庫結構不變的情況下,如果基表中的數據改變,會被自動的反應到視圖中
疑問:對于視圖是一個對象,又是“虛擬表”,還具有自動更新的特點,引發了我對視圖存儲的思考:視圖是對象說明視圖創建后即被實例化,那么它應該是實際存在于數據庫中的,它也確實存在。但是它是虛擬表又怎么解釋呢?首先,它只能是以結果集的方式存儲,每次打開就打開結果集,但是這樣的話如何自動更新;或者是以T-SQL 語句才方式存儲,每次打開便執行一次語句,這樣就可以解釋自動更新了,但問題是視圖可能很大每次執行浪費資源。所以這兩種存儲方式并不科學。
我查了一些資料,也咨詢了學長、學姐,結果是沒有結果。但經過討論我認為,視圖應該是以結果集的形式來存儲的,同時存在著一種類似于觸發器的機制來時時更新視圖里的內容。這樣的話視圖的性質和特點就都可以解釋了。當然這只是我的推斷,不是事實,寫出來只是想尋找答案。
posted on 2012-08-07 11:13 順其自然EVO 閱讀(277) 評論(0) 編輯 收藏 所屬分類: 數據庫