Rails-数据库迁移最佳实践

时间:2018-12-29 11:09:09

标签: ruby-on-rails postgresql ruby-on-rails-5 database-migration rails-migrations

我设计了以下迁移,并希望与社区确认是否符合Rails迁移的最佳实践。我正在运行一个postgres数据库。

我正在尝试实现一种db结构,其中将附加到用户的各种状态存储在单独的表中。例如,其婚姻状况。

让我知道这听起来是否像一个合理有效的表格设计。以及我可以改善的地方。

class CreatePrequalifications < ActiveRecord::Migration[5.2]
 def change
   create_table :prequalifications do |t|
    t.string :attachment
    t.text :description
    t.integer :marital_status
    t.integer :professional_status
    t.integer :collateral_status
    t.integer :income_direct
    t.integer :income_support
    t.integer :income_scolarship
    t.integer :income_other
    t.boolean :blacklist

    t.references :user, foreign_key: true

    t.timestamps
  end
end

create_table :marital_status do |t|
  t.string :single
  t.string :married
  t.string :other
  t.string :divorced
  t.string :with_dependants
  t.references :user, foreign_key: true
  t.references :prequalifications, foreign_key: true
end

create_table :professional_status do |t|
  t.string :self_employed
  t.string :employed
  t.string :student
  t.string :other
  t.text :description
  t.datetime :contract_created_at
  t.datetime :contract_terminated_at

  t.references :user, foreign_key: true
  t.references :prequalifications, foreign_key: true
end

create_table :collateral_status do |t|
  t.string :collateral_name

  t.string :collateral_income
  t.boolean :visale_collateral
  t.boolean :student_collateral
  t.boolean :bank_collateral

  t.references :user, foreign_key: true
  t.references :prequalifications, foreign_key: true
end

结束

2 个答案:

答案 0 :(得分:1)

让我们开始:

  1. 这是一次迁移吗?如果是这样,我将从将其分为几个迁移(每个表一个)开始。

  2. 为每个表(t.timestamps null: false)添加时间戳。您稍后会感谢我;)

  3. 对于状态表(martial_statusprofessional_status),只需名称和引用即可创建更简单的表(无需为每个值创建列)。另外,您可能不需要该表来显示婚姻状况,因为您可以使用classy_enum

  4. prequalifications中,您有用于关系的整数列(maritial_statusprofessional_status)。不要这样做,请使用references

  5. 对于布尔列,请定义默认值。

答案 1 :(得分:1)

在这种情况下,最佳做法将决定:

  1. 将每个create_table分成自己的迁移。
  2. 您的表名称应为复数形式,例如marital_statuses
  3. 时间戳记是一个好主意。
  4. 考虑将索引添加到将定期查询的字段,例如型号名称,用户电子邮件或外键。

有关迁移的最佳方法,请查看迁移指南:https://edgeguides.rubyonrails.org/active_record_migrations.html