- 我有许多由事实和外键(“三维”和“键值”类型)的表。例如,遇到的问题:
ID - 主键
尺寸
- LOCATION_ID
- PATIENT_ID
键值
- TYPE_ID
- STATUS_ID
- PATIENT_CLASS_ID
- DISPOSITION_ID
- ...
事实
- ADMISSION_DATE
- DISCHARGE_DATE
...
- 我没有创建一个数据仓库中的选项
- 我想简化报告
的数据结构我的方法是创建一些伪维度视图(基于DEPARTMENT和LOCATION表的'D_LOCATION')和伪事实视图(基于ENCOUNTER表的'F_ENCOUNTER')。在伪事实视图中,我会将键值表(例如STATUS,PATIENT_CLASS)加入事实表以包含名称字段(例如STATUS.NAME,PATIENT_CLASS.NAME)。
问题:
- 如果查询选择所有字段的自F_ENCOUNTER(即不是所有的key-value.name字段)的一个子集,是Oracle 10g中优化聪明地排除一些键值表连接(即未包含在查询中的连接)?
- 有什么我可以做的,以优化这个架构(除了索引)
- 有没有其他的方法?
**编辑** 目标(按重要性排序):
- 减少查询的复杂性;增加查询一致性;减少报告的开发时间
- 优化查询处理
- 减少管理员的负担
- 减少存储
我觉得有个同事把这称为'垃圾'维度。它被保留给低基数的字段。这当然是有道理的。不幸的是,这个客户对数据仓库没有兴趣。我想我可以创建一个视图,以这种方式去规范化数据,然后实现它(每天)。称它为F_ENCOUNTER_JUNK。 – craig 2011-05-13 13:20:44
不,垃圾尺寸用于组合几个不需要自己的表的不同想法(它本身最终可能是一个键值表)。它通常被命名为通用名称,如STANDARD_VALUES。像患者和LOCATION这样的维度本身就是合法的维度。 – Datajam 2011-05-13 13:41:01