4

我們正在使用Visual Studio,SQL Server 2008 R2構建ASP.NET MVC3 Web應用程序& EF Code First 4.1。很多時候我們有更小的,我們稱之爲「查找」表。例如,「狀態」表包含「Id」和「Name」。隨着應用程序的不斷增長,這些表格變得非常頻繁,我想知道將這些不太重要的表格從應用程序關鍵點「分組」的最佳方法。將查詢/參考表移動到新模式

它一直建議我加入了「LkStatus」的前綴來幫助我,但怎麼樣將所有的查找表出來DBO,進入有自己的模式?

任何人都可以看到這種方法的任何缺點?

謝謝保羅

回答

4

這種方法沒有缺點。我是個人圖式的粉絲。我會用Lookup雖然

要改變你的表架構,你有兩種方式:

ALTER SCHEMA Lookup TRANSFER dbo.SomeTable 

ALTER AUTHORIZATION ON dbo.SomeTable TO Lookup 
+0

+1,ALTER SCHEMA ... TRANSFER對我來說是新的。很酷,謝謝! –

1

這將是向下的偏好。無論哪種方式,確實沒有「陷阱」。我更喜歡桌面前綴,但不會受到任何困擾。我們使用LU_ *。只要任一選項被強制執行,維護下線將變得容易。

0

由於表格很小,將它們組合成一張表格呢?不要使用表名作爲僞密鑰,而要使用真正的密鑰。例如,您可以有一個名爲Lookup的表格,其中包含一個Id,Type,Name和Value,其中Type ='Status'表示您的狀態值。將聚簇索引設置爲(Type,Name)將會將相同類型的所有行物理分組在一起,這樣可以使它們快速地將它們全部作爲一組讀取(如果需要)。

如果你的名稱可以有不同的數據類型,每種類型需要添加一個額外的列:一個整數,一個字符串,一個用於花車等,您可以使用XML列做同樣的事情; T-SQL只需要更多的努力。

+1

爲什麼這是一個壞主意的例子:你如何確保你沒有Status ='Pink',因爲你現在的顏色混合了狀態。這被稱爲「一個真正的查找表」反模式。 http://stackoverflow.com/a/5374136/27535 – gbn

+0

感謝您輸入RickNZ,我認爲這是一個偉大的想法,直到我閱讀gbn的鏈接,也是這樣的:http://www.projectdmx.com/dbdesign/lookup .aspx –

+0

這取決於你如何使用表格。如果他們只是爲了「查找」,並沒有被引用爲FK,那麼我建議的方法比將它們用作FK更合適。對於查找,您的代碼必須選擇一個表名或Type-like列的值;這是真的一樣的事情。如果您有一個單獨的狀態值表,那麼仍然沒有什麼可以阻止您將其中的一個設置爲「粉紅色」。 – RickNZ