代码之家  ›  专栏  ›  技术社区  ›  Mosh

使用不同模式同步2数据库

  •  3
  • Mosh  · 技术社区  · 14 年前

    我们使用通用表设计了一个规范化的SQLServer2008数据库。因此,我们没有为每个实体(如产品、订单、订单项等)提供单独的表,而是使用通用表(实体、实例、关系、属性等)。

    我们决定建立一个单独的非规范化数据库,以便快速检索数据。如果这两个数据库有不同的模式,您能告诉我同步这两个数据库的各种技术吗?

    莫斯

    1 回复  |  直到 14 年前
        1
  •  5
  •   Panagiotis Kanavos    14 年前

    当两个数据库的模式完全不同时,您应该考虑数据迁移或复制技术,而不是同步技术。SQLServer为此提供了两种技术,SSIS和复制,或者您可以编写自己的脚本来实现这一点。

    复制将从源数据库获取新的或修改过的数据,并将其复制到目标数据库。它提供了调度、打包和分发更改的机制,可以处理实时更新和批更新。为了工作,它需要在两个数据库中添加足够的信息来跟踪修改和匹配行。在您的例子中,很难识别哪些“产品”已经更改,因为您必须在4个或更多不同的表中识别所有相关的修改行。这是可以做到的,但需要一些努力。在任何情况下,都必须创建与目标模式匹配的视图,因为复制不允许对源数据进行任何转换。

    最后,您可以创建自己的触发器或存储过程,这些触发器或存储过程将在数据更改时运行,并将数据从一个数据库复制到另一个数据库。

    我还应该指出,您可能过度规范化了数据库。在这三种情况下,当您连接所有表以重新构建实体时,都会有一些性能损失,这会导致大量必需的锁定,并且索引的使用效率低下。为了便于更改,您正在牺牲性能和可伸缩性。