【问题标题】:Database metadata versioning and synchronization数据库元数据版本控制和同步
【发布时间】: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


    【解决方案1】:

    您刚刚遇到了使用无意义主键的几个问题之一。如果类型的名称标识了它,那么它至少应该有一个唯一的索引。然后,您可以使用它来进行合并,它可以自动进行,而不是依靠人工干预来确定 2=3。

    即使您想使用代理键,您的表通常仍应具有某种与现实世界相关的标识列。


    如果您已经有一种方法来识别跨数据库的行,那么您应该能够将这些标识符与 Red Gate 的 SQL 数据比较一起使用(我相信它可以使用唯一索引而不是 PK 作为选项)。

    或者,您可以使用 SSIS 指向两个数据库并使它们同步。这将允许处理更复杂的情况,在这种情况下,您不仅要使一个数据库像另一个数据库一样,而且实际上是合并差异。您仍然需要处理冲突解决(在 SSIS 中比 Red Gate 工具 IMO 更容易),但这完全取决于您自己的业务规则,即哪个数据库是“主”,哪些项目可以拥有两个数据库中的所有子项简单地相互添加而不是替换项目等。

    【讨论】:

    • 我们有独特的索引,但我们仍然需要每小时的建议来智能地“合并”更改
    • 任何使用 SSIS 进行同步的例子?
    • 我认为在这里发布整个 SSIS 解决方案是不合理的。通过最少的搜索,您应该能够找到几个 SSIS 教程。如果您没有很多 SSIS 经验,那么开箱即用它对于简单地将对象从一个地方转移到另一个地方更有用——而不是合并两个不同的源。在这种情况下,您可能最好使用 3rd 方产品。
    猜你喜欢
    • 2010-09-16
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多