【问题标题】:What is the way for a has many relationship in MySQL?MySQL中有很多关系的方式是什么?
【发布时间】:2020-05-03 16:44:37
【问题描述】:

我有一个数据库表“books”和一个表“reviews”。一本书可以包含许多评论(一对多)。我希望在嵌套的多维数组中返回数据,但是我通过 JOIN 查询返回了所有不同的行。这不是性能和带宽效率低下吗?服务器(NodeJS)需要下载大量重复数据。有没有另一种方法可以在 MySQL 中构建一个 hasmany 关系,而无需下载重复数据?或者我需要切换到 PostgreSQL 吗?

【问题讨论】:

  • 向我们展示一些示例表数据和预期结果。 (作为格式化文本,而不是图像。)还可以查看minimal reproducible example
  • 我理解您所说的效率低下。但是,您可以在 RDBMS(本地或非常接近它)之上使用简单的持久层来执行 JSON 呈现、压缩等以节省带宽。

标签: mysql sql database database-relations


【解决方案1】:

如果您不希望 books 表中的值重复,请运行两个查询:

SELECT ... FROM books WHERE id = ?;

然后单独查询:

SELECT ... FROM reviews WHERE book_id = ?;

并非每个操作都必须在单个 SQL 查询中完成!

【讨论】:

  • 有没有办法将这些查询合并到一个查询中?否则我需要初始化连接两次,这对性能来说是低效的。
  • 你不需要这样做。您可以使用单个连接运行多个 SQL 查询。
  • 您可以运行联合查询以在一个查询中获取两者。但我同意@bill karwin
  • @DanieldeVogel 不要陷入过早优化的陷阱。普遍的共识是在必要时担心它。
  • 正如比尔指出的那样,您不需要为每个查询打开一个新连接;这实际上在性能方面通常是一个坏主意,因为打开连接通常需要比执行查询更长的时间。 (通常*取决于使用的 api,许多支持“连接池”,在这种情况下,您通常会重用以前的连接)。 如果您想限制连接,请连接,完成所有工作,然后在完成后断开连接;这种用法的暗示是连接通常被称为“会话”。
猜你喜欢
  • 2013-09-15
  • 1970-01-01
  • 1970-01-01
  • 2021-12-26
  • 2016-10-12
  • 1970-01-01
  • 1970-01-01
  • 2015-09-16
  • 1970-01-01
相关资源
最近更新 更多