Я довольно новичок в работе с реляционными базами данных, но прочитал несколько книг и знаю основы хорошего дизайна.
Я сталкиваюсь с дизайнерским решением и не знаю, какПродолжить.Вот очень упрощенная версия того, что я строю: люди могут оценивать фотографии 1-5, и мне нужно отображать среднее количество голосов на картинке, отслеживая отдельные голоса.Например, 12 человек проголосовали за 1, 7 человек проголосовали за 2 и т. Д. И т. Д.
Урод с моей нормализацией изначально разработал структуру таблицы следующим образом:
Table pictures
id* | picture | userID |
Table ratings
id* | pictureID | userID | rating
Со всем внешним ключомограничения и все, как они должны быть.Каждый раз, когда кто-то оценивает фотографию, я просто вставляю новую запись в рейтинги и с этим покончено.
Чтобы узнать среднюю оценку фотографии, я просто запускаю что-то вроде этого:
SELECT AVG(rating) FROM ratings WHERE pictureID = '5' GROUP by pictureID
Если он настроен таким образом, я получаю статистику.Я легко могу найти, кто оценил определенную картинку на 3, а что нет.
Теперь я думаю, что если есть дерьмовый рейтинг (что очень возможно в том, что я на самом деле проектирую), то найти среднее значение будет очень дорого и мучительно.
Использование неНормализованная версия представляется более эффективной.Например:
Table picture
id | picture | userID | ratingOne | ratingTwo | ratingThree | ratingFour | ratingFive
Чтобы вычислить среднее значение, мне просто нужно выбрать одну строку.Это кажется намного более эффективным, но намного более уродливым.
Может ли кто-то указать мне правильное направление, что делать?Мои первые исследования показывают, что я должен «найти правильный баланс», но как мне найти этот баланс?Любые статьи или дополнительная информация для чтения также приветствуются.
Спасибо.