Laravel 多对多关系:Pivot VS JSON

问题描述 投票:0回答:2

我想听听您对选择 JSON 或数据透视表的困境的专家意见

假设我们这里有 2 张桌子

  1. 工作

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

方法一:JSON

我会在

jobs
表中有
people
列,其中包含该人的职位ID的json数组,例如:
[1,2,4]

方法2:旋转

我会用

job_person
job_id
列创建数据透视表
person_id
,嗯,你知道 Laravel Eloquent 风格的多对多数据透视表

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

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

如果还包含其他变量(例如附加数据透视列)怎么办 (也许每个枢轴还包含

status
列,可以设置为
active
past_job

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

如果另一个表不是

jobs
,而是
books
,并且一个人可以拥有大量
books
,那么我们可能会为一个人拥有数十甚至数百条主元记录?而且还会有另外一百人?

如果另一个表不是

books
,而是
stocks
,在这种情况下,一个人可能会多次订阅/取消订阅多个股票?

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

非常感谢

json database laravel database-design relationship
2个回答
0
投票

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

如果还包含其他变量(例如附加枢轴)怎么办 列(也许每个数据透视表还包含可以设置的状态列 到当前或过去的工作)

Job 和 Person 并不相互依赖,所以你需要在它们之间创建一个类似“PersonJob”的关联表,并向其中添加必要的信息,这在 Laravel 中很容易遍历。

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

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

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

只是关系数据库就是为这种东西而生的,而 JSON 没有提供任何价值,只是带来困难。


0
投票

想象一个总是需要用记录来获取的数组,然后创建一个新表是不合逻辑的,但它更加结构化。

在某种程度上,我同意@Diyas`的答案,但我对此表示怀疑,因为当存在一些功能,那么在某些情况下它应该是有益的。

© www.soinside.com 2019 - 2024. All rights reserved.