Как я должен проверить, сохранена ли запись

#sql #postgresql

Вопрос:

Допустим, у меня есть база данных с таблицами пользователей и сообщений

 CREATE TABLE users(  id INT PRIMARY KEY,  username string, )  CREATE TABLE posts(  id INT PRIMARY KEY )  

И я хочу, чтобы у пользователя была возможность сохранить сообщение, поэтому я создал две таблицы

 CREATE TABLE user_saved_posts(  id INT PRIMARY KEY,  user_id INT NOT NULL REFERENCES users(id) )  CREATE TABLE saved_post(  user_saved_post_id INT REFERENCES user_saved_posts(id),  post_id INT REFERENCES posts(id) )  

Что я хочу сделать, так это когда я показываю эти сообщения на интерфейсе, я показываю индикатор пользовательского интерфейса, который показывает, сохранена эта запись или нет

я думал о двух решениях, но не уверен, какое из них лучшее,

  • Первый-сделать это на интерфейсе и сравнить каждый идентификатор записи с сохраненными, SELECT post_id FROM saved_post WHERE user_saved_post_id=$1 но это решение было бы плохим, если у пользователя много сохраненных записей.
  • Второе-это прямая проверка из базы данных
     SELECT p.body,(SELECT (  case when exists  (SELECT post_id FROM WHERE users_saved_posts = $1 AND post_id = p.id)   then true  else false  end ) as is_post_saved) FROM posts p  

Я думаю, что второе решение лучше, надеюсь, у вас есть идеи получше моих, Так что вы думаете?

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

1. Примечание: результатом EXISTS(...) является логическое значение, поэтому вам не нужно CASE ... выражение. Также: create table использует () , не {}

2. Вы должны указать, какую технологию пользовательского интерфейса вы используете. Обычно существуют способы отображения в пользовательском интерфейсе после успешного завершения вашего запроса на сохранение записи в БД. Например, вы получите возвращаемое значение или код ответа после успешного завершения операции с базой данных.

3. @ChinmayT Я уже сделал то, что вы сказали, я показываю индикатор, когда нажимаю кнопку «сохранить сообщение» и проверяю код ответа, я хочу показать индикатор, если сообщение сохранено при повторной загрузке сообщения, я использую react кстати