1

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

这导致了应该进行数据迁移的想法——这是一种很自然的思路,我认为既然它不存在,那么一定有一个很好的理由。

那么——为什么没有数据迁移?或者,或者,应该如何完成这样的任务?

4

1 回答 1

0

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

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

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

请注意,在这两种情况下,数据永远不会单独修改,它总是伴随着结构或至少是应用程序代码的变化。

于 2013-10-31T22:03:06.403 回答