Для простоты предположим, что у нас есть единый канал для всех пользователей .
Канал представляет собой просто список статей .
Каждый пользователь может добавить в избранное определенную статью или удалить ее из личного просмотра.
Удаление статьи пользователем не влияет на других пользователей;У каждого пользователя есть свой «вид» канала.
Простой подход
Наивная схема, которую я разработал, приведена ниже:

(Конечно, в реальном приложении есть нечто большее, чем отношение пользователя к статье, а не просто сокрытие или пометка звездой.)
Проблема
Похоже, запись таблицы ссылок должна создаваться лениво, после первого изменения опций .В противном случае, когда новый пользователь зарегистрируется или появится новая статья, нам придется создать много пустых записей ссылок, а также обработать параллелизм.
Это означает выбор списка статей.для определенного пользователя - это запрос, который объединяет:
- выбор всех статей, для которых
ArticleUserLink
не существует; - выбор всех статей, для которых существует
ArticleUserLink
иимеет is_hidden = 0
.
Является ли OR
ответом здесь, или существует более эффективный дизайн / запрос базы данных для решения проблемы?