принцип очень простой.
Я его использую при оптимизации тормозящих запросов, только в другом направлении.
Если сложный запрос тормозит, то я по очереди из него выкидываю все джойны и подзапросы до тех пор, пока торможение сохраняется. И дальше уже занимаюсь оптимизацией упрощенной версии. Обычно это две-три таблицы.
Тот же самый принцип при проектировании, только в обратную сторону - сначала получаем базовые данные, голый хребет, без украшений. Если из связанной таблицы мы получаем значение по первичному ключу (скажем название категории по её айди), то добавляем её в последнюю очередь, поскольку она ни на что не влияет. Начинаем с основнй таблиы с данными - и вперёд
То есть грубо говоря сначала формируем логику, потом добавляем украшения.