2014-09-03 104 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