Вы должны изучить сценарии использования вашего решения. Вам нужно всегда показывать все данные, или вы начинаете с отображения только их части? Могут ли пользователи расширять свернутые элементы в рамках регулярного использования или эта информация используется только в менее распространенных случаях?
В зависимости от ваших ответов, может быть лучше выбрать и заполнить всю страницу сразу всеми данными, либо это может быть случай, когда для отображения начального экрана требуются только некоторые данные, а остальные могут быть выбраны на -demand.
В большинстве случаев наилучшее решение может включать выбор только необходимых данных и динамическое обновление страницы с использованием запросов ajax по мере необходимости.
Что касается оптимизации доступа к данным, вам необходимо найти баланс между количеством запросов к базе данных и сложностью каждого отдельного запроса. Из-за задержек в сети часто важно извлечь как можно больше, используя как можно меньше запросов, даже если это означает, что вы иногда будете получать данные, которые вам не всегда нужны. Но если вы включите слишком много данных в один запрос, то вычисление всех объединений также может быть дорогостоящим. Очень редко можно увидеть решение, в котором лучше сначала выбрать все корневые объекты, а затем для каждого элемента выбрать некоторые дополнительные объекты, связанные с этим элементом. Поэтому разработайте свое решение для одновременной выборки всех данных, но включайте только то, что вам действительно нужно, и старайтесь свести к минимуму количество задействованных таблиц.