一、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/zh-tw/n/254062.html