私たちのプロジェクトには、複雑な関係を持つ最大 40 個のテーブルがあります。同僚は、長い結合クエリを使用することを信じているため、モジュール外のテーブルについて学習する必要がありますが、モジュールに直接関係のないテーブルについては気にせず、データ アクセス関数を使用する必要があると思います (他のモジュールの責任者によって書かれている) それらからのデータが必要な場合。明確にさせてください:
私は、顧客がベンダーに連絡して、特定の製品について会話を開始できるようにする ContactVendor モジュールを担当しています。製品モジュールには、独自の複雑なテーブルと、詳細をカプセル化する関数との関係があります (たとえば、i18n、アクティベーション、製品の可用性など...)。ここで、ベンダーと顧客の間の会話に関連する製品の製品タイトルを表示する必要があります。製品情報と会話内容を一度に取得する長いクエリを作成するか (これにより、製品テーブルについて学習する必要があります)、または関連する product_id を get_product_info(int) 関数に渡すことができます。
最初のアプローチは明らかに要求が厳しく、多くの悪い慣行や、私が通常プログラミングの欠点と考えるものを導入します。2 番目のアプローチの問題は、これらのアクセス関数が無数の小さなクエリを引き起こすことであり、それぞれが個別のクエリを実行する関数を使用してループが 100 個の製品の製品タイトルをフェッチしようとすると、パフォーマンスの低下が懸念されます。そのため、「実装にコーディングしないで、インターフェースにコーディングする」とパフォーマンスの間で立ち往生しています。物事を行う正しい方法は何ですか?
更新: モジュールの外部にあるこれらのテーブルに対する将来の変更の可能性について特に心配しています。製品モジュールが彼らのやり方を変えることにした場合はどうなるでしょうか? または何らかの理由でスキーマを変更しますか? これは、変更がそれらに統合されるまで、一部の他のモジュールが破損または誤動作することを意味します。いつもの波及問題。