求教一个关于一对多多对一的基本问题

求教一个关于一对多多对一的基本问题

可能是理解力不够,不会举一反三,求高人指点。
比如有一个产品的模型,每个产品会有很多附件,这时候它们就是一对多的关系
class Product < ActiveRecord::Base
has_many :accessories,
...

class Accessory < ActiveRecord::Base
belongs_to :product,
...

是这样吧?
那么在数据库里它们是怎么储存的呢?是不是这样:
products表里面有一些字段,name,description,accessory_id等等
name、description是string类型,那么accessory_id是什么类型的呢?integer?
能不能举个具体例子,比如产品5,有三个附件,id分别是7,8,9,那么数据库中应该是什么样子呢?

再比如,有“相关产品”,那么跟同一个表中其它项目的关联,这个算是几对几的关联呢……
产品3跟产品5,7,9,11是相关产品,那么数据库中这个字段应该怎样保存呢……
------------------
可能问题幼稚了点,还望高人不吝赐教……
依次回答你的几个问题

1. 在 Rails 的代码上你没有写错

2. 在数据库中,恰好相反。既然你已经明白 accessories belongs to product,即是说明 accessories 是作为从表,一般来说都是在从表的记录中保存主表的 id。因此,数据库的结构应该是 accessories 表包含一个 product_id 字段(根据 Rails 约定)

[Copy to clipboard] [ - ]
拜谢LS……
今天狠啃了一下书,终于发现是我理解出现偏差,关联是“反”过来的……
对于“相关产品”这个,昨天躺床上想了半天,觉得也应该是属于某个“组”模型,哪怕这个“组”没有名字出现也可以,正常应该这么处理对吧?
可以参考《Agile》中的订单和产品的模型
建立3个model,分别为Product, Accessory和AssembleItem
其中AssembleItem表示Product和Accessory的装配关系,包含product_id和accessory_id
products表中只需要保存其除了附件外的属性,比如提到的name,description等
每个accessory也可能有一些属性保存在accessorys表中
Product和Accessory与AssembleItem的关系都是
has_many :accemble_items
相应的AssembleItem与他俩的关系是
belongs_to :product
belongs_to :accessory
这样可以把多个accessory与product通过assemble_item连接起来
对于一个产品而言具有某个id,比如是product.id=3
这个产品具有三种配件,配件id分别为4,5,6
那么会在assemble_items表中产生三条记录
product_id  accessory_id
 3     4
 3     5
 3     6
这样就把Accessory和Product对应起来了
如果需要反查某个accessory被哪些product使用还可以建立
has_many :products, :through => :assemble_items
的对应关系,查询起来也比较简单