将连接多个表的 SQL 查询放在哪里?

Where to put SQL queries that join on multiple tables?

我正在使用 MVC 框架,并且有一个 photo SQL table 和一个 album SQL table。 photo table 的查询进入 photoTableModel class,album table 的查询进入 albumTableModel class.

在哪里放置同时使用 table 的查询?

例如,以下查询同时使用了 table。我是将查询放在 photoTableModelalbumTableModel、一个新的 table 模型中,还是放在一个服务中?

SELECT `photo`.`id`
     , `photo`.`name`
  FROM `photo`
  JOIN `album`
    ON `album`.`album_id` = `photo`.`album_id`
   AND `album`.`album_id` = 1
     ;

体系结构的中心是模型,而不是表格。从语义上讲,这里描述或操作的是哪个模型?

似乎正在检索照片列表,其中一些相册信息包含在该列表的元素中。所以我怀疑这与Photo逻辑模型有关。所以无论你把它放在你的架构和框架中的什么地方,它都应该在语义上与那个模型相关。

你的框架如何定义事物取决于那个框架,所以我真的不能更具体了。不同的框架以不同的方式做不同的事情。然而,一般来说,在 MVC 模式中,您希望围绕模型构建逻辑和体系结构。你从这个查询中得到的是一个照片列表(有一些额外的信息),所以它与照片模型有关。

模型可以是表的直接一对一表示。但他们不需要。看起来你人为地限制你的模型就是这样,这导致了这个问题。也许您扩展了 Photo 模型概念以包含专辑信息?也许您创建了一个混合了两者的 DTO?也许您将 Album 属性 添加到您的 Photo 模型?组织模型的方法有很多。关键是要保持这些模型的 语义 清晰。模型表示 领域概念 (如 Photo),而不是数据库表(如 photoTableModel)。数据库表只是保存模型信息,以便稍后重新构建。因此,数据库是域的 edge 关注点,而不是 central 关注点。