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

Ruby on rails 如何删除此数据库设计异常?,ruby-on-rails,ruby,database-design,Ruby On Rails,Ruby,Database Design,我正在为我的项目设计一个数据库模式,我似乎被一个奇怪的视觉障碍卡住了(从某种意义上说,我以前从未遇到过这个问题,因为它实际上太容易解决,除了在这个特殊情况下——对我来说) 我有一个实体住宅,可以有各种设施 因此,我声明了一个模型:FacilitySet,它看起来像: id, home_id, parking, electricity 如您所见,facility\u set表的每一行对应一个Home 但是,在我看来,如果我能说:一个家里有很多设施,而不是一个家里有一套设施,那对我来说就更有意

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

我有一个实体
住宅
,可以有各种
设施

因此,我声明了一个模型:
FacilitySet
,它看起来像:

id, home_id, parking, electricity  
如您所见,
facility\u set
表的每一行对应一个Home

但是,在我看来,如果我能说:一个家里有很多设施,而不是一个家里有一套设施,那对我来说就更有意义了。这也提供了一个优势,我可以简单地说:@home.facility,而不是@home.facility\u set

真正的问题是我无法理解如何构造数据库中的
设施
表,因此我可以简单地声明:

class Home << ActiveRecord::Base
  has_many :facilities
  ..
end
并访问类似于:
@home.facility\u set
,这真的让我觉得我做错了什么!!:~)

今天早上很早就到了,我真的非常感谢你为我带来的一切

关于类InitSchemaclass 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 def更换 创建表格:家庭不需要| t、 整数:id,null:false # ... 结束 创建|u表:设施不| t、 整数:id,null:false t、 整数:home\u id,null:false t、 string:name,null:false t、 string:value,null:false 结束 结束 结束 类Home 现在,使用facilities name and values字段存储停车场、电力等内容。您可能希望创建一个包含许多设施的FacilityType类,并将停车场、电力等保留在其中。

class InitSchema

现在,请使用“设施名称和值”字段来存储停车场、电力等内容。您可能希望创建一个包含许多设施的FacilityType类,并将停车场、电力等保留在其中。

谢谢您,谢谢:)通过FacilitySets,您能想到这种方法的任何问题吗?这是更好的方法吗?@Stpoc。一件好事是,您可以在不更改模式的情况下添加新的设施类型。另一个好处是数据规范化的所有好处,例如,可以更轻松地查询具有特定设施集的家庭。为此,谢谢:)您能想到,这种方法在设施集上有什么问题吗?这是更好的方法吗?@Stpoc。一件好事是,您可以在不更改模式的情况下添加新的设施类型。另一个好处是数据规范化的所有好处,例如,可以更轻松地查询具有特定设施集的家庭。
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