在数据库设计中管理多个类别的最佳方法

时间:2019-06-20 23:40:58

标签: ruby-on-rails postgresql

目标:为旅行设计最佳的数据库表

表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的{​​{1}}。行程应具有bus_idbus_id

我应该创建两列train_idtrain_id吗?在“行程”表中。请建议设计一个bus_id

1 个答案:

答案 0 :(得分:2)

您要寻找的是polymorphic-associations,有时会链接到公共汽车,有时是火车,飞机和船。

  

多态关联是关联上的一种更高级的扭曲。使用多态关联,一个模型可以在一个关联上属于一个以上的其他模型。例如,您可能有一个旅行模型,该旅行模型属于火车模型或公共汽车模型。可以这样声明:

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

我希望这对您有帮助