2009-03-20 3 views
2

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

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

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

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


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

ответ

6

Определенно второй:

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

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

+0

Я всегда удивляюсь, как быстро я получаю хороший ответ ... Большое вам спасибо, я, вероятно, сделаю это. Предлагаете ли вы использовать хранимую процедуру для обработки всех накладных расходов таблицы операций или сделать это в коде? – Mikle

+0

Это более субъективный ответ, я думаю. Мне лично нравятся хранимые процедуры, но они никогда не используют их. Зачем? Потому что мне не нравится кодирование в SQL, вот и все. Но я считаю, что сильная БД должна иметь в себе всю логику, включая внешние ключи, противопоказания и CRUD-логику, когда это возможно. – Seb

+0

Я бы пошел без хранимых процедур. Что делать, если приложение растет, и кто-то решает изменить механизм базы данных. Являются ли хранимые процедуры полностью переносимыми? Кроме того, более читаемо видеть, что происходит внутри метода класса или двух. А также 2: я не встречал никого, кто любит кодирование в SQL. –

2

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

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

Было бы просто ужасно, ужасно больно.

+0

Я на самом деле хотя бы манипулировать этим в коде. Но выбор выглядит немного плохо :) – Mikle

Смежные вопросы