Как лучше хранить данные о существовании записей с данной категорией?

Рейтинг: 1Ответов: 1Опубликовано: 02.04.2015

Как лучше хранить данные о существовании записей с данной категорией? Есть многоуровневые категории и задача: нужны те, у которых есть записи, причем если у подкатегории есть записи, то у родителя тоже как бы есть записи. Как организовать такое? Сделать в БД отдельное поле и менять его, когда изменяется категория у какой-либо записи? Или делать это динамически, при загрузке создавать массив? Если категорий будет много, то сильно ли повлияет на быстродействие в отношении оперативной памяти?

Ответы

▲ 2Принят

Не занимайтесь преждевременной оптимизацией. Сначала создайте нормализованную базу данных, в которой нет избыточной информации. Если замеры производительности покажут, что запросы с вашими критериями происходят слишком долго, а узкое место — необходимость склеивать таблицы, то можете "испортить" нормализацию и добавить поле с кэшированным значением числа записей в категории.

Ничто не даётся бесплатно. Если вы будете кэшировать значение, то у вас возрастёт сложность кода, появится риск рассинхронизации кэшированного значения с актуальным значением. Если же вы не будете кэшировать, то у вас будет гарантированная консистентность данных, но более медленные запросы.

Если количество записей и категорий в пределах тысяч, а запросы не слишком частые, то вы не почувствуете проблем со скоростью. Если у вы планируете миллионы записей и категорий, и тысячи запросов в секунду, то производительность будет для вас критична. Если вы не знаете реальный масштаб, то сделайте просто, а при необходимости усложняйте.