檢視
什麼是視圖?
**視圖**是一個查詢及其結果,其功能類似於資料庫中的虛擬表格。資料庫會依需求計算視圖,表示它們不是預先計算或具體化的,因此不會佔用資料庫中的任何儲存空間。您可以將視圖視為虛擬或邏輯表格。
資料庫視圖可讓您組合來自多個表格的資訊,並以最適合需要查詢資訊的人員的方式格式化該資訊。您(或資料庫管理員)可以建立一個視圖,以隱藏雜亂表格中不必要的欄位,或聯結表格以整合相關資料。透過將視圖作為起點,人們每次都不需要執行相同的複雜查詢,就能直接找到關於資料的實際問題。
查詢視圖的缺點是,這些查詢可能需要很長時間才能執行,特別是當該視圖是多個表格或多個聯結的結果時。
資料庫管理員也會將視圖用於安全目的,例如建立視圖來隱藏基礎表格中存在的某些欄位。這樣,其他使用者仍然可以存取和查詢他們需要的資料,而不會獲得存取敏感欄位或列的權限。
視圖 vs. 具體化視圖
如果視圖是虛擬表格(依需求計算),那麼**具體化視圖**就像資料庫中的一般表格。雖然視圖每次被參考時都需要重新執行查詢,但具體化視圖是預先計算並儲存在資料庫中的視圖。因此,具體化視圖會佔用資料庫中的空間,但由於資料庫每次不必計算具體化視圖,因此在查詢時的效能比標準資料庫視圖快得多(就像查詢一般表格一樣)。
何時應該(以及不應該)使用資料庫視圖
在以下情況下,在資料庫中建立視圖是個好主意:
-
您需要定期存取複雜查詢的結果,並且不想每次都輸入該查詢。
-
您希望透過限制對敏感資訊的存取來加強資料庫安全性。
-
您想要建立自訂欄位,而無需變更資料庫的底層結構。
-
您希望透過隱藏不太可能被查詢的欄位來簡化表格的外觀。
但是,如果資料庫的底層結構可能會變更,您可能不希望依賴視圖;一旦欄位名稱變更,您建立為視圖的查詢可能會中斷。
您的 BI 工具可能也具有功能類似於視圖的功能,無論它是模型、已儲存的問題還是SQL 片段。這裡的重要區別在於,這些都是 BI 工具世界中存在的功能,而視圖(無論是否具體化)都內建於您的資料庫本身中。
視圖範例
假設我們想使用 Metabase 的範例資料庫,根據 People
表格建立一個視圖,供我們在賓夕法尼亞州的團隊使用,以存取我們位於賓夕法尼亞州的客戶的姓名、地址、生日和電子郵件等資訊,但不包括使用者密碼。
我們將在資料庫中執行以下顯示的查詢來建立該視圖,該查詢會建立視圖,將其命名為 pennsylvania_customers
,僅包含我們從 People
表格中需要的欄位,並且僅顯示 State
欄位中的值為賓夕法尼亞州(PA)縮寫的記錄。
CREATE VIEW pennsylvania_customers
AS
SELECT
id
address
email
name
city
state
birth_date
zip
created_at
FROM
people
WHERE state = 'PA'
然後,對於未來的查詢,我們在賓夕法尼亞州的團隊可以透過查詢 pennsylvania_customers
作為起點來存取他們需要的關於其客戶群的資訊。
雖然視圖是任何基於 SQL 的資料庫或資料倉儲的基本功能,但建立、具體化和維護它們的細節可能會因您使用的資料庫軟體或資料倉儲而異。