Если вам нужно объединить только две таблицы, а «ингредиент» - это не огромный объем данных, наилучшим балансом производительности и удобства обслуживания, вероятно, будет один объединенный запрос. Да, вы повторяете некоторые данные в результатах, но если у вас нет 100 000 строк, и это не перегружает сервер / сеть базы данных, слишком рано для оптимизации.
История немного отличается, если у вас много слоев объединений, каждый с уменьшением количества элементов. Например, в одном из моих приложений у меня есть что-то вроде следующего:
Event -> EventType -> EventCategory
-> EventPriority
-> EventSource -> EventSourceType -> Vendor
Такой запрос приводит к значительному дублированию * значительного , что недопустимо, когда требуется извлечь 100 тыс. Событий, 1000 типов событий, возможно, 10 категорий / приоритетов, 50 источников и 5 поставщиков. Так что в этом случае у меня есть хранимая процедура, которая возвращает несколько наборов результатов:
- Все 100 тыс. Событий только с EventTypeID
- 1000 типов событий с CategoryID, PriorityID и т. Д., Которые применяются к этим событиям
- 10 EventCategories и EventPriorities, которые применяются к вышеупомянутым EventTypes
- 50 источников событий, сгенерировавших 100 000 событий
- И так, вы поняли.
Поскольку количество элементов резко снижается, гораздо быстрее загрузить только то, что здесь необходимо, и использовать несколько словарей на стороне клиента, чтобы собрать их вместе (если это даже необходимо). В некоторых случаях данные с низким уровнем мощности могут даже кэшироваться в памяти и вообще никогда не извлекаться из базы данных (кроме запуска приложения или изменения данных).
Определяющими факторами при использовании такого подхода являются очень большое количество результатов и крутое снижение количества элементов для объединений, другими словами включение . Это на самом деле противоположно большинству обычаев и, вероятно, противоположно тому, что вы здесь делаете. Если вы выбираете «рецепты» и присоединяетесь к «ингредиентам», вы, вероятно, разворачиваете , что может сделать этот подход бесполезным, особенно если есть только две таблицы для объединения.
Так что я просто говорю, что это возможная альтернатива , если производительность станет проблемой в будущем; на этом этапе вашего проекта, прежде чем вы получите реальные данные о производительности, я бы просто пошел по пути использования единого объединенного набора результатов.