Должен ли я вставить и удалить запись ИЛИ вставить и обновить запись для кнопки LIKE/UNLIKE? Какой из них является более экономически эффективным?

В проекте, в котором мне нужно реализовать функциональность, аналогичную / отличающуюся от других, я хочу знать, какой подход был бы лучше других с точки зрения производительности. Если мне нужно будет вставить insert delete, то что произойдет, если кому-то будет нравиться / не нравиться это много раз (тогда, вероятно, большинство чисел первичного ключа будут заняты на основе Like / Different)?
Кто-нибудь знает, как это делают сайты социальных сетей?

РЕДАКТИРОВАТЬ:
Моя таблица как ниже:

CREATE TABLE `junc_user_share_like` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `jusid` int(10) unsigned NOT NULL,
 `liker` mediumint(8) unsigned NOT NULL,
 `when` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 PRIMARY KEY (`id`),
 UNIQUE KEY `jusid` (`jusid`,`liker`),
 KEY `liker` (`liker`),
 CONSTRAINT `junc_user_share_like_ibfk_1` FOREIGN KEY (`liker`) REFERENCES `user` (`uid`) ON DELETE CASCADE ON UPDATE CASCADE,
 CONSTRAINT `junc_user_share_like_ibfk_2` FOREIGN KEY (`jusid`) REFERENCES `junc_user_share` (`jusid`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB

РЕДАКТИРОВАТЬ 2:
Как вы сказали с последними обновлениями, это то, что я сделал вывод:

INSERT INTO likes SET jusid=$jusid, liker=$liker
UPDATE junc_user_share SET likes=likes+1 WHERE id=$id

Это прекрасно работает для лайков, но что если кто-то захочет отменить его лайк? Должен ли я удалить запись из лайков? Моя проблема именно здесь? Что тут делать?

1 ответ

Решение

Денормализовать.

  • есть таблица с симпатиями и антипатиями (кто что сделал с каким предметом)
  • иметь likes и unlikes поле в таблице предметов, оба начинаются с 0

По принципу "нравится / не нравится" (при условии, что 1= нравится, 0= не похоже)

INSERT INTO likes_unlikes SET item=[id of item], user=[id of user], action=[0|1];
UPDATE items SET likes=IF([action]=1,likes+1,likes), unlikes=IF([action]=0,unlikes+1,unlikes) WHERE id=[id of item]

UNIQUE KEY на likes_unlikes(item,user) дает вам уникальность в подарок.

редактировать

После обсуждения, если у вас просто есть симпатии, но нет антипатий, ситуация еще проще:

  • только likes таблица необходима с элементом и идентификатором пользователя
  • только likes поле обязательно для заполнения на таблице предметов

запросы теперь что-то вроде

INSERT INTO likes SET item=[id of item], user=[id of user];
UPDATE items SET likes=likes+1 WHERE id=[id of item]

и для обращения подобного:

DELETE FROM likes WHERE item=[id of item] AND user=[id of user];
UPDATE items SET likes=likes-1 WHERE id=[id of item]
Другие вопросы по тегам