一张主表,多张关联表,查询逻辑写在 sql 中好,还是业务代码中好?

2022-03-15 11:15:00 +08:00
 shadow1949

例如现在有表 a ,和多张关联表 a1,a2,a3……然后之间关系可能是 1:1,1:n,n:n 。 这种情况要查询 List<A>,然后 A 里面有多个关联表的对象,这种情况大家一般直接写在 mapper 中多表关联,还是写在业务代码中?

个人以为: sql 中:只查一次,不用匹配字段,组装;但是不好维护; 业务代码中:逻辑清晰,便于维护;但是不好组装

大家怎么看这个问题……

2733 次点击
所在节点    数据库
23 条回复
yibo2018
2022-03-16 10:25:55 +08:00
@gam2046 你好,我看到你说一言不合就笛卡尔积,就去查了一些资料,只有一种情况会产生:join (没有 on)的情况下,我说的对吗
gadfly3173
2022-03-16 12:51:18 +08:00
mybatis 的 collection 和 association 这样的延迟查询感觉还是挺适合的,不会有很大的性能压力。
gam2046
2022-03-16 15:25:41 +08:00
@yibo2018 唔 我的意思是,我的小伙伴在业务逻辑中自己组装数据的时候,很容易出现笛卡尔乘积。就是有一些小伙伴的业务能力相对欠缺,因此还不如直接把这些任务丢给数据库,至少数据库的下限高于许多开发人员。

至于数据库上的笛卡尔乘积,除了 inner join 以外,在多表查询或者嵌套了子查询的情况下,也容易出现。但是数据库上的问题相对好解决(即数据是通过视图返回的,即使存在问题后修改,保证字段一致,不需要修改程序),同时存在 explain 方便排查。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/840423

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX