关系表 - 是不是推荐使用 JSON?

Posted

技术标签:

【中文标题】关系表 - 是不是推荐使用 JSON?【英文标题】:Relational table - is JSON recommended?关系表 - 是否推荐使用 JSON? 【发布时间】:2019-03-02 16:25:27 【问题描述】:

试图实现一个关系表,将用户链接到它最喜欢的书。

所以我有一张带有book_iduser_id 的桌子

样本表:

user 1 favourite 1
user 1 favourite 2
user 1 favourite 3

我不能有类似 JSON 数组的东西吗?

user 1 [favourite 1, favourite 2, favourite 3] ?

在性能方面,执行第一个示例还是第二个示例更好?

谢谢!!

【问题讨论】:

嗨。这是一个常见问题解答。请始终在谷歌上搜索您的问题/问题/目标的许多清晰、简洁和特定的版本/措辞,带和不带您的特定字符串/名称,并阅读许多答案。将您发现的相关关键字添加到搜索中。如果您没有找到答案,请发布,使用 1 个变体搜索作为标签的标题和关键字。请参阅向下投票箭头鼠标悬停文本。它不应该被回答,它应该作为副本关闭。 mysql vs. JSON - Why?的可能重复 嗨。这是一个常见问题解答。请始终在谷歌上搜索您的问题/问题/目标的许多清晰、简洁和特定的版本/措辞,带和不带您的特定字符串/名称,并阅读许多答案。将您发现的相关关键字添加到搜索中。如果您没有找到答案,请发布,使用 1 个变体搜索作为标签的标题和关键字。请参阅向下投票箭头鼠标悬停文本。它不应该被回答,它应该作为副本关闭。或者过于宽泛,因为在实践中它取决于许多与混乱相关的细节,而您没有给出它们或“最佳”的定义。 【参考方案1】:

第一个解决方案是联结/关联表,它是基于 SQL 的关系数据库的推荐解决方案。基本上,您有两个实体,书籍和用户。联结表是连接它们的第三个表。

SQL 提供了用于此目的的功能。关系数据库提供了优化性能的机制(通过索引、列存储、水平分区和花哨的算法),即使对于非常大的数据库也能有效地发挥作用。

这是否意味着从不使用 JSON 结构?绝对不。它们有自己的位置——一些数据库甚至为它们提供索引支持。

但是,从数据库的角度来看,JSON 结构为提取值增加了额外的开销。它们还阻碍优化。因此,一行中的这样一个数组并不是数据表示的首选

【讨论】:

该死的......这是一个很好的答案。谢谢!我正在实现关联表,因为我认为它最能达到目的。再次感谢雷纳托【参考方案2】:

对于 SQL 数据库的直接性能,根据 Gordon Linoff 的回答,连接表更好。

如果您正在序列化/反序列化复杂对象,但是将对象作为 JSON 存储在表中的字段中通常会更高效。

我有一个项目,我有一个完全标准化的结构来支持广告时间表。它运行良好,直到一位客户创建了一个包含 40,000 个位置的时间表。保存和加载大型广告时间表的时间与小型时间表相比是几分钟而不是几秒钟。

我更改了结构以将对象存储为 JSON。序列化、保存和反序列化然后加载大型广告计划的时间从几分钟缩短到几秒钟。

【讨论】:

以上是关于关系表 - 是不是推荐使用 JSON?的主要内容,如果未能解决你的问题,请参考以下文章

外部表的雪花外部阶段文件推荐

第六章创建多对多关系的三种方式

在给定场景中,事实表中是不是需要/推荐 Id 列

Clickhouse 表是不是有最大推荐的副本数量?

我们为什么推荐在Json中使用string表示Number属性值?

我们为什么推荐在Json中使用string表示Number属性值?