2010-03-10 43 views
1

當我創建一個視圖時,我可以將它基於來自不同表格的多個列。 當我想創建一個查找表時,我需要來自一個表的信息,例如訂單表的外鍵,以從另一個表中獲取客戶詳細信息。我可以創建一個具有參數的視圖,以確保它能夠獲取我需要的所有數據。我也可以 - 從我一直在讀的東西 - 做一個查詢表。這種情況有什麼區別,我應該什麼時候選擇查找表?我希望這不是一個壞問題,我還沒有進入數據庫的階段)。數據庫視圖和查找之間的區別

回答

2

我認爲您對「查找表」的使用有些偏差。按照正常的說法,查找表是代碼或參考數據表。它可能由一個代碼和一個描述或代碼擴展組成。這些表的目的是爲受限的列提供一個允許值,例如CUSTOMER_TYPE或PRIORITY_CODE。這類表格通常被稱爲「常設數據」,因爲它根本不會改變。在查找表中定義這些數據的價值在於它們可以在外鍵中使用並填充下拉列表和值列表。

你所描述的是一個稍微不同的情景:

我需要從一個表信息, 例如爲了 表的外鍵,從 得到客戶的詳細信息,另一臺

這兩個表都是應用程序數據表。客戶和訂單記錄是動態的。現在,從Customer表中檢索附加數據以顯示Order數據顯然是有效的,從這個意義上說,Customer是一個「查找表」。更具針對性的是Order的父級表,因爲它具有由Order上的外鍵引用的主鍵。

通過一切手段建立一個視圖來捕獲Order和Customer之間的連接邏輯。在構建在多個地方使用相同連接表的應用程序時,這些視圖可能非常有用。

2

創建視圖爲您提供數據的「實時」表示,就像在查詢時一樣。這是以服務器負載較高爲代價的,因爲它必須確定每個查詢的值。 這可能很昂貴,具體取決於表大小,數據庫實現和視圖定義的複雜性。

另一方面,查找表通常是「手動」填充的,即不是每個針對它的查詢都會導致昂貴的操作從多個表中獲取值。相反,如果基礎數據發生變化,程序必須處理更新查找表。

通常,查找表適合那些很少變化但經常讀取的東西。另一方面觀點 - 雖然執行成本更高)更爲現實。

+0

那麼在查找表中,您不會找到實時數據表示? 這張表是如何手動填充的?你的意思是說你每天都會運行一些存儲過程來更新你的查找表,使它保持最新狀態? – Younes 2010-03-10 14:20:21

+0

@Younes - 根據您的查看與查詢表的問題,是的,查找表不會包含「實時」數據(必然),您需要以某種方式維護表數據(按照定期計劃或作爲源信息變化)。無論如何,視圖是一個動態查找表。 – 2010-03-10 15:10:31

0

這裏有一個查找表的一個例子。我們有跟蹤陪審員的系統,其中一個表是JurorStatus。此表包含了所有陪審員的有效StatusCodes:

代碼:價值
WS:將服務
PP:推遲
EM:請問軍事
IF:不符合條件的罪犯

這是一個查找表有效的代碼。

視圖就像查詢。

0

只要學會編寫sql查詢以獲得您需要的東西。無需創建視圖!在許多情況下,視圖並不好用,尤其是當你開始將它們放在其他視圖上時,它們會導致性能下降。請勿將視圖用作查詢寫入的簡寫。

相關問題