Просто после некоторых мнений о наилучшем способе достижения следующего результата:
Я хотел бы сохранить в своей базе данных MySQL продукты, за которые могут голосовать пользователи (каждый голос стоит + 1). Я также хочу увидеть, сколько раз в общей сложности проголосовал пользователь.
На мой взгляд, следующая структура таблицы была бы идеальной:
table: product table: user table: user_product_vote
+----+-------------+ +----+-------------+ +----+------------+---------+
| id | product | | id | username | | id | product_id | user_id |
+----+-------------+ +----+-------------+ +----+------------+---------+
| 1 | bananas | | 1 | matthew | | 1 | 1 | 2 |
| 2 | apples | | 2 | mark | | 2 | 2 | 2 |
| .. | .. | | .. | .. | | .. | .. | .. |
Таким образом, я могу сделать СЧЕТ таблицы user_product_vote для каждого продукта или пользователя.
Например, когда я хочу посмотреть бананы и количество голосов, которые нужно показать на веб-странице, я мог бы выполнить следующий запрос:
SELECT p.product AS product, COUNT( v.id ) as votes
FROM product p
LEFT JOIN user_product_vote v ON p.id = v.product_id
WHERE p.id =1
Если бы мой сайт стал чрезвычайно успешным (мы все можем мечтать), и у меня было тысячи пользователей, голосующих за тысячи продуктов, я боюсь, что выполнение такого СЧЕТА при каждом просмотре страницы было бы крайне неэффективным с точки зрения ресурсов сервера.
Более простой подход состоял бы в том, чтобы в таблице продуктов имелся столбец «голоса», увеличивается каждый раз, когда добавляется голос.
table: product
+----+-------------+-------+
| id | product | votes |
+----+-------------+-------+
| 1 | bananas | 2 |
| 2 | apples | 5 |
| .. | .. | .. |
Хотя это более благоприятно для ресурсов - я теряю данные (например, я больше не могу препятствовать тому, чтобы человек голосовал дважды, поскольку нет записи об его активности голосования).
Мой вопросы:
я) я чрезмерно беспокоюсь о ресурсах сервера и должен просто придерживаться трех таблиц вариант? (т.е. мне нужно больше верить в способность базы данных обрабатывать большие запросы)
ii) это более эффективный способ достижения результата без потери информации