首页 > 解决方案 > Laravel 多对多关系:Pivot VS JSON

问题描述

我想就在 JSON 或数据透视表之间选择这种困境获得您的专家意见

假设我们这里有 2 张桌子

  1. 人们
  2. 工作

一个人可能有多个工作,唉,一个工作可能有多个人订阅它。最好的方法是什么?

方法一:JSON

我将jobs在表中有列people,其中包含该人的工作 ID 的 json 数组,例如:[1,2,4]

方法2:枢轴

我会job_personjob_idperson_id列创建数据透视表,好吧,你知道 Laravel Eloquent 风格的多对多数据透视表

我做了一些搜索,我发现文章支持每种方法,有人说 JSON 更好,因为它更简单,其他人会说 Pivot 更好,因为关系数据库应该是这样工作的,等等。

但我想知道,在什么情况下我应该使用哪一个?就像上面的场景一样简单,JSON会更好吗?

如果包含其他变量,例如附加数据透视列怎么办(也许每个数据透视还包含status可以设置为active或的列past_job

或者,如果将来我们希望能够让所有有特定工作的人,在这种情况下,我认为 Pivot 会更可取。

如果不是jobs,另一个表将是books并且一个人可以进行广泛的books制作,我们可能只为一个人拥有数十甚至数百个数据透视记录?而且还会有一百个人?

如果不是books,另一个表是stocks在这种情况下,一个人可能多次订阅/取消订阅多个股票怎么办?

也许对于基本原则,每个人的优点/缺点是什么?

非常感谢

标签: jsondatabaselaraveldatabase-designrelationship

解决方案


我宁愿不选择 JSON,因为选择它没有任何好处,您将牺牲许多数据库功能并使查询数据变得困难和缓慢。

如果包含其他变量,例如额外的数据透视列怎么办(也许每个数据透视还包含可以设置为活动或过去作业的状态列)

Job 和 Person 不相互依赖,因此您需要在它们之间创建一个关联表,例如“ PersonJob ”并为其添加必要的信息,这在 Laravel 中很容易遍历。

或者,如果将来我们希望能够让所有有特定工作的人,在这种情况下,我认为 Pivot 会更可取。

您可以使用关联表轻松查询。

也许对于基本原则,每个人的优点/缺点是什么?

只是关系数据库是为这类东西制作的,而 JSON 没有任何价值,只是困难。


推荐阅读