我想听听您对选择 JSON 或数据透视表的困境的专家意见
假设我们这里有 2 张桌子
一个人可能有多个工作,唉,一个工作可能有多个人订阅。 最好的方法是什么?
方法一: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,因为选择它没有任何好处,你会牺牲很多数据库功能,并使查询数据变得困难和缓慢。
如果还包含其他变量(例如附加枢轴)怎么办 列(也许每个数据透视表还包含可以设置的状态列 到当前或过去的工作)
Job 和 Person 并不相互依赖,所以你需要在它们之间创建一个类似“PersonJob”的关联表,并向其中添加必要的信息,这在 Laravel 中很容易遍历。
或者如果将来我们希望能够让所有的人 有特定的工作,在这种情况下我认为 Pivot 会更好。
您可以使用关联表轻松查询。
也许基本原则是,每个人的 优点/缺点?
只是关系数据库就是为这种东西而生的,而 JSON 没有提供任何价值,只是带来困难。
想象一个总是需要用记录来获取的数组,然后创建一个新表是不合逻辑的,但它更加结构化。
在某种程度上,我同意@Diyas`的答案,但我对此表示怀疑,因为当存在一些功能,那么在某些情况下它应该是有益的。