0

3つのテーブル(以下を参照)がありTable A、製品について説明し、Table Bさまざまな日付の在庫情報を保持し、さまざまTable Cな日付の各製品の価格を保持しています。

 Table A
 ------------------
 product_id    product_name
 1             book
 2             pencil
 3             stapler
 ...           ...

 Table B
 ------------------
 product_id    date_id     quantity
 1             2012-12-01  100
 1             2012-12-02  110
 1             2012-12-03  90
 2             2012-12-01  98
 2             2012-12-02  50
 ...           ...         ...

 Table C
 -------------------
 product_id   date_id      price
 1            2012-12-01   10.29
 1            2012-12-02   12.12
 2            2012-12-02   32.98
 3            2012-12-01   10.12

私のJavaアプリケーションの多くの部分で、各製品のドル価値が何であるかを知りたいので、次のクエリを実行することになります

 select 
      a.product_name,
      b.date_id,
      b.quantity * c.price as total
 from A a
 join B b on a.product_id = b.product_id
 join C c on a.product_id = c.product_id and b.date_id = c.date_id
 where b.date_id = ${date_input}

私は今日、上記のクエリをビュー(日付条件を除く)にしてから、ビューに特定の日付をクエリして、クエリが次のようになるようにすることができると考えました。

 select * from view where date_id = ${date_input}

そのようなロジックの適切な抽象化レベルがどこにあるのかわかりません。Javaコード(設定ファイルから読み取る)にする必要がありますか、それともデータベースのビューにエンコードする必要がありますか?

私がそれをビューとして言いたくない唯一の理由は、時間の経過とともに、カバーする日付が増えるため、参加が高価になることです。私は通常、過去1か月分のデータにのみ関心があります。 。おそらく、ストアドプロシージャの方が優れていますか?このロジックを抽象化するのに適した場所でしょうか?

4

1 に答える 1

1

ビューが正しく実装されている場合、ビューがなくてもクエリが同じになるこのような場合に、パフォーマンスが最悪になることはありません。このビューがあるため、日付を増やしてもパフォーマンスに影響はありません。

ビューを作成します。この場合、それは正しい抽象化です。

于 2012-12-26T20:21:02.250 に答える