我正在创建一个数据库来管理公司及其产品(类别)和客户。我设计了我的数据库,但我想确定我的表是否违反了数据库模式的规则。
users table and product table
被链接多对多(有一个支点product_user
)。
在那个例子中,
用户1可以输入名为硬件的产品
所以在数据透视表中,product_id : 1 & user_id : 1
用户2还可以输入名为硬件的相同产品
所以在数据透视表中,product_id : 2 & user_id : 2
这是一个很好的方法吗?我现在是laravel的新手。请帮忙。谢谢
答案 0 :(得分:1)
是的,这是一个好方法,但我建议您使用“公司”而不是“用户”。这样,每个人都可以清楚地命名。
您可能想要阅读the official documentation关系。这些例子也非常有用且易于理解。
答案 1 :(得分:0)
除了这不是PHP,也不是Laravael或MySQL(作为产品)这个问题,真正的问题是这个多对多关系应该代表什么?
这是关于通用数据库架构设计的全部内容。我们无法告诉您这是对还是错,因为我们不知道它的意义。
如果您可以构建像"用户拥有零,一个或多个产品" 这样的句子,同时" A产品是使用/属于零,一个或多个用户" ,这是一个很好的指标,需要多对多关系。
但是可能存在例外情况,即多对多关系不仅仅是一个链接表。因为如果用户购买的产品比这更有可能更复杂。
e.g。在网上商店,用户可以进行一次或多次购买,但一次购买仅属于一个用户。购买确实包括一个或多个产品,而产品可以是一个或多个购买的一部分。而且还有计费和运输以及涉及的所有内容。在这种情况下,您可以在用户和产品之间建立直接关系,但它告诉您什么剂量?如果用户多次购买产品会怎样?
在某些情况下,您可以认为多对多是一个好主意,但事实上并非如此(见上文),因为您创建了冗余数据和/或破坏了数据完整性。避免这种情况的过程称为规范化:https://en.wikipedia.org/wiki/Database_normalization
多对多关系的一个很好的例子是User
和Privileges
。
有用户并且有用户可以拥有的权限。因此,用户可以拥有零个,一个或多个权限,并且可以将一个权限应用于零个,一个或多个用户。
因此,如果你问product_user
是否是一个好方法,真正的答案是:取决于!