【问题标题】:Many to Many Relationship between users and products - Laravel用户和产品之间的多对多关系 - Laravel
【发布时间】:2017-10-10 02:45:04
【问题描述】:

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

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

在那种情况下,

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

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

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

【问题讨论】:

    标签: php mysql laravel


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      这都是关于一般数据库架构设计的。我们无法告诉您这是对还是错,因为我们不知道它的含义。

      如果你可以构建像 “A User has/have zero,ore or more Products”这样的句子,同时 “A Product is used by/belong to zero, one或更多用户” 表明需要多对多关系。

      但也有例外,多对多关系不仅仅是一个链接表。因为如果用户购买了比这更复杂的产品。

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-24
        • 2023-03-31
        • 2012-04-26
        • 2020-02-18
        相关资源
        最近更新 更多