2010-06-03 3 views
0

В базе данных нашего приложения (SQL Server 2005) есть таблицы для метаданных приложения. Изменения в этих таблицах метаданных (я имею в виду insert/update/delete) можно выполнить с помощью GUI (не используя SSMS).Управление версиями метаданных базы данных и синхронизация

В большинстве случаев разработчики меняют собственную копию базы данных. Вопрос в том, как «объединить» эти изменения в записи метаданных в один? Проблема в том, что нет сценариев «обновления», и строки с одним и тем же первичным ключом могут означать разные вещи. Один из возможных способов - использовать такой инструмент, как SQL Data Compare (от RedGate), чтобы увидеть, какие строки изменились и сравнить их с помощью уникального ключа. Проблема может быть лучше понято с помощью, например:

CREATE TABLE [dbo].[Type](
    [ID] [int] IDENTITY(1,1) NOT NULL, 
    [Type] [nvarchar](50) NOT NULL, 
    CONSTRAINT [PK_Type] PRIMARY KEY CLUSTERED ([ID] ASC) 
    ) ON [PRIMARY] 

CREATE UNIQUE NONCLUSTERED INDEX [Type] ON [dbo].[Type] ([Type] ASC) 

CREATE TABLE [dbo].[Form](
    [ID] [int] IDENTITY(1,1) NOT NULL, 
    [Name] [nvarchar](50) NOT NULL, 
    [TypeID] [int] NOT NULL, 
    CONSTRAINT [PK_Form] PRIMARY KEY CLUSTERED ([ID] ASC) 
) ON [PRIMARY] 

CREATE UNIQUE NONCLUSTERED INDEX [Name] ON [dbo].[Form] ([Name] ASC) 

ALTER TABLE [dbo].[Form] WITH CHECK ADD CONSTRAINT [FK_Form_Type] FOREIGN KEY([TypeID]) REFERENCES [dbo].[Type] ([ID]) 
ALTER TABLE [dbo].[Form] CHECK CONSTRAINT [FK_Form_Type] 

Первой БД содержит:
Типа
1, 'Первого типа'
2, 'Второго типа'
форма
1, 'Первая форма', 1
2, 'Вторая форма', 2

Вторая БД содержит:
Тип
1, 'Первый тип'
2, 'Третий тип'
3, 'второго типа'
Form
1, 'Первая форма', 1
2, «Второй form ', 3

Таблица «Внешний вид формы» для таблицы «Тип» различен, но логически они одинаковы (поскольку они ссылаются на одно и то же имя типа).

Как мы можем сравнить эти базы данных более «интеллектуальным» способом? Есть ли возможность сделать это без инструментов Red Gate (или любых других сторонних разработчиков)? Кроме того, как метаданные версии, когда они меняются не с помощью «обновлений», а с помощью графического интерфейса?

ответ

0

Вы столкнулись с одной из нескольких проблем с использованием бессмысленных первичных ключей. Если имя типа идентифицирует его, то это должно по крайней мере иметь на нем уникальный индекс. Затем вы можете использовать это для своего слияния, и его можно было бы автоматизировать вместо того, чтобы полагаться на вмешательство человека, чтобы определить, что 2 = 3.

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


Если у вас уже есть способ определить строки через базу данных, то вы должны быть в состоянии использовать эти идентификаторы с SQL Data Red Gate Сравнивать (я считаю, что он может использовать уникальные индексы вместо ПК в качестве опции).

В качестве альтернативы вы можете использовать SSIS, чтобы указать на две базы данных и привести их в синхронизацию. Это позволит обрабатывать более сложные случаи, когда вы не просто создаете одну базу данных, как другую, но фактически объединяете различия. Вам все равно нужно обрабатывать разрешение конфликтов (проще сделать в SSIS, чем инструмент IMO Red Gate), но это зависит от ваших собственных бизнес-правил в отношении того, какая база данных является «мастером», какие элементы могут иметь всех детей из обеих баз данных просто добавляются друг к другу вместо замены элементов и т. д.

+0

У нас есть уникальные индексы, но нам нужны советы по часам, чтобы «объединить» изменения разумно. – Sazug

+0

Любой пример использования SSIS для синхронизации? – Sazug

+0

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

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