新手问题 对 “一對一關聯 one-to-one” 的一点点困惑

QueXuQ · 2012年10月10日 · 最后由 QueXuQ 回复于 2012年10月10日 · 2241 次阅读

最近做一个库存与商品之间的数据库的时候用到一对一关联! 为什么使用一对一关联呢? 是这样子的,商品与库存之间是需要一对一的,因为商品 A,在库存中,数量是 20 个。 所以我们使用了一对一。

但是在使用中我觉得有点困惑: 首先,所谓一对一,就是商品 A 至于库存 B 有联系,不可以在商品 A 与库存 C 存在联系。这样一说来,究竟怎么表达 has_one 和 belongs_to,因为任意的交换都是可以的。

其次,虽然两者交换可以,但是我们存在着一个意境的表达,例如:库存拥有商品,商品在库存中;而不可以说商品拥有库存,库存在商品中,这样表达好像不太好。所以自然我们在商品中使用belongs_to :库存,库存中使用has_one :商品

最后,根据上面的表达,我觉得字段应该这样,库存(商品 ID,数量),可是这样的想法是错误的。根据 guides 中描述的是应该在商品中保存库存的 ID,这样以来,库存就只需要保存一个(数量)的字段了。

或者你们说,其实直接按照 guides 那理解就可以了。但是我觉得有点与我的想象有点格格不入,从我的想法来说,始终觉得库存(商品 ID,数量)这样更好理解。或者是不是应该理解成,商品中包含了(库存 ID)可以理解成商品放入哪个库存中,这样就 Ok 呢?

匿名 #1 2012年10月10日

本身那谁在谁里得看你是做什么事情。 比如,你在打开一个商品详情,显示库存,那就应该是获得商品,然后查找库存。 而如果你要查看库存列表,那就是根据库存,显示库存对于的商品。

咋说就得看你咋做了。 至于库存 id 放在商品,还是库存里放商品 id,那就要看你的设计能力,考虑下使用查询时,哪样最快,性能最高。

#1 楼 @help5305fff 当你说到“考虑下使用查询时,哪样最快,性能最高。”我就应该好好从新构思一下一对一关联的定义了,以前一直没有考虑过性能的问题。

1 对 1 如果建索引应该两种情况效率都差不多。 LZ 太纠结了,个人认为库存表是对商品表的描述,所以我也会把商品 ID 放库存表里。

我也觉得商品有库存,而不是库存有商品,你的库存比简单,如果商品有多个 sku,那么商品就会有多个库存信息,而不是一个。

#3 楼 @jjym #4 楼 @kenshin54 SKU=Stock Keeping Unit(库存量单位) “商品有库存,而不是库存有商品" 这样只描述法,就可以很合理的把商品 ID 放库存表里。 不好意思,第一次使用一对一关联,所以纠结了一下。

匿名 #6 2012年10月10日

@QueXuQ 你确定你的商品和库存是那种很单纯的?没规格属性的? 比如,裤子,有 30、31、32...码,每一种码是否都应该有一个库存?

呵呵呵呵

#6 楼 @help5305fff 这个真心现在没有,不过你说到了,我才发现以后可能会有这方面需求。 把商品 ID 放库存表里,以后如果有这样需求,加个字段,在改成 has_many 就可以了~^_^

需要 登录 后方可回复, 如果你还没有账号请 注册新账号