新手问题 一个关于数据库的表的设计,是 3 表互相关联好,还是逐一关联

QueXuQ · 2012年11月15日 · 最后由 QueXuQ 回复于 2012年12月18日 · 2954 次阅读

假设我有 A,B,C。3 个表。 有两种设计关系的方法, 1:

A:
has_many :B
B:
belongs_to :A
has_many :C
C:
belongs_to :B

另外一种,2:

A:
has_many :B
has_many :C
B:
belongs_to :A
has_many :C
C:
belongs_to :B
belongs_to :A

我均为在 A 中调用到 C,如果 1 的方法的话,就通过 A.Bs.Cs(里面通过 each 遍历,省去)。 而 2 的方法,则直接可以 A.Cs. 请问如果需要从 A 调用 C,是不是使用第二种方法会好呢?这样搜索的性能会更好吧?

哎呀妈呀,ABC 的故事还没有搞定吗?

这个情况是不是可以这么理解。 那就电子商务的订单来说吧。 用户一次购买很多商品,每个商品还有多个包装规格(1kg,2kg),每种商品要求生成一个订单,会发送给一个厂商。

purchase 购买单 order 订单 orderitem 订单明细

是这么个结构吧。

我均为在 A 中调用到 C,什么意思,说得明白点,是不是有几个错别字啊!

表结构肯定是三张比较好,因为三个东西表述的不是一个东西,都有自己的属性。 就算三张表也可以做第二种 model 关系吧。 表结构和 model 关系不是一一对应的。 has_many 只是代表有主外键的关系,并不是说要两张表的意思!!

#4 楼 @woaigithub 我的意思是这样子啦。 就是 A has_many B, B has_many C, 但是我需要有在 A 调用 C 的情况,如果像上面的关系,我需要两个循环

A.Bs.each do |b|
  b.Cs.each do |c|
....

是不是应该加个关系 A has_many C,会更加好呢?直接调用,用一次循环就可以了:

A.Cs.each do |c|
需要 登录 后方可回复, 如果你还没有账号请 注册新账号