Пакетное обновление в SQL Server 2008 - PullRequest
2 голосов
/ 28 сентября 2010

У меня есть приложение, запущенное на предприятии, имеющем головной офис и филиалы.Каждый филиал имеет отдельный локальный сервер и БД.Главный сервер и БД обновляются ежедневно путем пакетного обновления.Как я могу преодолеть конфликт ID в такой ситуации.

Например: у меня есть запись с идентификатором 10 в филиале A Также транзакция со ссылочным идентификатором 10 (внешний ключ), но при сохранении этого в master db уникальныйИдентификатор может быть изменен, и, следовательно, транзакция не соответствует ....

Просьба помочь мне решить эту проблему ...

Заранее спасибо всем ....

Ответы [ 3 ]

2 голосов
/ 28 сентября 2010

Я бы на время забыл о технических аспектах и ​​прояснил логику бизнеса / приложения.Из вашего поста совсем не ясно, где могут возникнуть конфликты: в записи клиента, в транзакции, во всех данных?Почему возникают конфликты?Как разрешаются конфликты?Когда вы точно поймете, что происходит с данными и что ожидает бизнес, вы можете обратиться к техническим решениям.

Предложения, такие как GUID, диапазоны номеров и таблицы сопоставления, очень полезны, но это не так.Совершенно ясно, какую проблему вы пытаетесь решить и каково бизнес-решение.Собрать все данные физически в одном месте очень просто (для начала вам подойдет SSIS), реальный вопрос в том, какие правила вы соблюдаете для объединения данных?

1 голос
/ 28 сентября 2010
The master server and DB is updated daily by batch updation

Не зная деталей того, как именно вы выполняете пакетное обновление или насколько велика ваша база данных, и сколько у вас таблиц, которые сталкиваются с такой проблемой, один общий способ, который возможен, - это поддержкатаблицы сопоставления

В вашей логике пакетного обновления

  • для новых записей вы сначала вставите записи в основную таблицу, а затем с помощью сгенерированных их новых идентификаторов.от мастера, вставьте запись в таблицу сопоставления с такими подробностями, как, например: branch, branchID, MasterID, который хранит отношение между 2 ID

  • для существующих записей, вы присоединитесь к таблице сопоставленияи обновлять записи, используя их masterID из таблицы сопоставления

Обычно в SQL Server, если пакетное обновление является заданием, вы можете использовать SSIS и иметь такую ​​логику в вашей SSISпакет.

Кроме того, это зависит от вашего дизайна, но обычно есть

Исходная БД -> Промежуточная БД ->DB назначения 10 *

в вашем случае, который сопоставляется с

DB DB -> промежуточная база данных -> Master DB

для таких ETLвид задач.В таких случаях таблицы сопоставления, вероятно, должны находиться в промежуточной базе данных, но если у вас нет такой схемы (, которую вы действительно должны ), эти таблицы сопоставления могут находиться в папке назначения, то есть в основной базе данных

1 голос
/ 28 сентября 2010

Чтобы преодолеть это, вы можете использовать uniqueidentifier в качестве типа данных для ветви ID.

Таким образом, каждая база данных может создать идентификатор с NEWID(), не беспокоясь о том, что основная база данных сменит ключ, потому что он универсален.

Если вы не хотите изменять тип данных, у вас могут быть диапазоны номеров для каждой ветви. В зависимости от количества записей, которые создаются в каждой ветке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...