3 回答
很明显,您仍然需要一个事实表来保存一些数据。
您可以通过使 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
子句的,因此创建一个视图来组合所有视图并不难。
如果您使用的是 Oracle 12c,您可能会查看DBMS_UTILITY.EXPAND_SQL_TEXT,但您可能需要稍微清理一下输出以提高可读性。
先说几件事
1) 视图是预定义的 sql 查询,因此无法将记录直接插入其中。即使是持久表结构的物化视图也只会填充查询结果,因此就目前情况而言,这是不可能的。可以创建一个新表来填充当前在视图 D 处聚合的数据
2) 很有可能在 Informatica 中使用多个内联排序器和聚合器转换的组合来聚合多个级别的数据,这将生成您正在寻找的级别的数据。
3)你应该这样做吗?数据仓库最佳实践会拒绝,并根据原始表 A 尽可能保持数据的粒度,以便可以通过多种方式对其进行汇总(请参阅 Kimball 集团网站并阅读星型模式以了解此类问题)。你在选择上有很大的影响力吗?
4)当前的流程(虽然经常使用)在星型模式方面并没有那么好