Как реализовать централизованную репликацию модели подписчика? - PullRequest
2 голосов
/ 22 апреля 2011

У меня проблема, пожалуйста, помогите мне.

предположим, у меня есть три базы данных: Db1, Db2, DbCenter и tbl_country существуют во всех базах данных.

tbl_country в Db1 имеет следующие записи:

tbl_country

Id    Name
1       US
2       Germany

tbl_country в Db2 имеет следующие записи:

tbl_country

Id        Name
1       Australia
2       Italy

и объединенные записи tbl_country в Db1 и Db2 должны быть объединены в DbCenter,

, поэтому tbl_country в DbCenter имеет следующие записи:

tbl_country

Id    Name
 1      Us
 2      Germany
 3      Australia
 4       Italy

столбец "id" во всех таблицах - это первичный ключ и идентификатор.

Что мне нужно сделать, чтобы записи двух Db1 и Db2 были добавлены в последний из tbl_country DbCenter.

Я использую транзакционную репликацию. установите Db1 и Db2 в качестве издателей и укажите DbCenter в качестве подписчика, а в свойствах статьи Db2 установите для действия «Действие, если имя используется» значение «Сохранить существующий объект без изменений», но при этом удалите записи в DbCenter и замените их новыми, когда записи в столбце "id" совпадают. Db1 и Db2 - это версия Sql server 2000, а Db3 - это Sql server 2008R2.

Ответы [ 2 ]

1 голос
/ 23 апреля 2011

Сохранение исходных значений ключей в базе данных DbCenter, а также метаданных, указывающих, из какой базы данных они получены.Затем сгенерируйте суррогатный ключ, который будет использоваться в качестве PK.Таким образом, у вас обоих есть уникальные ссылки для каждой записи о стране и способ ссылки на источник информации.

Например: -

ID_SK SOURCE_ID SOURCE_DB NAME
1     1         Db1       US
2     2         Db1       Germany
3     1         Db2       Australia
4     2         Db2       Italy 
0 голосов
/ 23 апреля 2011

Если Db1 и Db2 имеют перекрывающиеся значения первичного ключа, я не думаю, что есть какой-либо способ сделать это.Если у вас есть контроль над схемой, и вы можете изменить ее, вы можете изменить первичные ключи на тип уникального идентификатора (вместо int), который гарантированно будет глобально уникальным.

...