介绍
创建Dimension的好处是可以支持更高级的Query Rewrite,钻取(Drill down)和聚合(Roll up)。定义了Dimension后,Oracle将能够重用物化视图中的信息,去做出聚合(roll up)或钻取(drill down).
在非范式模型中,上下级关系通常保存在同一个表中,Dimension相应的定义在一个表上。在三范式模型中,上下级关系通常在多个表中,也可以定义Dimension。
例子
下面给出一个非范式模型中的一个例子,你可以在Oracle自带的SH Schema中找到:
CREATE DIMENSION products_dim
LEVEL product IS (products.prod_id)LEVEL subcategory IS (products.prod_subcategory)LEVEL category IS (products.prod_category)
HIERARCHY prod_rollup (
product CHILD OFsubcategory CHILD OFcategory)
ATTRIBUTE product DETERMINES (products.prod_name, products.prod_desc, prod_weight_class, prod_unit_of_measure, prod_pack_size, prod_status, prod_list_price, prod_min_price)
ATTRIBUTE subcategory DETERMINES (prod_subcategory, prod_subcategory_desc)
ATTRIBUTE category DETERMINES (prod_category, prod_category_desc);
说明:
- 下级必须有且只有一个上级。比如说某个product只能属于一个subcategory.
- attribute xxx determines (yyyy)是单向的,即一个xxx对应只有一个yyyy,请注意不是有且只有。