数据库设计,用户与订单模型之间的关系

时间:2012-12-23 16:38:20

标签: php activerecord one-to-many laravel

我正在构建一个包含用户和订单的Web应用程序。我有一个关于如何处理两者之间关系的问题。

订单属于用户。但这是扭曲,用户可以选择将订单外包给另一个用户。

当订单外包时,原始用户仍然是所有者,只有他可以修改订单上的某些商品,如价格,数量等。 订单外包的用户可以查看一些订单信息,并可以更新订单上的特定属性,例如标记为已履行。 外包订单应显示在两个用户“订单索引”上。

所有用户都“相等”,这意味着某些订单可能是用户可能是所有者,而其他用户可能正在履行订单。用户也可以履行自己的订单。

它似乎不是真正的多对多关系,因为其中一个用户并不真正拥有该订单,他只是对它的访问权限有限。

处理此订单/用户关系的最简单方法是什么?我想避免使用完整的权限系统,有没有办法简单地处理这个“外包”表?如何在订单表上设置user_id和outsourced_to字段?

感谢您的投入!

如果有任何帮助,该应用程序使用Laravel。

2 个答案:

答案 0 :(得分:1)

您的Orders表似乎与Users表有两个独立的关系。 订单与用户拥有/拥有关系。

Users(1) -- owns -- (*)Orders

一个用户可以拥有多个订单。一个订单仅由一个用户拥有

然后,订单和用户之间存在完全独立的外包关系。

Orders(*) -- outsourced-to -- (1)Users

(这里我假设一个订单只能外包给另一个用户。用户可能有许多订单外包给他们。)

表示此问题的最佳方法是让Orders表在Users表中有一个“owner”外键列,而另一个'outsourced_to'外键列也在Users表中。

外包用户可以编辑哪些订单列将由代码控制,而不是由dB控制。

只有在订单可以同时外包给多个用户时,才需要单独的外包表。

答案 1 :(得分:0)

  

在订单表上有一个user_id和outsourced_to字段怎么样?

听起来不错。

另外,考虑一种去标准化,比如移动字段,可以通过“outorced-to”用户编辑来分隔表格。