我有一个使用REST API的应用程序。其余的api从具有两个表A和B的SQL数据库中获取数据。表B具有表A的外键。
我想要的是来自应用程序:获取某些B,并获得A的所有相关记录;那些B有外国钥匙的人。
目前,我制作了一个API来检索那些特定的B。但它只返回Bs。我打算:
从REST的角度来看似乎没问题。但我想知道,只做一次休息api调用会更好,这会取得所有的B,还有那些相关的As?我想这需要在SQL表上做一些INNER JOIN?
此外,从REST的角度来看,第二个选项似乎不太好。因为B没有像A这样的实体。只有As和Bs。我想明确REST api来获取实体。
那么在我的案例中哪一个更好的解决方案呢?我正在使用POSTGRESQL作为我的数据库。如果您需要有关案例的更多信息(例如有多少记录等等......请问,我可以考虑一下)
编辑:
我的两个选项是:
有2个SQL查询:
SELECT * FROM table_B WHERE id = ?
& SELECT * FROM table_A WHERE id IN (id_1, id_2, id_3, ...)
这需要2个API调用,其中第一个将启动第一个sql查询,第二个将启动第二个SQL查询
使用1个SQL查询:
select b.*, a.*
from b join
a
on b.? = a.?
where b.? in (?, ?, ?, . . .);
这只需要1个API调用,1个SQL查询。但是权衡的是,我需要做sql join +它不像RESTfull那样关于资源。
答案 0 :(得分:1)
如果您想从" A"和" B"对于某些" B"记录和它们是相关的,那么典型的解决方案是:
select b.*, a.*
from b join
a
on b.? = a.?
where b.? in (?, ?, ?, . . .);
问号代表您应该输入不在您问题中的信息的地方。
这将返回来自" A"的信息。和" B"在一排。对于大多数应用来说这很好。只需一次数据库调用即可完成。
在某些有限的情况下,进行多次查询可能会更好。请记住,每个查询都有开销 - 这是为什么让数据库完成工作更好的一个原因。但是,如果" B"真的很宽,你可能不想为" A"。
中的每一条记录复制它们