Как я моделирую оценки продукции в базе данных?

Что лучший подход к хранению оценок продукции в базе данных? Я имею в виду следующие два (упрощенный, и принятие дб MySQL) сценарии:

Создайте два столбца в таблице продуктов для хранения числа и суммы всех голосов соответственно. Используйте столбцы для получения среднего числа во время выполнения или использование запроса.

Этот подход означает, что я только должен получить доступ к одной таблице, упростив вещи.

Нормализуйте данные путем составления дополнительной таблицы для хранения оценок.

Это изолирует данные оценок в отдельную таблицу, оставляя таблицу продуктов для предоставления данных по доступным продуктам. Хотя это потребовало бы соединения или отдельного запроса для оценок.

Какой подход является лучшим, нормализован или денормализованным?

19
задан Mohamad 17 November 2013 в 13:14
поделиться

2 ответа

Настоятельно рекомендуется использовать разные таблицы для рейтингов, чтобы все было динамично. Не беспокойтесь о сотнях (или тысячах, или десятках тысяч) записей, это все арахис для баз данных.

Предложение:

table products
- id
- , имя
-

таблица products_ratings
- id
- productId
- рейтинг
- дата (если необходимо)
- ip (если необходимо, например, для предотвращения двойного рейтинга)
-

Получить все оценки для продукта 1234:

SELECT pr.rating
FROM products_ratings pr
INNER JOIN products p
  ON pr.productId = p.id
  AND p.id = 1234

Средняя оценка для продукта 1234:

SELECT AVG(pr.rating) AS rating_average -- or ROUND(AVG(pr.rating))
FROM products_ratings pr
INNER JOIN products p
  ON pr.productId = p.id
  AND p.id = 1234";

И так же легко получить список продуктов вместе с их средней оценкой:

SELECT
  p.id, p.name, p.etc,
  AVG(pr.rating) AS rating_average
FROM products p
INNER JOIN products_ratings pr
  ON pr.productId = p.id
WHERE p.id > 10 AND p.id < 20 -- or whatever
33
ответ дан 30 November 2019 в 03:48
поделиться

Я знаю, что мой ответ - это не то, о чем вы на самом деле просите, но вы, возможно, захотите иметь возможность облегчить эти новые продукты с помощью вашей системы, которые почти никогда не смогут превзойти старые продукты. Скажем, вы получите товар с рейтингом 99%. Новым продуктам будет очень сложно получить высокий рейтинг, если вы отсортируете их по продуктам с наивысшим рейтингом.

1
ответ дан 30 November 2019 в 03:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: