保存和管理多个数据库“状态”?

Sco*_*ott 2 database-design sql-server

如果这是问这个问题的错误地方,我很抱歉。

我的任务是实现一个系统,允许管理员对数据库中的数据进行更改,并将这些更改保存到“状态”或“计划”中。状态需要是可比较的,最终状态被选择成为“主要状态”并用于所有未来的查询。

通常这种情况我会复制数据库并在那里进行更改,但是我所委托的数据库非常大,无法快速复制。我正在使用 MS SQL Server,并与 .NET 中的实体框架接口。

这些工具中的任何一个是否为这个问题提供了包容性的解决方案?这怎么能现实地做到呢?一位同事建议进行版本控制,这听起来很有希望,但我想知道是否有更好的方法。

小智 8

SQL Server 提供了多种维护表状态的方法+您可以自己设计:

  1. 更改数据捕获:CDC 用于捕获对表的插入、更新或删除操作。但请记住,它不支持计算列。
  2. 更改跟踪:这也像 CDC 一样捕获 DML 语句,但不保存历史数据。
  3. SCD 类型 2:通过使用时间戳创建您自己的历史数据更改表并将最新记录标记为活动。
  4. Microsoft Sync Framework:如果您想复制数据库,可以使用它。当我必须在离线 SQL Server 与在线之间进行同步时,我使用了它。但是,这可能会在实施过程中花费大量精力,而且它也不会为您提供您正在寻找的所有功能。

对于未来版本(即 SQL Server 2016 及更高版本)

  1. 临时表:我在 SQL Server 2016 CTP 2 上的实验中确实使用了它,并发现它很有前途。在某种程度上,您可以将它们视为 SCD 类型 2。

如果我必须在你的地方选择,我会选择 CDC。