重构数据库并保留现有数据最佳实践



我一直在开发一个数据密集型应用程序,该应用程序大约有 250 个表。最近需要进行一些设计更改。一些设计更改需要添加新表,并以 1-N 方式将这些表与现有表(foregin key)链接起来,以实现父子关系(在 ORM 中)。

以这个例子为例。目前的设计允许每份合同一辆租赁车辆。新设计需要在同一合同中以多种费率提供多辆战车。

因此,现在需要将一个表中的数据放入另外两个表中。

我已经完成了对架构的更改,但在找到转换现有数据并将其放入新设计格式的方法之前,我无法将这些更改部署到测试环境。

我目前的流程。

  1. 添加 3 个新表 nContractedAsset, nContractedAsset, nContractRate
  2. 将合同表中的信息复制到 3 个新表中。保留 n合约表上的主键字段与合约表相同。从合约表中复制 foregin 键引用/索引/n合约权限
  3. 删除合约表
  4. 将 nContract 重命名为"合约",依此类推。

我唯一的问题是我不习惯在SQL中做第2部分。我想利用ORM和.Net的强大功能为比此示例更复杂的场景执行更智能,更复杂的任务

有没有办法在步骤 2 中使用 ADO.Net 或 ORM 编写数据迁移?

最佳实践

或流程是什么?我做错了什么吗?

我最终使用了FluentMigrator https://github.com/schambers/fluentmigrator

它允许我像迁移一样执行实体框架(请参阅:Ruby On Rails Active Records 迁移)

大多数DDL都可以以流畅的格式在.NET中编写。它支持包含在事务中的 UP 和 DOWN 迁移,甚至支持用于数据迁移的完整 SQL 脚本。

最好的一点是,您的所有迁移脚本都可以放在源代码管理中,甚至可以进行测试。

最新更新