Rails - лучшая практика миграции БД - PullRequest
0 голосов
/ 29 декабря 2018

Я разработал следующую миграцию и хотел узнать у сообщества, соответствует ли она наилучшей практике миграции рельсов.Я использую базу данных postgres.

Я пытаюсь создать структуру базы данных, в которой различные статусы, присвоенные пользователю, хранятся в отдельной таблице.например, его семейное положение.

дайте мне знать, если это звучит как достаточно эффективный дизайн стола.и что я мог бы улучшить.

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

end

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

В этом случае лучшие практики будут диктовать:

  1. Разбейте каждый create_table на собственную миграцию.
  2. Ваши имена таблиц должны быть во множественном числе, например marital_statuses.
  3. Штампы времени - хорошая идея.
  4. Рассмотрите возможность добавления индексов к полям, которые будут регулярно запрашиваться, например, к именам моделей, электронным письмам пользователей или внешним ключам.

Ознакомьтесь с руководством по переходам по миграции для получения информации о передовой практике:https://edgeguides.rubyonrails.org/active_record_migrations.html

0 голосов
/ 29 декабря 2018

Давайте начнем с:

  1. Это одна миграция?Если это так, я бы начал с разбиения его на несколько миграций (по одному для каждой таблицы).

  2. Добавьте временные метки для каждой таблицы (t.timestamps null: false).Вы будете благодарить меня позже;)

  3. Для таблиц статусов (martial_status, professional_status) создайте более простые таблицы только с именем и ссылками (не нужно создавать столбец для каждого значения).Кроме того, вам, вероятно, не нужна таблица для семейного положения, потому что вы можете использовать classy_enum .

  4. В prequalifications у вас есть целочисленные столбцы для отношений (maritial_status, professional_status).Не делайте этого, используйте references.

  5. Для логических столбцов определите значения по умолчанию.

...