SQL - получение связанных записей отдельно от одного соединения - PullRequest
0 голосов
/ 03 июня 2018

У меня есть приложение, которое использует REST API.Этот оставшийся API извлекает данные из базы данных SQL с двумя таблицами A и B. Таблица B имеет внешний ключ к таблице A.

Что я хочу получить от приложения: получить определенные B, а также получить все связанныезаписи A;те, к которым B имеет внешний ключ.

В настоящее время я создал API для извлечения этих определенных B.Но это только возвращает Bs.Я планировал:

  1. Из приложения извлечь определенные B, а после этого сделать второй вызов API api отдыха, чтобы получить все связанные как.Затем мне нужно сопоставить эти Bs с As в приложении.

С точки зрения REST, который кажется нормальным.Но мне было интересно, что было бы лучше просто сделать один вызов API отдыха, который будет вызывать все B, и вместе с ними также связанные как?Я полагаю, что для этого потребуется выполнить ВНУТРЕННИЕ СОЕДИНЕНИЯ для таблицы SQL?

Кроме того, этот второй вариант не выглядит таким хорошим с точки зрения REST.Потому что нет такой сущности, как B с A. Есть только As и B.И я хочу прояснить REST API для извлечения сущностей.

Итак, какое из них будет лучшим решением в моем случае?Я использую POSTGRESQL в качестве базы данных.Если вам нужна дополнительная информация о деле (например, сколько записей и т. Д. Просто спросите, я могу подумать о них)

РЕДАКТИРОВАТЬ:

Мои 2 варианта:

  1. С 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

  2. С 1 запросом SQL: select b.*, a.* from b join a on b.? = a.? where b.? in (?, ?, ?, . . .); Для этого потребуется только 1 вызов API, 1 запрос SQL.Но компромисс в том, что мне нужно сделать sql join + это не так RESTfull в отношении ресурсов.

1 Ответ

0 голосов
/ 03 июня 2018

Если вы хотите получить информацию из «A» и «B» для определенных записей «B» и они связаны, то типичное решение будет следующим:

select b.*, a.*
from b join
     a
     on b.? = a.?
where b.? in (?, ?, ?, . . .);

Знаки вопроса представляют местагде вы должны указать информацию, которой нет в вашем вопросе.

Возвращает информацию из «A» и «B» в одну строку.Для большинства приложений это хорошо.И это происходит только с одним вызовом базы данных.

В некоторых ограниченных случаях может быть лучше выполнить несколько запросов.Помните, что для каждого запроса есть накладные расходы - одна из причин, почему лучше позволить базе данных выполнять свою работу.Но если столбцы в «B» действительно широкие, возможно, вы не захотите дублировать их для каждой записи в «A».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...