これは、pht の ORM における select n + 1 問題の簡単な例を提供しますが、考え方は他の言語の ORM でも同じであるはずです。
典型的な解決策は、熱心な読み込みを使用してクエリを 1 つに減らすことです。これはそれほど難しいことではないと思いますが、OTOH、後者のリファクタリングでは開発者が 2 つの場所を変更する必要があるため、非常に脆弱です。それ以外の場合は、この select n + 1 問題が再発します。
私の直感では、パス分析を行って、これらの子属性がコードの後半で使用されることを把握できるはずです。そのため、必要なすべての情報を一度に収集するクエリを生成しましょう。
これは、Ruby や php などの解釈された言語を使用して実装された ORM を要求するには、おそらく多すぎるでしょう。しかし、Java (NHibernate) も C# (エンティティ フレームワーク) も、このパス分析を行っていません。どうしてこれなの?