【问题标题】:RedGate SQL Source Control DataRedGate SQL 源代码控制数据
【发布时间】:2017-06-02 22:38:14
【问题描述】:

我正在研究 RedGate SQL Toolbelt 以支持完整的数据库 CI,并且对这些工具如何满足我对架构和静态数据的需求感到满意。

但是,我希望在我的 CI 中进行源代码控制和使用的其他表中会有一定数量的数据。这些表可能有一百万条记录,只有少数记录需要在源代码控制中。数据库设计意味着这些数据不能放在可以进行源代码控制的单独表中。

一个很好的例子可能是一个用户表,您希望在其中对管理员或系统用户进行源代码控制,以便它可以成为您的 CI 的一部分,但希望排除任何真实用户。

RedGate 自 2011 年年中以来就有一个 request for filtered static data,我想知道是否有人设计了一种明智的方法来解决这个限制?

【问题讨论】:

    标签: sql-server continuous-integration redgate


    【解决方案1】:

    我能想到的就是:

    1. 有两张桌子
    2. 一个供临时用户使用
    3. 您希望拥有静态数据的超级用户
    4. 仅将超级用户表数据提交到源代码管理
    5. 创建一个可以UNION ALL 这两个表的视图
    6. 在您的代码中使用此视图而不是实际的表。

    也许这不是最漂亮的方法,但我认为它应该适用于您的用例。

    【讨论】:

    • 感谢您的反馈。由于几个原因,这对于我的现实生活场景来说是不可行的。最严重的问题是,如果您想在表中使用 UserID 外键,则只能将其链接到两个表之一。我们真的不能使用多个表:(。
    • @DanDef 我想知道是否可以准备一个迁移脚本,该脚本将在每个 CI 构建时触发并忽略静态数据。
    • 是的,今天下午我打算看看尝试使用这些。将查看并报告...
    【解决方案2】:

    我尝试了涉及迁移脚本的解决方案,但它们的执行顺序仍然导致问题。

    我最终选择的解决方案是拥有一个链接到源代码控制的单独数据库,所有包含系统数据或混合数据的表都可以对其记录进行源代码控制。

    然后我在另一个数据库中进行开发,并将架构和数据更改推送到源控制数据库以提交它们。这样,源代码控制的数据表就不会包含“用户”数据。

    我发现 DLM 自动化 Cmdlet 缺少功能,因此选择使用命令行运行 SQL 比较和 SQL 数据比较来执行我们的 CI。这并非没有偶尔出现的问题,但使用上述工具并手动从 SC 推送到我们的 CI 数据库中解决了这些问题。

    【讨论】:

      猜你喜欢
      • 2016-12-26
      • 2017-07-12
      • 2015-10-22
      • 2012-10-03
      • 2013-05-02
      • 2019-07-10
      • 2014-11-29
      • 2017-08-06
      • 1970-01-01
      相关资源
      最近更新 更多