1. 程式人生 > >為代碼減負之<三>視圖(SQL)

為代碼減負之<三>視圖(SQL)

技術分享 sdn 引用 實例 內容 inf 定義 嵌套 相關

在設計數據庫時為了降低數據冗余。一般都會依照三範式去設計,但有時我們在查詢時須要通過一字段獲取跟這

個字段相關聯的好幾個字段。可是他們又分布在不同的表中,這時候假設依照正常途徑走的話須要同一時候查詢好幾張

表,不僅操作麻煩還easy出錯。當然我們有捷徑。把想要查詢的字段都整合到一張虛擬表中,這就是視圖的應用。

簡介

概念:視圖是從若幹基本表或其它視圖構造出來的表,是一張虛擬的表。其內容由查詢定義。

同真實的表一樣。

視圖包括一系列帶有名稱的列和行數據。

可是視圖並不在數據庫中以存儲的數據值集形式存在。

行和列數據來自由定

義視圖的查詢所引用的表,而且在引用視圖時動態生成。

視圖的長處:

一,視圖著重於特定數據。

視圖能夠讓用戶或者程序開發者僅僅看到他們所須要的數據,而不須要把表中的全部信息與字段暴露出來,這樣增強了數據的安全性。

二。簡化數據的操作,易維護。

我們能夠將經經常使用到的多表聯合查詢出來的數據,或特定的結果集定義為視圖,這樣就起到了模塊化數據的作用。

我們在使用這些數據時直接查詢該視圖就能夠。而不用到處寫長長的SQL語句,這樣也起到易維護的作用。

三,視圖能夠限定查詢數據。

比方:對於不同的用戶,我們僅僅提供部分數據給他。這樣,我們就能夠在視圖中限定結果集。然後返回該視圖給他。這樣。不管用戶怎麽對視圖定義查詢條件。他也不能查詢出我們不想提供給他的數據。

小小試煉

在設計機房收費系統的數據庫時為了降低數據冗余。把原先的學生表,分成了兩個表即卡表和學生表。卡表僅僅存

放卡的信息,學生表僅僅存放學生的信息。這樣是遵從了三範式的要求。可是在查詢信息的時候卻不能像原來那樣

方便,須要同一時候查詢這兩個表。所以在此嘗試了視圖。

1. 新建視圖

技術分享

2. 選擇涉及到的表或視圖

技術分享

3. 選擇各個表中須要查詢的字段

技術分享

4. 命名保存

技術分享

5. 實際應用

和普通表一樣進行查詢就可以。"select * from StuCardView_info where [email protected]

"

盡管視圖能夠給我們帶來種種便利。但不意味著我們就能夠濫用它。

由於視圖事實上就是一段SQL語句。所以它的結果都是每次調用時動態生成的。假設不合理的定義視圖,必定帶來性能上的損耗。

以下是我們在創建視圖應該要註意的幾點:

1. 操作視圖會比直接操作基礎表要慢。所以我們盡量避免在大型表上創建視圖。

2. 盡量不要創建嵌套視圖,就是在視圖中使用視圖。這樣在查詢時。會多次反復訪問基礎表,帶來性能損耗。

3. 盡量在視圖僅僅返回所需的信息,盡量不要在視圖使用不須要訪問的表。

4. 在大型表或者復雜定義的視圖,能夠使用存儲過程取代。

5. 頻繁使用的視圖,能夠使用索引視圖來取代。

對視圖的理解還非常淺顯。以上的實例也僅僅是視圖的最基本應用。其他諸如索引視圖、切割視圖、匯總視圖等還沒

詳細應用過。

對視圖的更新操作也沒嘗試,須要做的還有非常多。

為代碼減負之<三>視圖(SQL)