Лучший способ управлять несколькими категориями в дизайне базы данных - PullRequest
0 голосов
/ 21 июня 2019

Цель: разработать лучшую таблицу базы данных для поездки

Таблица 01: Trip (Columns: id, transport_mode_id....etc)

Таблица 02: Trains (id, name, number....etc.)

Таблица 03: Buses(id, name, number....etc)

Я хочу создать Trip table (transport_mode_id) с train_id или bus_id.Поездка должна иметь либо bus_id, либо train_id.

Должен ли я создать два столбца train_id, bus_id?в таблице поездок.Пожалуйста, предложите разработать trip стол

1 Ответ

2 голосов
/ 21 июня 2019

То, что вы ищете, это полиморфные ассоциации Иногда поездки связаны с автобусом, иногда с поездом, самолетами и лодками.

Несколько более сложный поворот ассоциаций - это полиморфная ассоциация.При полиморфных ассоциациях модель может принадлежать нескольким другим моделям в одной ассоциации.Например, у вас может быть модель поездки, которая относится либо к модели поезда, либо к модели автобуса.Вот как это можно было бы объявить:

class Trip < ApplicationRecord
  belongs_to : transportable, polymorphic: true
end

class Bus < ApplicationRecord
  has_many :trips, as: :transportable
end

class Train < ApplicationRecord
  has_many :trips, as: :transportable
end

в базе данных

class CreateTrips < ActiveRecord::Migration[5.0]
  def change
    create_table :trips do |t|
      ...
      t.references :transportable, polymorphic: true, index: true
      ....
    end
  end
end

, если таблица полностью готова

class CreateTrips < ActiveRecord::Migration[5.0]
  def change
    add_reference :trips, :transportable, polymorphic: true, index: true
  end
emd

Я надеюсь, что этопомогает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...