私は、比較的多数 (数十万) の行を含む可能性がある SQL データベースにテーブルがあるプロジェクトに取り組んでいます。
このプロジェクトは PHP で書かれており、PDO を使用してデータベースにアクセスしています。このプロジェクトでは、「レポート」などを実装するために、データを表示するコンテキストに応じて、さまざまなプロパティでデータをフィルター処理して、このテーブルから行を選択できる必要があります。
この種の状況で非常に優れた設計がどのようなものになるのか、私は興味があります. これには次のオプションを考えましたが、どれもあまり好きではありません。
- 異なるフィルタリング手法ごとに個別のクエリ (API 関数など) を記述します。これは、各関数で SQL の 90% を複製することになり、維持するのが難しいため、望ましくないように思えます (たとえば、クエリの 1 つを変更または修正する必要がある場合、代わりにすべてのクエリを変更または修正する必要があります)。 1つだけ)。
- SQL を使用する代わりに、フィルタリングされていない行のリストを取得し、アプリケーションでフィルタリングする単一の API 関数を提供します。アプリケーションが気にしない行を処理するために多くの労力を浪費しているため、これは望ましくありません。
WHERE
提供された場合、クエリの句を変更するさまざまなオプションのパラメーターを使用して、単一のクエリで単一の関数を記述します。これはおそらく私がこれまでに持っていた最良のオプションですが、本当に奇妙なシグネチャを持つ関数を持ち、WHERE
かどうかに応じて句を変更するための一連の三項ステートメントを持つことを意味するので、私はまだそれが好きかどうかはわかりません引数が与えられました。
このタイプの機能を提供する API を設計するための一般的に受け入れられているプログラミング パターンは 1 つ以上ありますか?