Задать вопрос
ProgramCodePav
@ProgramCodePav
Front-end developer. Love open source

Какой эффективный способ реализации избранного/корзины пользователя в базе данных?

Существует таблица пользователя, в которой имеется поле favorites. (например, статьи в избранном)
Статьи хранятся условно в таблице articles (id, name, desctiption, date, etc.)

Задача заключается в том, чтобы реализовать индивидуальный список Избранного для пользователя, то есть у каждого пользователя должен быть раздел Избранное, данные которого хранятся в бд. Нужен эффективный способ.

Если вы поняли о чем речь, вам не обязательно читать дальше)

Я привел ниже 3 варианта решения задачи, но они мне не нравятся. Я не ищу обсуждения способов ниже (хотя приветствуется), а, скорее, проверенного best practices (или просто хорошего) Вашего решения проблемы, либо задайте направление для исследования вопроса.

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

Пока имеется 3 способа реализации данной идеи:

1. сделать таблицу favorite, которая будет содержать все необходимые данные Избранного (название, описание, картинка или, условно, просто id нужной записи в таблице articles) + nickname юзера, который ее добавил в избранное. В итоге получается полнейший бардак - в таблице будут все favorite-статьи всех пользователей, а выборка будет производиться (наверняка долгим) парсингом по нику пользователя.

2. таблица user: в поле favorite хранится имя персональной таблицы Избранное для пользователя (рандом, например, 8hafhq2ij). Для получения данных придется получить имя таблицы и потом все ее данные (8hafhq2ij).

3. в таблице user: в поле favorite просто записывать id нужных статей в формате "1 2 18 21 212", а потом просто вытаскивать и в массив закидывать, который можно использовать для получения конкретных статей по их id в таблице articles.

PS: предполагается количество пользователей от 10к с активным использованием функции добавления.

Имею понимание теории бд, но на практике ничего серьезнее "электронного журнала" не было
  • Вопрос задан
  • 4039 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
Так может отдельная таблица favorites с полями id, id_articles, id_user
Выборка: выбрать все id_articles где id_user=13

Корзину например можно сделать переносом статьей в отдельную таблицу с сохранение старого id а можно просто скрыть их путём ввода поля "видимость" 1 и 0. Если корзину чистим - все статьи где vision=0 удаляются из БД например.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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