【发布时间】:2010-06-03 10:16:38
【问题描述】:
我们应用程序的数据库 (SQL Server 2005) 包含应用程序元数据的表。可以通过 GUI(不使用 SSMS)来更改这些元数据表(我的意思是插入/更新/删除)。
大多数情况下,开发人员会更改他们自己的数据库副本。问题是 - 如何将这些对元数据记录的更改“合并”成一个?问题是没有“更新”脚本,并且具有相同主键的行可能意味着不同的东西。一种可能的方法是使用 SQL 数据比较(来自 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、'第二种类型'
表格
1, '第一种形式', 1
2, '第二种形式', 3
表“类型”的表“表单”外键不同,但逻辑上它们是相同的(因为它们引用相同的类型名称)。
我们如何以更“智能”的方式比较这些数据库?没有红门(或任何其他第 3 方)工具是否有可能做到这一点?此外,当元数据不是通过“更新”脚本而是通过 GUI 进行更改时,如何对元数据进行版本控制?
【问题讨论】:
标签: sql-server version-control synchronization compare