来汇聚数据以及比较数据集
创建一个维可以使查询重写特性更广泛的使用,在透明的重写查询去使用物化视图后,数据库可以提升查询性能。
Hierarchical Structure of aDimension(维度的层次结构)
一个维度表是一个逻辑结构,它定义了两列或者多列之间的体系关系。维度没有分配存储。
维度信息是存在维度表中的,而事实信息也是存在事实表中的。
在 用户维度,用户向上存,从城市,省,国家,州,全球。数据分析 正常情况是在高级别的维度层次 根据情况需要逐步深入。
在子级别的每个值 都和一个父级别的值进行关联。一个层次关系是一个层次 到另一个层次的 功能性依赖。
Creation of Dimensions(维度的创建)
维度是通过sql语句创建的,CREATE DIMENSION 语句指定了如下:
·多个LEVEL 子句,每个表示了维度中的一列,或者一组列
·一个或多个HIERARCHY子句 指定了父子关系
·可选的ATTRIBUTE子句,每个表示个别级别 附加的列或一组列。
下面语句是就创建customers_dim维度的语句:
CREATE DIMENSION customers_dim
LEVELcustomer IS (customers.cust_id)
LEVELcity IS (customers.cust_city)
LEVELstate IS(customers.cust_state_province)
LEVELcountry IS (countries.country_id)
LEVELsubregion IS (countries.country_subregion)
LEVELregion IS (countries.country_region)
HIERARCHY geog_rollup (
customer CHILD OF
city CHILD OF
state CHILD OF
country CHILD OF
subregion CHILD OF
region
JOIN KEY (customers.country_id) REFERENCES country)
ATTRIBUTE customer DETERMINES
(cust_first_name,cust_last_name,cust_gender,
cust_marital_status,cust_year_of_birth,
cust_income_level,cust_credit_limit)
ATTRIBUTE country DETERMINES(countries.country_name);
一个维度中的列可以在 同一个表中(反规范化) 或者从多个表中(完全或者部分规范化)
举个例子。一个规范化的时间维度可以包含 一个日期表,一个月表,一个年表,通过使用join条件将每个日期行与月行关联,每个月行与年行关联。
而在完全反规范化的时间维度中,日期,月,年列都在同一个表中,无论是规范化或者反规划反,列之间的层次关系必须在CREATE DIMENSION 语句中指定。
Overview of Synonyms(同义词概述)
一个同义词就是一个schema object的别名。举个例子,你可以创建同义词 给表、视图、序列、PL/SQL 程序单元、用户定义的对象类型、或者别的同义词。
因为同义词就是一个简单的别名。它不需要存储,它就是数据字典中的一条定义。
同义词可以简化SQL语句。同义词同样对隐藏基础对象的位置有用。
如果基础对象必须要重命名或者更改位置,那么只需要对同义词进行重定义,而应用基于同义词的SQL可以继续工作,不需要进行调整。
你可以创建private(私有)和public(公共) 两种同义词。
private同义词是在指定用户的schema中,用户可以控制它对谁生效。
public同义词是被用户组PUBLIC所拥有,它对每个数据库用户生效。
下面例子中,DBA给hr.employees表创建了一个叫people的全局同义词
oe用户通过people同义词来计算 employees表中的行数。
SQL>CREATE PUBLIC SYNONYM people FORhr.employees;
Synonym created.
SQL> CONNECT oe/oe
Connected.
SQL>SELECT COUNT(*) FROM people;
COUNT(*)
----------
107
使用公共同义词很少,因为他们使得数据库整合更加困难
像下面的案例,如果其他管理员打算创建公共同义词people。那么将会保存,因为一个数据库中只有一个公共同义词people可以存在。公共同义词的滥用会导致多个应用之间的命名空间冲突。
SQL> CREATE PUBLIC SYNONYM people FORoe.customers;
CREATE PUBLIC SYNONYM people FOR oe.customers
*
ERROR at line 1:
ORA-00955: name is already used by anexisting object
SQL> SELECT OWNER, SYNONYM_NAME,TABLE_OWNER, TABLE_NAME
2 FROM DBA_SYNONYMS
3 WHERE SYNONYM_NAME = 'PEOPLE';
OWNER SYNONYM_NAME TABLE_OWNER TABLE_NAME
---------- ------------ ---------------------
PUBLIC PEOPLE HR EMPLOYEES
同义词自身是不安全的,当你授予统一的对象权限时,你应该已经授权基础对象的权限。同义词在grant语句中,只作为对象的别名。