У меня есть таблица, которая состоит из столбцов для пользователей, категорий и количества. Пользователь может купить количество продуктов из каждой категории. Я хочу хранить только самую последнюю покупку.
User Category Amount
1 100 15
1 103 25
Представьте себе, что этот пользователь только что купил 30 штук из 100 или из 110. Либо дополнительная категория, либо новая категория. Это может быть обработано с использованием следующего псевдокода:
SELECT amount FROM table WHERE user=1 AND category=100
if row exists
UPDATE table SET amount=30 WHERE user=1 AND category=100
else
INSERT INTO table (user, category, amount) VALUES(1, 100, 30)
Другой способ сделать это, просто всегда удаляя старое значение (игнорируя сообщение об ошибке, когда его не существует (и всегда вставляя новое.
DELETE FROM table WHERE user=1 AND category=100
INSERT INTO table VALUES(1, 100, 30)
Какой из этих шаблонов предпочтителен с точки зрения производительности? Имеет ли значение, какие существуют PK и FK?