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

Sql 重构数据库并保留现有数据的最佳实践?,sql,sql-server,database,linq-to-sql,orm,Sql,Sql Server,Database,Linq To Sql,Orm,我一直在开发一个数据密集型应用程序,它有大约250个表。最近需要进行一些设计更改。一些设计更改需要添加新表,并以1-N的方式将这些表与现有表(foregin键)链接,以实现父子关系(在ORM中) 就拿这个例子来说。目前的设计允许每个合同租用一辆车。新设计要求在同一合同中有多辆车,且价格不同 因此,现在需要将一个表中的数据放入另外两个表中 我已经完成了对模式的更改,但我无法将这些更改部署到测试环境中,直到找到转换现有数据并将其转换为新设计格式的方法 我目前的进程 添加3个新表nContract、n

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

就拿这个例子来说。目前的设计允许每个合同租用一辆车。新设计要求在同一合同中有多辆车,且价格不同

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

我已经完成了对模式的更改,但我无法将这些更改部署到测试环境中,直到找到转换现有数据并将其转换为新设计格式的方法

我目前的进程

  • 添加3个新表nContract、nContractedAsset、nContract
  • 将合同表中的信息复制到3个新表中。在nContact表上保留与Contract表相同的主键字段。 将foregin键引用/索引/权限从合同表复制到nContract
  • 删除合同表
  • 将合同重命名为合同等
  • 我唯一的问题是我不喜欢用SQL编写第2部分。我想利用ORM和.Net的强大功能,为比本例更复杂的场景执行更智能、更复杂的任务

    有没有一种方法可以在第2步中使用ADO.Net或ORM编写数据迁移


    这方面的最佳实践或流程是什么?我做错什么了吗?

    我最终使用了FluentMigrator

    它允许我进行类似实体框架的迁移(请参阅:RubyonRails活动记录迁移)

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


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

    行数据最好在数据库中处理。什么事让你烦恼?你认为你的sql技能比你的orm技能低吗?这真的是因为我觉得处理对象和关系更舒服。我可以在SQL中很好地进行SQL DDL和查询。但其中一些要求需要临时表来存储信息,然后从中复制。我对内存计算和智能处理对象中的信息更有信心。”“我唯一的问题是,我不习惯用SQL编写第2部分。我想利用ORM和.Net的强大功能,为比本例更复杂的场景执行更智能和复杂的任务“’没有比使用T-SQL更快的方法(就执行性能而言)。而且您可以处理事务,因此您可以根据需要重试多次,直到解决方案工作为止(如果没有,请回滚,然后重新开始)。IMO使用一些抽象技术这样做只是浪费精力和时间。ORM不再是“智能的”“而不是T-SQL。@Endrju没有说是。最终它将转换为TSQL。ORM也支持完全回滚和事务。这只是我喜欢的对象内存处理。我可以访问很多数据类型和集合(例如哈希)在.NET中,这将使我更容易做我想做的事情。如果我纯粹在TSQL中做,我将需要临时表来实现同样的事情。