2014-09-03 103 views
0

我有一些具有相同結構的多個數據庫的舊項目。有支持的每種語言的數據庫,所以我有4個相同結構的數據庫。我認爲這是效率不高,很難支持和做出對數據庫的更新,所以我想創建這將有新表Languagesid列和code併爲每個表的外鍵添加到該表中的一個數據庫。它應該可以正常工作,但我也希望按照語言對每個表進行分區以分離文件組。SQL Server表分區

因此,例如我有舊錶Customers結構(id, name, surname, data),所以在新的數據庫中它將有(id, name, surname, data, langId)

所以我希望能有像基於LANGID customer_eng, customer_de, customer_it文件組。

可以嗎?我已經找到了分區函數和方案,但只有定義一些範圍值的可能性,但我不需要範圍,我想根據langI將數據分組以分開文件,這就是我想要做的。如果可能,我想使其變爲動態,所以當添加新的langId(添加新語言)時,它會自動爲該語言創建新文件。

+0

考慮讓這這裏HTTP:/ /dba.stackexchange.com/ – Bulat 2014-09-03 11:00:07

+0

儘管SQL Server技術上只提供範圍分區,但您可以通過將所需列表指定爲範圍來完成所需的結果。您還可以添加一個檢查約束來匹配列表,以確保只插入精確值,但由於Languages表的外鍵,這種情況不需要。 – 2014-09-03 11:49:57

回答

2

可以使用範圍,通過做這樣的事情定義單獨的分區:

CREATE PARTITION FUNCTION MyPartitionFunction (varchar(255)) 
AS RANGE LEFT FOR VALUES ('de', 'eng', 'it'); 

不過,我會建議使用實際的ID,而不是:

CREATE PARTITION FUNCTION MyPartitionFunction (int) 
AS RANGE LEFT FOR VALUES (1, 2, 3, 4, 5, 6); 
+0

但有沒有可能使其動態?我知道可能有一些解決方法,比如將插入觸發器添加到語言表中,然後將所有分區函數更改爲新值,但它是唯一的解決方案嗎? – anderhil 2014-09-03 11:54:56

+0

搜索「sql server dynamic partitioning」。這裏有兩個結果:http://stackoverflow.com/questions/18842764/how-to-dynamically-declare-partition-range-in-partition-function-in-sql-server和http://stackoverflow.com/questions/18842764 /如何對動態聲明分區範圍-在分區函數式-SQL服務器。 – 2014-09-03 11:58:53

+0

對於那些不知道:分區僅受企業版sql server支持(真是無賴) – anderhil 2014-09-03 18:11:51