有向无环弱连接图
2. 维度事实模型图例
3. 维度事实模型
3.1 事实表 Schemes
--Fact
--Measures
--Dimensions
--Hierarchies
Dimension attributes
Non-dimension attributes
将其定义为
-- M 度量集合
-- A 维度属性集合
-- N 非维度属性集合
-- R 有序元祖集合(ai,aj),表示Schema图中的边
-- O 可选关系集合
-- S 聚合表达式集合
-- Dim(f)是维度模式,Dim(f)中的任一元素都是一个维度
为什么要格式化?
给定模型的意义
工具支持
-- 转换算法
-- CASE工具
3.2 算法
把ER图转换成概念设计
1)定义事实
2)针对每一事实
a) 构建属性树
b) 剪枝和移植
c) 定义维度
d) 定义度量
e) 定义层次结构
3.3 算法实例
3.3.1 定义事实
实体E1,...,En之间的关系R 转换为一个实体F
不断进行规约是定义事实的一个候选,比如Sale,而不是Store,City
每一个事实成为事实模型的root.
转换关系如下:
3.3.2 针对每一个事实
1)构建属性树
每一个顶点代表Schema的一个属性,Root代表F的标识
root=newVertex(identifier(F));
translate(F,root)
translate(E,v) {
for each attribute a E | a identifier(E)
addChild(v, newVertex({a}));
for each entity G connected to E by a
relationship R | max(E,R)=1 {
for each attribute b R
addChild(v, newVertex({b}));
next=newVertex(identifier(G));
addChild(v,next);
translate(G, next);
}
}
例如:
translate(E=SALE, v=sale)
addChild(v, qty);
addChild(v, unitPrice);
for G=PURCHASE TICKET
addChild(v, ticketNumber);
translate(PURCHASE TICKET, ticketNumber)
for G=PRODUCT
addChild(v, product);
translate(PRODUCT, product);
====》属性树
2)剪枝和移植
去除不必要的细节数据粒度。
剪枝:Drop掉子树
移植:包含不重要信息的顶点但依旧是要保留的。
graft(v) {
for each v’ | v’ is father of v
for each v’’ | v’’ is child of v
addChild(v’, v’’);
drop(v);
}
一对一是一个好的候选,如果一个可选顶点要移植,则所有孩子节点均要依次移植。
例如:
=====》
3)维度
决定事实instance的粒度
4)度量
属性树中的数值型属性,这些度量如何从原 Schema中计算出来
5)层次结构
属性树已有一定的层次结构,需要做的是剪枝和移植,并增加新的聚合层次。
确定非维度属性。