为什么数据迁移不是一件事?

时间:2013-10-31 21:13:15

标签: ruby-on-rails migration

在开发过程中,我遇到了我已完成的任务,需要向我们的数据库添加数据以使我们软件的某些方面运行。每当发生这种情况时,我通常只是进行迁移来创建对象;但这似乎是以一种无意的方式使用迁移。我们可以使用raketask,但是对于只需要添加到所有环境中的东西,这样做的意义不大(需要开发人员干预才能工作,而不仅仅是迁移)。

这导致了应该有数据迁移的想法 - 而且我认为它是如此自然的思路,因为它不存在,必须有一个很好的理由。

那么 - 为什么数据迁移不是一件事?或者,或者,如何处理这样的任务?

1 个答案:

答案 0 :(得分:0)

我可以想象一些在迁移过程中数据操作完全有效的情况:

  1. 'product_code'列('XYZ-12345'格式)被分为'manufacturer_code'('XYZ')和'seq_number'('12345')。添加两列的顺序,根据旧列中的值更新它们并最终删除旧列可以被视为原子操作

  2. StatusCode模型,它是订单状态的查找表,其值为Active / Canceled / Completed。假设您对订单处理流程进行了更改,现在可以变为待处理流程。这不像前面的例子那么明显,许多人会争论这个,但我发现在这种情况下可以通过迁移添加新的StatusCode记录。但是,使用这种方法,您应该始终保持所有状态代码的迁移(和种子,因为数据不会反映在架构转储中),并且不允许从工作应用程序中操作它们。

  3. 请注意,在这两种情况下,数据永远不会单独修改,它始终伴随着结构或至少应用程序代码更改。