3

我有一个我正在做的项目,需要以下内容:

  1. 创建标准化样本 rdbms(5 个表)
  2. 使用 Java 我在每个表中输入了 100 万行数据
  3. 在规范化表上运行两个 OLTP 和两个 OLAP 查询。
  4. 非规范化表。
  5. 对它们运行相同的 OLTP 和 OLAP 查询并比较时间。

OLAP 查询是什么意思?我在互联网上搜索过,我能找到的只是我必须制作一个立方体,并在其上应用查询。如何在 RDBMS 上编写 OLAP 查询?我有一个样本:表规范化(订单、产品、客户、分支机构、销售)

  1. 销售:order_id,product_id,数量
  2. 产品 : product_id ,name,description,price,sales_tax
  3. 客户 : customer_id ,f_name,l_name,tel_no,addr,nic,city
  4. 分支:branch_id,名称,电话号码,地址,城市
  5. 订单:order_id,customer_id,order_date,branch_id

我想在上面的表上写一个 OLAP 查询。我将 Oracle Express 与 SQL Developer 一起使用。

4

1 回答 1

2

有一些 SQL 函数有时称为“分析”、“窗口化”或“OLAP”,具体取决于您使用的 RDBMS。在某些情况下,它们可以提供巨大的性能改进,通常是比较同一组数据中的行,否则需要自连接。

当您使用 Oracle 时,我衷心建议您访问 asktom.oracle.com 并搜索“analytics rock”——您会发现一些很好的示例,这些示例得到了很好的解释,并且比仅阅读此处的 Oracle 文档要容易得多。

一些注意事项:它们不是严格的“关系”,因为关系理论没有解决元组的顺序;它们在查询的其他部分之后执行 - 即在过滤和聚合之后;某些数据库在较小程度上实现了它们。

我看到 Oracle 还提供了用于处理多维数据集的单独 OLAP 产品,但目前这是企业版的单独许可选项,因此如果您使用的是 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 回答