在Rails中重构填充的SQL数据库

时间:2016-09-13 16:05:42

标签: mysql ruby-on-rails ruby postgresql activerecord

  • 由于设计不好,我有一个数据库,其中包含一个表中的数据,实际上应该分成两个表。
  • 该表提供了两种不同型号的数据。我使用名为type的表字段来区分这些模型。
  • 我用它来说if type == MODEL_A ... do fooif type == MODEL_B ... do bar
  • 根据具体表的类型(类型:MODEL_AMODEL_B),我只使用表中MODEL_A的列的子集,以及剩余的子集MODEL_B的列。因此,许多列始终包含NULL
  • 我认为应将它们拆分为MODEL_A表和MODEL_B表。

如何在不删除现有数据的情况下在Rails / ActiveRecord中进行此操作?

1 个答案:

答案 0 :(得分:1)

这是一个非常广泛的问题,所以我的答案将集中在程序而不是具体的代码上。

  1. MODEL_B数据创建新表。将其命名为MODEL_B_TABLE(例如)
  2. 重命名原始表格(如有必要),因为它现在仅用于MODEL_A数据
  3. 运行查询以从原始表中提取所有MODEL_B数据,并将其放入新的MODEL_B_TABLE
  4. 更新您的应用程序以从正确的数据库表中提取
  5. 从原始表中删除不需要的数据(因为MODEL_B_TABLE中现有特定数据)
  6. 测试,测试,测试!
  7. 将更改上载到临时服务器并运行迁移。
  8. 如果在登台服务器上看起来都很好,请将其推送到生产环境。如果没有,请从第6步开始。
  9. 这是避免生产服务器数据丢失的适当程序。正确的测试至关重要!在投入生产之前,请确保备份所有数据。