Ruby on rails 多对多数据模型之谜

Ruby on rails 多对多数据模型之谜,ruby-on-rails,database-design,activerecord,associations,rails-activerecord,Ruby On Rails,Database Design,Activerecord,Associations,Rails Activerecord,给定的 3ActiveRecord型号: class Dealer < ActiveRecord::Base end class CarMake < ActiveRecord::Base has_many :car_models end class CarModel < ActiveRecord::Base belongs_to :car_make end 我想做的是: dealer1.his_makes # => [Ford, Chevrolet, Me

给定的

  • 3
    ActiveRecord
    型号:

    class Dealer < ActiveRecord::Base
    end
    
    class CarMake < ActiveRecord::Base
      has_many :car_models
    end
    
    class CarModel < ActiveRecord::Base
      belongs_to :car_make
    end
    
    我想做的是:

    dealer1.his_makes  # => [Ford, Chevrolet, Mercury]
    dealer1.his_models # => [Flex, Fiesta, Impala, Milan]
    
    dealer2.his_makes  # => [Ford, Mercury, Nissan]
    dealer2.his_models # => [Fiesta, Focus, Altima]
    
    我的问题是:

    我应该添加哪些关联/表来实现这一点?

    添加属于经销商、CarModel和CarMake的库存模型。为了好玩,在“数量”字段中输入


    您可能会争辩说CarModel是没有必要的,但如果这是一个常见的查询,似乎是一个合理的反规范化点。

    经销商和汽车制造商之间的联接表允许您指定“经销商期望的汽车制造商”。如果所有需要的型号都是此表中指定的品牌,那么我将在DealerCharmakes和CarModels之间创建一个联接表,为该经销商指定该品牌所需的型号

    虽然您可以使用单个表,但会出现一些问题:

  • 您需要在检索所需汽车品牌的查询中使用一个独特的名称,这通常表示缺乏规范化
  • 能够指定理想的汽车品牌取决于该品牌是否有理想的汽车型号——这里可能不是问题,但在其他情况下肯定是问题,因为没有这种依赖性
  • 您不能具有DealerCarMake级别的属性,例如“自日期起需要”或值范围
  • dealer1.his_makes  # => [Ford, Chevrolet, Mercury]
    dealer1.his_models # => [Flex, Fiesta, Impala, Milan]
    
    dealer2.his_makes  # => [Ford, Mercury, Nissan]
    dealer2.his_models # => [Fiesta, Focus, Altima]