9 關於資料倉儲維度資料處理的方法探究系列——雪花維

bq_wang發表於2008-02-13
雪花架構是星型架構的一個擴充套件,有多個表定義一個或多個維度。在雪花架構中,只將主維度表和事實資料表聯接。其他維度表聯接到主維度表。

5雪花維概述

5.1概述

常規維度是指那些既不是虛擬維度、父子維度,也不是資料探勘維度的維度。與父子維度不同(其層次結構是不均衡層次結構),常規維度中的層次結構要麼均衡層次結構,要麼是不齊整層次結構。常規維度包含的級別數目與定義時選擇的列數目相同。這些級別一般按照常規到特定的順序排列。(微軟SQLServer2000聯機幫助概念)

常規維度可以基於多個聯接表。如果一個常規維度基於多個表,而且它沒有雪花架構,則將它新增到多維資料集中時將採用這種架構。如果一個常規維度基於單個表,而且用星型架構將該維度新增到多維資料集中,則該多維資料集將保留星型架構。(微軟SQLServer2000聯機幫助概念)

因此雪花架構是星型架構的一個擴充套件,有多個表定義一個或多個維度。在雪花架構中,只將主維度表和事實資料表聯接。其他維度表聯接到主維度表。

5.2實現

事實上雪花維度既可以是由多個表聯合組成的,也可以由一個表的多個有固定層次結構的;當然多個表也可以融合成為一個表或者檢視,實際專案中也會這麼做。

多個表的關聯組合會帶來一定的隱患,主要是鍵值不能匹配或者缺失,上級找不到下級,下級找不到父級,所以處理起來比較困難,當然透過表關聯比較符合資料庫的設計原則;透過將兩個表放到一起就可以有效的緩解,資料不一致的情況。

對於兩個不同的表的處理,請參見3.3.1覆蓋,只不過在完成表的處理之後,需要對這兩張表進行檢視合併,增加無鍵值時的預設值。

當然也可以透過儲存過程將兩張表合併到一張表中,具體情況根據業務需求而實現。

程式碼

CREATE TABLE t_tmp_xxx

(

ID VARCHAR(20) NOT NULL,

SuperID VARCHAR(20) NOT NULL,

Name VARCHAR(50) ,

CONSTRAINT PK_t_tmp_xxx PRIMARY KEY (ID)

)

go

CREATE TABLE t_tmp_super_xxx

(

SuperID VARCHAR(20) NOT NULL,

Name VARCHAR(50) ,

CONSTRAINT PK_t_tmp_super_xxx PRIMARY KEY (SuperID)

)

go

CREATE TABLE t_dem_xxx

(

ID VARCHAR(20) NOT NULL,

Name VARCHAR(50) ,

SuperID VARCHAR(20) NOT NULL,

SuperName VARCHAR(50),

CONSTRAINT PK_t_dem_xxx PRIMARY KEY (ID)

)

go

INSERT INTO t_tmp_xxx VALUES('1','1','a')
INSERT INTO t_tmp_xxx VALUES('2','2','b')
INSERT INTO t_tmp_xxx VALUES('3','3','c')
INSERT INTO t_tmp_super_xxx VALUES('2','bb')
INSERT INTO t_tmp_super_xxx VALUES('4','dd')

Go

CREATE VIEW v_dem_xxx AS

SELECT '-1' as ID,’預設’ Name,'-1' SuperID, ‘預設' SuperName

Union All

SELECT a.ID ID,a.name Name,

CASE WHEN b.superid IS NULL THEN '-1' ELSE b.superid END SuperID,

CASE WHEN b.superid IS NULL THEN’預設' ELSE b.name END SuperName

FROM t_tmp_xxx a LEFT JOIN t_tmp_super_xxx b

ON a.SuperID=b.SuperID

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/6517/viewspace-145445/,如需轉載,請註明出處,否則將追究法律責任。

相關文章