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