0
4

3 回答 3

1

很明显,您仍然需要一个事实表来保存一些数据。

您可以通过使 D 更复杂来摆脱 B 和 C(该WITH子句可能有助于使其保持可监督性)。

将数据插入 D 本身(很可能)是不可能的,但您可以创建并INSTEAD OF INSERT触发来处理它,即插入到事实表 A 中。

使用WITH子句的示例:

代替

 create view b as select * from dual;
 create view c as select * from b;
 create view d as select * from c;

你可以写

 create view d as
   with b as (select * from dual), 
        c as (select * from b)
   select * from c;

如您所见,现有视图定义是 1:1 进入WITH子句的,因此创建一个视图来组合所有视图并不难。

于 2017-02-14T10:30:31.930 回答
0

如果您使用的是 Oracle 12c,您可能会查看DBMS_UTILITY.EXPAND_SQL_TEXT,但您可能需要稍微清理一下输出以提高可读性。

于 2017-02-14T12:46:57.510 回答
0

先说几件事

1) 视图是预定义的 sql 查询,因此无法将记录直接插入其中。即使是持久表结构的物化视图也只会填充查询结果,因此就目前情况而言,这是不可能的。可以创建一个新表来填充当前在视图 D 处聚合的数据

2) 很有可能在 Informatica 中使用多个内联排序器和聚合器转换的组合来聚合多个级别的数据,这将生成您正在寻找的级别的数据。

3)你应该这样做吗?数据仓库最佳实践会拒绝,并根据原始表 A 尽可能保持数据的粒度,以便可以通过多种方式对其进行汇总(请参阅 Kimball 集团网站并阅读星型模式以了解此类问题)。你在选择上有很大的影响力吗?

4)当前的流程(虽然经常使用)在星型模式方面并没有那么好

于 2017-02-14T11:27:29.683 回答