Должен ли я вставить и удалить запись ИЛИ вставить и обновить запись для кнопки 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]