Как грамотнее сделать, добавление ID пользователя к задаче, или ID задачи к пользователю?
Друзья привет! Философский вопрос у меня назрел в процессе разработки одно ресурса с личными кабинетами пользователей. Условно: Есть зарегистрированные пользователи на сайте, они могу взаимодействовать с ресурсами (страницами) на сайте. Например подписываться на изменения тех или иных страниц.
И вот как грамотно делается, когда юзер подписывается на страницу, в его таблицу в бд добавляется ID этой страницы, или наоборот?
Для последующих фильтраций важно думаю это. Например юзер у себя захотел посмотреть все страницы на которые он подписан. И функция делает запрос ко всем ресурсам где есть его ID как подписчика, или наоборот, я захочу вывести всех пользователей подписанных на этот ресурс. :)) блин, блин, надеюсь понятно обьяснил.
Все верно пишут. Вам нужна связь "многие на многим", реализуется с помощью промежуточной таблицы с помощью элементарных join-ов.
Создав всего одну таблицу user_tasks с двумя колонками user_id и task_id можно грамотно организовать получение всех задач пользователя, а так же всех пользователей подписанных на задачу.
Если же использовать для этого дела отдельную колонку в одной из таблиц, и делать выборку по LIKE - запрос получится легче в визуальном плане, но гораздо тяжелее для сервера.
Приведем аналогию: Представьте, что перед вами задача - выбрать лишь белые камушки среди тех, которые бросил в кучу определенный человек. Будет гораздо легче, если все камушки заранее будут рассортированы и помечены, чем выбирать их из общей кучи.
Удачи в разработке вашего проекта. И прошу прислушаться к советам, которые дают знающие люди :)
Спасибо, вот формулировка правильная, СВЯЗИ, но объясните пожалуйста зачем так усложнять? Когда нужно всего то сделать выборку юзеру страниц на которые он подписан, или странице вывести юзеров подписанных на нее, я так прикунул достаточно поля в бд в табличке страницы, куда массивом укладывать ID юзеров. Но я такую связь впервые буду делать, в уме кажется будет достаточно этого, или нет?
Кандрашкин Алексей: ну как, от ID юзера обратиться к таблице ресурсов, пройтись по каждой странице и по полю где хранится массив с ID юзера отфильтровать, почему нет?
Кандрашкин Алексей: спасибо большое за ответы, разъяснили разницу, что с промежуточной таблицей запрос будет запрос выполняться быстрее, и нагрузка на сервер меньше, чем если ID хранить в ячейке таблицы ресурса или юзера.
Кандрашкин Алексей: Вот вот, и я про то же, с малым опытом умом то кажется что так логичней будет, а на деле чувствую что не грамотно, приходится советоваться :) Ну а чтение конечно, но локально ответов на горячие вопросы не сразу найдешь в книгах как тут. Спасибо.
Все таки советует промежуточную таблицу для этой цели? Почему нельзя воспользоваться полем в таблице ресурса? И в него массивом класть ID пользователей.