用户和产品之间的多对多关系 - Laravel

时间:2017-10-09 17:09:33

标签: php mysql laravel

我正在创建一个数据库来管理公司及其产品(类别)和客户。我设计了我的数据库,但我想确定我的表是否违反了数据库模式的规则。

users table and product table被链接多对多(有一个支点product_user)。

在那个例子中,

用户1可以输入名为硬件的产品  所以在数据透视表中,product_id : 1 & user_id : 1

用户2还可以输入名为硬件的相同产品  所以在数据透视表中,product_id : 2 & user_id : 2

这是一个很好的方法吗?我现在是laravel的新手。请帮忙。谢谢

2 个答案:

答案 0 :(得分:1)

是的,这是一个好方法,但我建议您使用“公司”而不是“用户”。这样,每个人都可以清楚地命名。

您可能想要阅读the official documentation关系。这些例子也非常有用且易于理解。

答案 1 :(得分:0)

除了这不是PHP,也不是Laravael或MySQL(作为产品)这个问题,真正的问题是这个多对多关系应该代表什么?

这是关于通用数据库架构设计的全部内容。我们无法告诉您这是对还是错,因为我们不知道它的意义。

如果您可以构建像"用户拥有零,一个或多个产品" 这样的句子,同时" A产品是使用/属于零,一个或多个用户" ,这是一个很好的指标,需要多对多关系。

但是可能存在例外情况,即多对多关系不仅仅是一个链接表。因为如果用户购买的产品比这更有可能更复杂。

e.g。在网上商店,用户可以进行一次或多次购买,但一次购买仅属于一个用户。购买确实包括一个或多个产品,而产品可以是一个或多个购买的一部分。而且还有计费和运输以及涉及的所有内容。在这种情况下,您可以在用户和产品之间建立直接关系,但它告诉您什么剂量?如果用户多次购买产品会怎样?

在某些情况下,您可以认为多对多是一个好主意,但事实上并非如此(见上文),因为您创建了冗余数据和/或破坏了数据完整性。避免这种情况的过程称为规范化:https://en.wikipedia.org/wiki/Database_normalization

多对多关系的一个很好的例子是UserPrivileges。 有用户并且有用户可以拥有的权限。因此,用户可以拥有零个,一个或多个权限,并且可以将一个权限应用于零个,一个或多个用户。

因此,如果你问product_user是否是一个好方法,真正的答案是:取决于