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


Database design, relationship between user and order model

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

订单属于用户。但这里有一个转折,用户可以选择将订单外包给另一个用户。

当订单外包时,原始用户仍然是所有者,只有他可以修改订单上的某些东西,如价格,数量等。将订单外包给的用户可以查看一些订单信息,并可以更新订单上的特定属性,如标记为已完成。一个外包订单应该显示在两个用户的"订单索引"上。

所有用户都是"平等的",这意味着在某些订单中,用户可能是所有者,而在其他订单中,他可能履行订单。用户也可以完成自己的订单。

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

处理订单/用户关系的最简单方法是什么?我想避免使用完整的权限系统,是否有一种方法可以简单地处理这个"外包"表?在订单表上添加user_id和outsourced_to字段怎么样?

感谢您的输入!

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

看起来您的Orders表与Users表有两个独立的关系。订单与Users有一个owned/owned-by关系。

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

一个用户可以拥有多个订单。一个订单只属于一个用户

在订单和用户之间有一个完全独立的外包关系。

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

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

最好的表示方式是让Orders表在Users表中有一个'owner'外键列,在Users表中也有一个'outsourced_to'外键列。

外包用户可以编辑的Orders列将由代码控制,而不是由dB控制。

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

如何在订单表上有一个user_id和outsourced_to字段?

听起来不错。

另外,考虑一种反规范化,比如移动字段,它可以由"outsorded -to"用户编辑到单独的表中。