首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库中的一对一关系

数据库中的一对一关系
EN

Stack Overflow用户
提问于 2015-01-13 00:33:38
回答 1查看 59关注 0票数 0

我目前正在使用拉勒维尔框架,我注意到了一些让我对我的数据库设计产生疑问的东西。

我目前有下表products,其中每个记录代表一个产品,它包含一个prices表的外键,表示与产品关联的价格/货币。

代码语言:javascript
复制
+-----------+---------+----------+-----+-----------+
|product_id |price_id |seller_id |title|description|
+--------------------------------------------------+
|           |         |          |     |           |
|           |         |          |     |           |
|           |         |          |     |           |
|           |         |          |     |           |
+-----------+---------+----------+-----+-----------+

现在我看的是描述模型这里之间关系的Laravel文档。我在这种关系中使用的及物动词是Product Price。然而,根据Laravel文档,我需要使用"belongsTo“而不是"hasOne”函数(即。产品belongsTo价格)。这是正确的功能,但使用错误的及物动词似乎有点奇怪,也不容易读懂,这就是为什么我质疑我的数据库设计。

为了在Laravel中使用"hasOne“关系,我必须反转外键的方向,而是让prices表有一个外键,该外键与价格相关。

产品表:

代码语言:javascript
复制
+-----------+----------+-----+-----------+
|product_id |seller_id |title|description|
+----------------------------------------+
|           |          |     |           |
|           |          |     |           |
|           |          |     |           |
|           |          |     |           |
+-----------+----------+-----+-----------+

价目表:

代码语言:javascript
复制
+-----------+----------+------+----------+
|price_id   |product_id|amount|currency  |
+----------------------------------------+
|           |          |      |          |
|           |          |      |          |
|           |          |      |          |
|           |          |      |          |
+-----------+----------+------+----------+

哪种设计是正确的?对我来说,在price_id表中有一个products列更有意义,因此在查看表时,您可以立即看到productprice相关联。它似乎也更有效,因为您是通过它的主要指数来查找价格,而不是通过查找product_id列来查找价格。

EN

回答 1

Stack Overflow用户

发布于 2015-01-13 02:32:09

这取决于你的业务规则是什么。在大多数情况下,price将是product的一个属性。换句话说,价格只是产品表上的一列。

在这种简单的情况下,可能会出现复杂的情况。

例如,您可能对同一产品有不同的价格,这取决于您要卖给谁。或者,您可能正在存储一个产品的价格随时间而变化的历史。在本例中,您有一个:多个关系(一个product有多个prices)。

另一方面,你可能有一个更专业的案例,比如出售一小块硬件或某种按重量出售的干货。想想去家得宝,看到小水泡包的价格像"$AA","$BB“,在那里,这些符号转换成一定数量的美元和美分,这将随着时间的推移。在本例中,您有一个price:许多在另一个方向,即一个products有多个products

在这种情况下要记住的重要一点是,除非你有意地改变所有价格,否则你不会这样做。如果每件花费1.50美元的东西都同时改变价格到1.55美元,那么第二种情况可能是正确的。

当这种关系是巧合的时候,您应该做的是从不将子记录链接到单亲记录。换句话说,仅仅因为产品A和产品B的价格是相等的,这种相等可能是巧合的,所以你不应该把价格从产品表中拿出来,做一个价格表,仅仅因为有些东西巧合地分享了一个价格。

为了能够回答你的问题,你需要首先弄清楚你的业务规则是什么,更具体地说,每个产品有多少价格,不同产品的价格是以一种有意义的方式或巧合的方式联系在一起的。这将帮助您驱动您的数据模型,从那里您的Laravel动词将明智地跟随。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27913170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档