在設計資料庫時為了減少資料冗餘,一般都會按照三範式去設計,但有時我們在查詢時需要通過一欄位擷取跟這
個欄位相關聯的好幾個欄位,但是他們又分布在不同的表中,這時候如果按照正常途徑走的話需要同時查詢好幾張
表,不僅操作麻煩還容易出錯。當然我們有捷徑,把想要查詢的欄位都整合到一張虛擬表中,這就是視圖的應用。
簡單介紹
概念:視圖是從若干基本表或其他視圖構造出來的表,是一張虛擬表,其內容由查詢定義。同真實的表一樣,
視圖包含一系列帶有名稱的列和行資料。但是視圖並不在資料庫中以儲存的資料值集形式存在。行和列資料來自由定
義視圖的查詢所引用的表,並且在引用視圖時動態產生。
視圖的優點:
一,視圖著重於特定資料。
視圖可以讓使用者或者程式開發人員只看到他們所需要的資料,而不需要把表中的所有資訊與欄位暴露出來,這樣增強了資料的安全性。
二,簡化資料的操作,易維護。
我們可以將經常用到的多表聯集查詢出來的資料,或特定的結果集定義為視圖,這樣就起到了模組化資料的作用。我們在使用這些資料時直接查詢該視圖就可以,而不用到處寫長長的SQL語句,這樣也起到易維護的作用。
三,視圖可以限定查詢資料。
比如:對於不同的使用者,我們只提供部分資料給他。這樣,我們就可以在視圖中限定結果集,然後返回該視圖給他。這樣,無論使用者怎麼對視圖定義查詢條件,他也不能查詢出我們不想提供給他的資料。
小小試煉
在設計機房收費系統的資料庫時為了減少資料冗餘,把原先的學生表,分成了兩個表即卡表和學生表。卡表只存
放卡的資訊,學生表只存放學生的資訊。這樣是遵從了三範式的要求,但是在查詢資訊的時候卻不能像原來那樣
方便,需要同時查詢這兩個表。所以在此嘗試了視圖。
1. 建立視圖
2. 選擇涉及到的表或視圖
3. 選擇各個表中需要查詢的欄位
4. 命名儲存
5. 實際應用
和普通表一樣進行查詢即可。"select * from StuCardView_info whereCID=@CID"
雖然視圖可以給我們帶來種種便利,但不意味著我們就可以濫用它。因為視圖其實就是一段SQL語句,所以它的結果都是每次調用時動態產生的。如果不合理的定義視圖,必然帶來效能上的損耗。
下面是我們在建立視圖應該要注意的幾點:
1. 操作視圖會比直接操作基礎資料表要慢,所以我們盡量避免在大型表上建立視圖。
2. 盡量不要建立嵌套視圖,就是在視圖中使用視圖。這樣在查詢時,會多次重複訪問基礎資料表,帶來效能損耗。
3. 盡量在視圖只返回所需的資訊,盡量不要在視圖使用不需要訪問的表。
4. 在大型表或者複雜定義的視圖,可以使用預存程序代替。
5. 頻繁使用的視圖,可以使用索引檢視表來代替。
對視圖的理解還很淺顯,以上的執行個體也只是視圖的最基本應用。其它諸如索引檢視表、分割視圖、匯總視圖等還沒
具體應用過。對視圖的更新操作也沒嘗試,需要做的還有很多。