3

私が取り組んでいるプロジェクトには、次のものが必要です。

  1. 正規化されたサンプル rdbms (5 つのテーブル) を作成します。
  2. Javaを使用して、各テーブルに100万行のデータを入力しました
  3. 正規化されたテーブルに対して 2 つの OLTP クエリと 2 つの OLAP クエリを実行します。
  4. 非正規化テーブル。
  5. それらに対して同じ OLTP および OLAP クエリを実行し、時間を比較します。

OLAP クエリとは インターネットを検索したところ、立方体を作成してクエリを適用する必要があることがわかりました。RDBMS で OLAP クエリを作成するにはどうすればよいですか? サンプルがあります:正規化されたテーブル(注文、製品、顧客、支店、販売)

  1. 販売 : order_id,product_id ,quantity
  2. product : product_id ,name,description,price,sales_tax
  3. 顧客: customer_id ,f_name,l_name,tel_no,addr,nic,city
  4. ブランチ:ブランチ ID、名前、 tel_no、addr、市区町村
  5. 注文 : order_id ,customer_id,order_date,branch_id

上記のテーブルに対して OLAP クエリを作成したいと考えています。SQL Developer で Oracle Express を使用しています。

4

1 に答える 1

2

使用している RDBMS に応じて、"analytic"、"windowing"、または "OLAP" と呼ばれることがある SQL 関数がいくつかあります。一部のシナリオでは、パフォーマンスを大幅に向上させることができます。通常、同じデータ セット内の行を比較する場合は、自己結合が必要になります。

Oracle を使用しているので、asktom.oracle.com にアクセスして「analytics rock」を検索することを心からお勧めします。ここにある Oracle のドキュメントを読むよりも、非常によく説明されており、はるかに簡単ないくつかの優れた例を見つけることができます。

いくつかの注意: リレーショナル理論はタプルの順序に対処しないため、それらは厳密には「リレーショナル」ではありません。これらはクエリの他の部分の後、つまりフィルタリングと集計の後に実行されます。また、一部のデータベースではあまり実装されていません。

Oracle もキューブを操作するための個別の OLAP を提供しているようですが、これは現在、Enterprise Edition の個別にライセンスされたオプションであるため、Express エディションを使用している場合、あなたが言及しているものではないと思います。

編集

これは、分析関数を使用して現在の合計を取得する方法を示すデータモデルに大まかに基づいた簡単な例です。これは、分析関数なしでは簡単ではありません:-

select 
o.customerid, 
o.orderid, 
o.orderdate, 
p.price, 
sum (p.price) over (partition by o.customerid order by o.orderdate) running_total

from orders o
inner join sales s on o.orderid = s.orderid
inner join product p on s.productid = p.productid

これは(私が入力したいくつかの単純なデータの場合): -

CUSTOMERID           ORDERID              ORDERDATE PRICE RUNNING_TOTAL
-------------------- -------------------- --------- ----- -------------
1                    1                    01-JAN-12    30            30 
1                    2                    01-MAR-12    30            60 
1                    3                    01-APR-12    30            90 
1                    4                    01-MAY-12    30           120 
于 2012-12-16T10:25:55.913 に答える