Правильное ли это решение?
Как сферическая задача в вакууме нет, не правильное, т.к. данные дублируются два раза. Потенциально в схеме заложена неконсистентноость данных (например, в первом множестве есть определенная cat_id, в самом множестве cat_id такого user_id). На практике бывает по разному.
Как я уже говорил в теме "
Как устроен трекер на Хабре" смысл абсолютно тот же. Только в роле поста у нас идет лента новостей (а в роде комментариев
Но вот пользователь зашел в категорию и у него в ней 5 статей помечены как новые, он посмотрел одну, должно быть теперь +4
Нет, должно быть 0. +4 означало бы, что пользователь должен смотреть все посты чего понятное дело не требуется.