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

时间:2015-06-17 00:13:46

标签: sql sql-server database linq-to-sql orm

我一直致力于一个数据密集型应用程序,它有大约250个表。最近需要进行一些设计更改。一些设计更改需要添加新表,并以1-N方式将这些表与现有表(foregin键)相关联,以实现父子关系(在ORM中)。

举个例子。目前的设计允许每个合同一个租赁车辆。新设计要求同一合同中的多个车辆具有多种费率。

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

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

我目前的流程。

  1. 添加3个新表nContract,nContractedAsset,nContractRate
  2. 将合同表中的信息复制到3个新表中。保留nContract表上与Contract表相同的主键字段。 将foregin密钥引用/索引/权限复制到合同表中的nContract
  3. 删除合约表
  4. 将nContract重命名为Contract等。
  5. 我唯一的问题是我不习惯在SQL中做第2部分。我希望利用ORM和.Net的强大功能,为比这个例子更复杂的场景做更多智能和复杂的任务

    我是否可以使用ADO.Net或ORM为第2步编写数据迁移?

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

1 个答案:

答案 0 :(得分:0)

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

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

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

关于它的最好的事情是所有的迁移脚本都可以放在源代码管理中,甚至可以进行测试。