这需要定期完成:
- 将生产数据库中的数据插入测试/开发数据库,以便程序员有新数据进行测试。
- 出于任何原因将数据从一个数据库迁移到另一个数据库。
注意:数据库是关系型的。
问题是:
- 数据库采用“所有 PK 都是代理”策略建模。
- 将数据从一个数据库移动到另一个数据库涉及编程以避免 PK 值(由序列生成)的冲突。
- 为了在代理键之间实现“等价”,需要一个将源数据库表和目标数据库表的 PK 值配对的表。
- 必须在迁移之前通过匹配业务键(不是 PK,所以不管理 FK)来创建该表
- 与具有自然键的表相反,即使是单个表的数据迁移也不是微不足道的。
当所有表都有代理键时,将行从一个数据库复制到另一个数据库的最简单方法是什么?
我们不久前在工作中遇到了这个问题(或至少是类似的问题),我们的解决方案是将迁移过程分为几个步骤:
第二部分是棘手的部分,但在我们的例子中,我们能够为每个表遵循这个算法:
对每个暂存表重复此操作。处理完所有登台表后,将数据插入到目标表中。
这依赖的一个假设是所有数据都是新的并且独立于数据库中已有的数据。
如果您出于隐私原因不需要伪装数据,则可以使用替代方法。查找表的所有数据库更改和值都应在源代码管理中。我们只需恢复最后的生产备份,然后使用源代码控制脚本添加任何尚未进入生产的开发更改。如果您有多个数据库,则应同时刷新所有数据库。这样做的一个好处是,您拥有与生产环境大致相同数量的记录,这在测试数据库代码的性能方面产生了巨大差异。它还有助于让您的开发人员使用源代码控制进行更改,并有助于在将部署移至其他环境之前练习部署。