PostgreSQL — предложения по созданию более интеллектуальных запросов?

#sql #postgresql #express #knex.js

#sql #postgresql #экспресс #knex.js

Вопрос:

Я новичок в разработке серверной части и создаю небольшое приложение для социальных сетей, и я пытаюсь понять, как создавать более разумные запросы для моих Postgres. Я использую Express и Knex.

Предположим, у меня есть три таблицы: users , posts и likes . В likes таблице будут столбцы для user_id и post_id , которые ссылаются users posts на таблицы и соответственно.

Когда я запускаю свое приложение, я сначала запрашиваю сообщения в базе данных и получаю свой список сообщений. Для каждого сообщения мне нужно будет запрашивать likes таблицу, используя post_id, чтобы узнать, есть ли у нее лайки, и если да, я получу like_id и user_id . Теперь, предположим, мне нужен полный объект user, теперь мне нужно запросить таблицу users с помощью user_id, чтобы захватить объект user.

Мой вопрос в том, есть ли более разумный / правильный способ выполнения таких последовательных запросов, когда вы запрашиваете у одной таблицы идентификатор, чтобы вы могли использовать его для запроса другой таблицы для получения другого идентификатора и так далее? Я чувствую, что делаю это совершенно неэффективно, но, может быть, так оно и есть?

Вот мой запрос на получение сообщений, если это поможет:

 // server.js
app.get('/api/posts/get', (req, res) => posts.getPostData(req, res, db));

// imported get function
export const getPostData = (req, res, db) => {
  db.select('*')
    .from('posts')
    .then(items => {
      if (items.length) {
        res.json(items);
      } else {
        res.json({ dataExists: 'false' });
      }
    })
    .catch(err => {
      res.status(400).json({ dbError: err });
    });
};
  

Комментарии:

1. Да; ключевое слово, которое вы ищете, — join . Даже если вы используете ORM, важно понимать SQL.

2. @LaurenzAlbe Спасибо Laurenz. Я очень новичок в SQL и только учусь писать запросы. Сейчас я прохожу связанный учебный курс по PostgreSQL.

3. Я понимаю, и я думаю, что ваш вопрос хорош, и ваше ощущение, что это можно сделать лучше, вас не обманывает. Я просто не могу ответить на вопрос, поскольку не знаю Express и Knex.