一个 User 表。 用户有多个下家,只有一个上家。
是直接在 User 表里加一个 parent_id 表示上家的 id。 model 中:
belongs_to :owner, :class_name => "User" has_many :children, :class_name => "User", foreign_key: "parent_id"
上面的方法只用增加一个 parent_id 的字段, 还是直接建立个关系表比较好?
多对多的关系建中间关系表比较合适。查下家貌似是一对多关系,关系写好,self.children 不就可以查出来了?不需要 where 吧
#1 楼 @pathbox 嗯,不用 where,我修改了。多一个表的话每次查询会多出查一个表的时间,因为上家只会有一个,所以直接 belongs_to :owner 就可以了。
#1 楼 @pathbox 如果上家有多个,就跟 railstutorial 里的关系模型一样了。那这时我到底依然用上面的方法,只是在查询上家时写成一个方法,用 where 去查询的效果好,还是跟 tutorial 建一个中间表去处理效果好呢
#3 楼 @catherine 如果是多对多,你根本不可能通过外键的方式去做关联,你只有一个 parent_id 字段,只能存某一个上家的 id,你记住了上家 B,就要忘掉上家 A,要记住上家 C,就要忘掉上家 B,始终最多就记录一个,那你还怎么多对多?
parent_id
id
楼上说了,多对多建中间表关联。查询的时候,请注意 n+1 问题
#4 楼 @martin91 #5 楼 @pathbox 谢谢各位回复,还是决定增加一个字段解决,不用浪费一个表的资源。在原文里说的是一对多模型:一个用户对应多个下家,且只对应 1 个上家。