Redux не заставляет вас использовать нормализованную форму.И этот вопрос выходит далеко за рамки избыточности.
Выбор правильной схемы всегда является компромиссом между нормализацией и оптимизацией и во многом зависит от того, какую именно функцию вы хотите реализовать.
Если вы хотите показать толькоесли текущий пользователь приложения следует за пользователем, отображаемым на экране, 1-й способ вполне подойдет.Но, возможно, вы также захотите показать всех подписчиков на другой странице, если это ваш случай, то обе предложенные вами реализации плохо подходят для этого, потому что они требуют, чтобы вы отфильтровали массив всех пользователей, чтобы получить те, которые следуют за вами.И в этом случае вы хотели бы иметь массив followedByMe
со всеми идентификаторами пользователей, за которыми следуют вы.
Но поскольку данные, хранящиеся в redux, делятся, их время жизни с приложением намного выше, чем сданные в постоянном хранилище, таком как база данных.Вы можете использовать оба поля isFollowedByMe
и список followedByMe
для эффективной реализации обеих функций.Кроме того, интерфейс намного более устойчив к рефакторингу и изменениям.Это позволяет вам экспериментировать с низкой стоимостью.Таким образом, вы можете использовать некоторую схему, и если она в какой-то момент не соответствует вашим потребностям, вы можете просто выполнить рефакторинг без каких-либо миграций и прочего.Так что не бойтесь использовать то, что подходит вам прямо сейчас.
Но не используйте один и тот же подход к вашей схеме бэкенда и базы данных, их сложнее реорганизовать.