Правильный способ планирования моей базы данных - PullRequest
1 голос
/ 06 декабря 2011

Я создаю сайт обмена музыкой, чтобы каждый пользователь мог настроить свою учетную запись, добавлять песни и т. Д.

Я хотел бы добавить возможность пользователям давать очки друг другу в зависимости от того, нравится ли им песня.

Например, user1 имеет несколько песен в своей коллекции, user2 любит песню, поэтому он нажимает кнопку «Мне нравится», в результате чего пользователь получает точку1.

Теперь я хотел бы знать, является ли моя идея создания «таблицы баллов» в моей базе данных несколько правильной и правильной.

Я решил создать отдельную таблицу для хранения данных о точках, в этой таблице будет столбец идентификатора, который указывает точку для кого, столбец идентификатора песни, столбец даты и т. Д. Меня беспокоит то, что в моей таблице будет строка за каждую точку, которая была дана.

Конечно, приятно иметь всю эту конкретную информацию, но я не уверен, что это правильный путь, или, возможно, я трачу ресурсы, пространство ... и так далее.

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

Мне нужен какой-то совет по этому поводу, возможно, мне не стоит беспокоиться о моем дизайне, оптимизации и масштабируемости, поскольку современные технологии настолько быстры и мощны, а запросы к базе данных выполняются мгновенно ..

Ответы [ 2 ]

3 голосов
/ 06 декабря 2011

IMO, лучше использовать транзакционную таблицу для отслеживания баллов, начисляемых пользователю на основе их списков песен. Подумайте, как работает Stackoverflow (SO), если вы проголосуете с вопросом или решением, вы можете отозвать свой голос позднее, если SO использует столбец суммирования, поддержка такого типа функциональности будет невозможна.

Я бы не стал слишком беспокоиться о количестве строк в вашей таблице точек, так как она, вероятно, будет довольно узкой; Максимум 10 колонок. Не говоря уже о том, что таблица будет сводной таблицей между пользователями, поэтому будет состоять в основном из значений int.

1 голос
/ 06 декабря 2011

Часть вопроса действительно проста.Если вам нужно узнать

  • , кто дал
  • , кому
  • , для какой песни
  • в какую дату

тогда вам нужно записать всю эту информацию.

Разве это не просто?

Если вы только нужно знать итоги, тогда вы можете просто хранить итоги.

Что касается масштаба, скажем, у вас есть 20 000 пользователей, каждый из которых в среднем 200 песен.Скажем, 1 из 10 получает любые голоса, в среднем 30 за песню.Это 4 миллиона пользовательских песен;400 000, которые набирают голоса, по 30 на песню, у вас 12 миллионов строк.Это не так много.Если в таблице слишком много строк, разбиение на «кому» ускорит процесс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...