如何删除此数据库设计异常?

时间:2012-09-26 00:38:37

标签: ruby-on-rails ruby database-design

我正在为我的项目设计一个数据库模式,在那里我似乎被一个奇怪的视觉障碍所困扰(从某种意义上说,我之前从未遇到过这个问题,因为它实际上太容易解决了,除了这个特殊情况 - 对我来说)

我有一个实体homes,可以有各种facilities 所以,我已经宣布了一个模型:FacilitySet,它看起来像:

id, home_id, parking, electricity  

如您所见,facility_sets表的每一行对应一个Home。

但是,在我看来,如果我能说:一个家庭有很多设施,而不是一个家庭has_one facility_set,那对我来说会更有意义。这也提供了一个优点,我可以简单地说:@ home.facilities,而不是@ home.facility_set

真正的问题是我无法理解如何构建数据库中的facilities表,以便我可以简单地声明:

class Home << ActiveRecord::Base
  has_many :facilities
  ..
end

和访问设施,例如:@home.facilities

我现在正在做:

class Home << ActiveRecord::Base
  has_one :facility_set
  ..
end

和访问设施,如:@home.facility_set,这让我觉得我做的事情可怕! :〜)

在这里的清晨,我真的非常感谢ray-of-ho(m)e对我来说。

此致

1 个答案:

答案 0 :(得分:1)

class InitSchema < ActiveRecord::Migration
  def change
    create_table :homes do |t|
      t.integer :id, null: false
      # ...
    end

    create_table :facilities do |t|
      t.integer :id, null: false
      t.integer :home_id, null: false
      t.string :name, null: false
      t.string :value, null: false
    end
  end
end

class Home < ActiveRecord::Base
  has_many :facilities
end

class Facility < ActiveRecord::Base
  belongs_to :home
end

现在使用设施名称和值字段来存储停车,电力等等。您可能想要创建一个具有设施的FacilityType类,并在那里保留停车,电力等。