一、DataVault概述
DataVault是数据仓库建模的一种方法,由美国数据仓库专家Dan Linstedt于2000年提出。它旨在解决传统数据仓库建模方法(如星型模型和雪花模型)所存在的固有问题,如难以应对复杂的业务规则和频繁的修改需求等。DataVault方法提供了一种简单、灵活、可伸缩和可维护的数据仓库建模方法,能够更好地满足当前企业数据仓库建设的需要。
二、DataVault优势
1、可扩展性优于传统模型
DataVault模型在可扩展性方面优于传统模型。它具有简单的结构,可快速适应新的数据源和规则变更。
2、适用于大型数据量
在处理大型数据量方面,DataVault模型比传统模型更高效。DataVault模型使用更少的表进行建模,这节省了空间和使用时间。
3、明确的解决方法
DataVault提供了标准化的解决方法。它着重于公正的数据建模,而不是建模器的主观判断。
4、支持多种集成方式
DataVault支持不同类型的数据集成方式,如ETL、ELT等。这使得数据仓库开发人员能够更好地匹配他们的环境和需求。
5、易于管理和维护
DataVault模型易于管理和维护,这是因为它具有清晰的解决方法,数据可重复使用,模型也能够满足整个企业的需求。
三、DataVault三个重要构件
在DataVault模型中,有三个重要的构件,分别是:Hub、Link、Satellite。
Hub表示对实体的抽象,Link表示对事实的抽象,而Satellite表示与Hub和Link相关联的附加信息。
他们之间的关系如下图所示:
Hub Link | | Satellite----Satellite
1、Hub
Hub是抽象的业务实体,有一个唯一标识符来区分对应的实体。Hub本身并不包括实体的属性(实体属性放在Satellite中)。
例如,有一个叫“客户”的实体,其中有许多客户,我们可以将“客户”命名为Hub,并为每个客户分配一个唯一值。
Hub:客户 |客户ID| |------| |001 | |002 |
2、Link
Link是抽象的业务事实,例如Sales,Order等。Link关联了Hub,将Hub连接在一起,以形成更高水平的集合。Link部分包含两个属性:从Hub转移过来的属性和Link属性自身(如销售日期)。
例如,将客户与订单连接起来,我们可以创建一个“客户订单”连接,其唯一标识符由客户ID和订单号组成。
Hub:客户 Link:客户订单 Hub:订单 | +-------------|客户ID |订单号 -+ | |------------------------| | | | | |客户ID |订单号 |订单日期|| | |---------|---------|----------|| | | | | +----------------------------|| | |散列影子key| |--------------|
3、Satellite
Satellite包含了与一个给定的Hub或Link关联的业务属性。它与Hub或Link的关系是一对多的,每个属性可以有多个版本(如客户的不同地址)。
例如,客户地址可以作为Satellite放在客户Hub对象中。
Hub:客户 +-------------Satellite:客户地址 1 | |-------客户名称 | |-------客户地址 | |-------版本 | |-------起始时间 | |-------结束时间 | +-------------Satellite:客户地址 2 |-------客户名称 |-------客户地址 |-------版本 |-------起始时间 |-------结束时间
四、DataVault实例
现在,让我们来看看如何在DataVault中对一个简单的场景建模。
假设我们正在为一个销售部门创建一个数据仓库。其中包含客户、订单和产品这三个实体,以及客户和订单以及订单和产品之间的关系。
我们使用如下脚本来建模数据仓库:
1、创建Hub
CREATE TABLE H_Customer ( customer_key int IDENTITY(1,1) NOT NULL, customer_id INT NOT NULL, PRIMARY KEY (customer_key) ); CREATE TABLE H_Product ( product_key int IDENTITY(1,1) NOT NULL, product_id INT NOT NULL, PRIMARY KEY (product_key) ); CREATE TABLE H_Order ( order_key int IDENTITY(1,1) NOT NULL, order_id INT NOT NULL, PRIMARY KEY (order_key) );
2、创建Satellite
CREATE TABLE S_Customer ( customer_key int NOT NULL, effective_from_date datetime NOT NULL, effective_to_date datetime NOT NULL, customer_name NVARCHAR(50) NULL, customer_address NVARCHAR(50) NULL ); CREATE TABLE S_Product ( product_key int NOT NULL, effective_from_date datetime NOT NULL, effective_to_date datetime NOT NULL, product_name NVARCHAR(50) NULL, product_code NVARCHAR(10) NULL ); CREATE TABLE S_Order ( order_key int NOT NULL, effective_from_date datetime NOT NULL, effective_to_date datetime NOT NULL, order_date datetime NULL );
3、创建Link
CREATE TABLE L_CustomerOrder ( customer_key int NOT NULL, order_key int NOT NULL ); CREATE TABLE L_OrderProduct ( order_key int NOT NULL, product_key int NOT NULL );
4、附加脚本
ALTER TABLE S_Customer ADD CONSTRAINT PK_S_Customer PRIMARY KEY(Customer_Key, Effective_From_Date); ALTER TABLE S_Customer ADD CONSTRAINT FK_S_Customer__H_Customer FOREIGN KEY(Customer_Key) REFERENCES H_Customer(Customer_Key); ALTER TABLE S_Product ADD CONSTRAINT PK_S_Product PRIMARY KEY(Product_Key, Effective_From_Date); ALTER TABLE S_Product ADD CONSTRAINT FK_S_Product__H_Product FOREIGN KEY(Product_Key) REFERENCES H_Product(Product_Key); ALTER TABLE S_Order ADD CONSTRAINT PK_S_Order PRIMARY KEY(Order_Key, Effective_From_Date); ALTER TABLE S_Order ADD CONSTRAINT FK_S_Order__H_Order FOREIGN KEY(Order_Key) REFERENCES H_Order(Order_Key); ALTER TABLE L_CustomerOrder ADD CONSTRAINT PK_L_CustomerOrder PRIMARY KEY(Customer_Key, Order_Key); ALTER TABLE L_CustomerOrder ADD CONSTRAINT FK_L_CustomerOrder__H_Customer FOREIGN KEY(Customer_Key) REFERENCES H_Customer(Customer_Key); ALTER TABLE L_CustomerOrder ADD CONSTRAINT FK_L_CustomerOrder__H_Order FOREIGN KEY(Order_Key) REFERENCES H_Order(Order_Key); ALTER TABLE L_OrderProduct ADD CONSTRAINT PK_L_OrderProduct PRIMARY KEY(Order_Key, Product_Key); ALTER TABLE L_OrderProduct ADD CONSTRAINT FK_L_OrderProduct__H_Order FOREIGN KEY(Order_Key) REFERENCES H_Order(Order_Key); ALTER TABLE L_OrderProduct ADD CONSTRAINT FK_L_OrderProduct__H_Product FOREIGN KEY(Product_Key) REFERENCES H_Product(Product_Key);
五、总结
DataVault基于Hub、Link和Satellite三个重要构件的特点,提供了一个简单、灵活、可伸缩和可维护的数据仓库建模方法。使用DataVault方法能够更好地满足当前企业数据仓库建设的需要。以上是一个简单的DataVault建模实例,可以帮助你更好地理解DataVault建模的过程和构件的特点。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/254062.html