2014-09-03 6 views
0

У меня есть старый проект, который имеет несколько баз данных с одинаковой структурой. Существует база данных для каждого поддерживаемого языка, поэтому у меня есть 4 базы данных с одинаковой структурой. Я думаю, что это неэффективно, и сложно поддерживать и обновлять базы данных, поэтому я хочу создать одну базу данных, которая будет иметь новую таблицу Languages с столбцами id и code и для каждой таблицы добавить внешний ключ в эту таблицу. Он должен работать хорошо, но я также хотел бы разбить каждую таблицу на отдельную файловую группу на основе языка.Разбиение таблицы SQL Server

Так, например, у меня есть старая таблица Customers со структурой (id, name, surname, data), поэтому в новой базе данных будет (id, name, surname, data, langId).

Так что я хочу иметь что-то вроде customer_eng, customer_de, customer_it файловых групп на основе langId.

Это можно сделать? Я нашел функцию и схему секционирования, но есть только возможность определить некоторые значения диапазона, но мне не нужны диапазоны, я хочу группировать данные для разделения файлов на основе langId, вот и все, что я хочу делать. Если это возможно, я бы хотел сделать его динамичным, поэтому, когда будет добавлен новый langId (добавлен новый язык), он автоматически создаст новый файл для этого языка.

+0

рассмотреть вопрос об обращении это здесь HTTP://dba.stackexchange.com/ – Bulat

+0

Хотя SQL Server технически предоставляет только разбиение на разделы, вы можете достичь желаемого результата, указав нужный список как диапазон. Вы также можете добавить контрольное ограничение для соответствия списку, чтобы вставить только точные значения, хотя в этом случае это не нужно из-за внешнего ключа в таблицу «Языки». –

ответ

2

Вы можете определить отдельные разделы, используя диапазоны, делая что-то вроде этого:

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

Однако, я предложил бы использовать фактические идентификаторы вместо:

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

, но есть ли возможность сделать его динамичным? Я знаю, что возможно иметь некоторое обходное решение, например, добавить триггер insert в таблицу Languages, а затем изменить все функции секционирования на новые значения, но является ли это единственным решением? – anderhil

+0

Поиск «динамического разбиения сервера SQL». Вот два результата: http://stackoverflow.com/questions/18842764/how-to-dynamically-declare-partition-range-in-partition-function-in-sql-server и http://stackoverflow.com/questions/18842764/как к динамически объявить раздел-спектр-в-разбиения-функции-в-SQL-сервера. –

+0

Для тех, кто не знает: разбиение на разделы поддерживается только корпоративной версией sql-сервера (что за обман) – anderhil

Смежные вопросы