Потенциальная проблема - это производительность, а у вас пока нет проблем с производительностью. Есть много вещей, которые вы можете сделать в зависимости от выбранной базы данных, чтобы справиться с этим в решении № 1: индексирование, аппаратное обеспечение, кэширование и т. Д. Все это зависит от того, как часто пользователь должен получать текущий счетчик непрочитанных сообщений. Многие из этих вариантов не требуют настраиваемого кодирования на стороне приложения, поэтому вы можете реализовать их с изменением кода или совсем без него. Облегчает рост с приложением.
Как только пользователь подключается / входит в систему, получение счетчика из базы данных не так уж и плохо. Будет ли ваше приложение постоянно обновлять список сообщений, таких как электронная почта? Отсчет непрочитанных отсчетов отсюда не требует повторного посещения базы данных, а для получения новых сообщений в любом случае потребуется поездка в БД.
Совершаете поездку в БД каждый раз, когда читается сообщение, чтобы пометить IsRead? поля достаточно без пересчета другого поля.
С решением № 2 (ведение счета в поле / на диске), вам понадобится подпрограмма, чтобы периодически перестраивать / пересчитывать это поле при возникновении проблемы? И всегда есть проблемы. Собираетесь ли вы обернуть все это в транзакцию? Каждый раз, когда кто-то отправляет кому-то сообщение, он может потерпеть неудачу, потому что не может обновить UnreadCount принимающего пользователя из-за блокировки таблицы User? Или вы собираетесь создать отдельную таблицу для этого поля?