Сохранить список идентификаторов пользователей в таблицу MySQL - PullRequest
2 голосов
/ 20 марта 2009

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

  1. Решение KISS - 1 таблица с первичным ключом, идентификатором песни и текстовым полем для каждого из трех описанных выше взаимодействий (просмотр, загрузка, потоковая передача), в которых будет разделенный запятыми список идентификаторов пользователей. Добавление к нему будет простой операцией конкатенации.

  2. Лучшее практическое решение - иметь 3 таблицы с первичным ключом, идентификатором песни и полем идентификатора пользователя, который выполнял взаимодействие. Каждая строка имеет один идентификатор пользователя, и я мог бы добавить такие вещи, как дата и другие вещи.

Одна вещь, которая заставляет меня склоняться к варианту 2, заключается в том, что может быть проще проверить, голосовал ли уже пользователь за песню?


tl; dr version - лучше ли использовать текстовое поле для сохранения массивов в виде значений, разделенных запятыми, или иметь каждый элемент в массиве в отдельной строке таблицы.

Ответы [ 2 ]

6 голосов
/ 20 марта 2009

Определенно 2-й:

  • Вы сможете масштабировать свое приложение по мере его роста
  • Будет меньше зависеть от языка программирования
  • Вы сможете выполнять запросы быстрее и чище
  • Это будет менее болезненным для любого другого программиста, кодирующего / отлаживающего ваше приложение позже

Кроме того, я бы добавил новую таблицу, называемую «операции», с их идентификатором, чтобы при необходимости вы могли добавлять различные операции, сохраняя идентификатор операции вместо строки в каждой строке («просмотр», «загрузка» "поток").

2 голосов
/ 20 марта 2009

Определенно лучше иметь каждый элемент в отдельном ряду. Манипулирование текстовыми полями само по себе имеет недостатки в производительности. Но если вы когда-нибудь захотите узнать, какие песни пользователь 1234 просматривал / слушал / и т.д.

SELECT * FROM songactions WHERE userlist LIKE '%,1234,%' OR userlist LIKE '1234,%' OR userlist LIKE '%,1234' OR userlist='1234';

Это было бы ужасно, ужасно больно.

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