我设计了以下迁移,并希望与社区确认是否符合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
结束
答案 0 :(得分:1)
让我们开始:
这是一次迁移吗?如果是这样,我将从将其分为几个迁移(每个表一个)开始。
为每个表(t.timestamps null: false
)添加时间戳。您稍后会感谢我;)
对于状态表(martial_status
,professional_status
),只需名称和引用即可创建更简单的表(无需为每个值创建列)。另外,您可能不需要该表来显示婚姻状况,因为您可以使用classy_enum。
在prequalifications
中,您有用于关系的整数列(maritial_status
,professional_status
)。不要这样做,请使用references
。
对于布尔列,请定义默认值。
答案 1 :(得分:1)
在这种情况下,最佳做法将决定:
create_table
分成自己的迁移。 marital_statuses
。 有关迁移的最佳方法,请查看迁移指南:https://edgeguides.rubyonrails.org/active_record_migrations.html