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

來源:互聯網
上載者:User

    在設計資料庫時為了減少資料冗餘,一般都會按照三範式去設計,但有時我們在查詢時需要通過一欄位擷取跟這

 個欄位相關聯的好幾個欄位,但是他們又分布在不同的表中,這時候如果按照正常途徑走的話需要同時查詢好幾張

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

 

簡單介紹

 

    概念:視圖是從若干基本表或其他視圖構造出來的表,是一張虛擬表,其內容由查詢定義。同真實的表一樣,

視圖包含一系列帶有名稱的列和行資料。但是視圖並不在資料庫中以儲存的資料值集形式存在。行和列資料來自由定

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

 視圖的優點:

  一,視圖著重於特定資料。

      視圖可以讓使用者或者程式開發人員只看到他們所需要的資料,而不需要把表中的所有資訊與欄位暴露出來,這樣增強了資料的安全性。

  二,簡化資料的操作,易維護。

      我們可以將經常用到的多表聯集查詢出來的資料,或特定的結果集定義為視圖,這樣就起到了模組化資料的作用。我們在使用這些資料時直接查詢該視圖就可以,而不用到處寫長長的SQL語句,這樣也起到易維護的作用。

  三,視圖可以限定查詢資料。

      比如:對於不同的使用者,我們只提供部分資料給他。這樣,我們就可以在視圖中限定結果集,然後返回該視圖給他。這樣,無論使用者怎麼對視圖定義查詢條件,他也不能查詢出我們不想提供給他的資料。

 

小小試煉

在設計機房收費系統的資料庫時為了減少資料冗餘,把原先的學生表,分成了兩個表即卡表和學生表。卡表只存

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

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

1. 建立視圖

               

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

               

3. 選擇各個表中需要查詢的欄位

              

4. 命名儲存

5. 實際應用

   和普通表一樣進行查詢即可。"select * from StuCardView_info whereCID=@CID"

 

    雖然視圖可以給我們帶來種種便利,但不意味著我們就可以濫用它。因為視圖其實就是一段SQL語句,所以它的結果都是每次調用時動態產生的。如果不合理的定義視圖,必然帶來效能上的損耗。

下面是我們在建立視圖應該要注意的幾點:

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

    2. 盡量不要建立嵌套視圖,就是在視圖中使用視圖。這樣在查詢時,會多次重複訪問基礎資料表,帶來效能損耗。

    3. 盡量在視圖只返回所需的資訊,盡量不要在視圖使用不需要訪問的表。

    4. 在大型表或者複雜定義的視圖,可以使用預存程序代替。

    5. 頻繁使用的視圖,可以使用索引檢視表來代替。

 

對視圖的理解還很淺顯,以上的執行個體也只是視圖的最基本應用。其它諸如索引檢視表、分割視圖、匯總視圖等還沒

具體應用過。對視圖的更新操作也沒嘗試,需要做的還有很多。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.