📅  最后修改于: 2023-12-03 15:39:57.964000             🧑  作者: Mango
雪花模式(Snowflake Schema)是数据仓库模型中的一种常用数据模型,也叫做扩展星型模型。相比于星型模式,雪花模式将维度表进一步拆分成多张表,以减少数据冗余和提高数据集成的灵活性。
雪花模式的数据结构如下图所示:
其中,中心的事实表和星型模式相同,描述了数据仓库中的业务过程、事件等。但是,雪花模式将维度表进一步拆分,每个维度都对应一个维度表,维度表之间通过外键进行关联。同时,维度表也可能进一步拆分成多张子表,例如时间维度表可以分解成年、月、日等子表。
以下是使用 SQL 创建一个简单的雪花模型的示例:
-- 创建中心的事实表
CREATE TABLE Fact_Trips (
TripID int,
DriverID int,
PassengerID int,
Date datetime,
Fare decimal(10, 2)
);
-- 创建地点维度表
CREATE TABLE Dim_Location (
LocationID int,
City varchar(50),
State char(2)
);
-- 创建时间维度表
CREATE TABLE Dim_Time (
TimeID int,
Date date,
Year int,
Month int,
Day int,
Weekday int,
Hour int,
Minute int,
Second int
);
-- 创建车辆维度表
CREATE TABLE Dim_Car (
CarID int,
Make varchar(50),
Model varchar(50),
Year int
);
-- 创建司机维度表
CREATE TABLE Dim_Driver (
DriverID int,
Name varchar(50),
Age int,
Gender char(1),
City varchar(50),
State char(2),
Zip char(5),
Rating decimal(2, 1),
HireDate datetime,
Terminate datetime
);
-- 创建子维度表,如时间维度表的子表
CREATE TABLE Dim_Time_Day (
TimeID int,
Date date,
Year int,
Month int,
Day int
);
-- 创建地点维度表的子表
CREATE TABLE Dim_Location_State (
LocationID int,
State char(2)
);
-- 在表之间建立关系
ALTER TABLE Fact_Trips ADD CONSTRAINT FK_Trips_LocationID FOREIGN KEY (LocationID) REFERENCES Dim_Location(LocationID);
ALTER TABLE Fact_Trips ADD CONSTRAINT FK_Trips_TimeID FOREIGN KEY (TimeID) REFERENCES Dim_Time(TimeID);
ALTER TABLE Fact_Trips ADD CONSTRAINT FK_Trips_CarID FOREIGN KEY (CarID) REFERENCES Dim_Car(CarID);
ALTER TABLE Fact_Trips ADD CONSTRAINT FK_Trips_DriverID FOREIGN KEY (DriverID) REFERENCES Dim_Driver(DriverID);
ALTER TABLE Dim_Location_State ADD CONSTRAINT FK_Location_State FOREIGN KEY (LocationID) REFERENCES Dim_Location(LocationID);
ALTER TABLE Dim_Time_Day ADD CONSTRAINT FK_Time_Day FOREIGN KEY (TimeID) REFERENCES Dim_Time(TimeID);
以上代码创建了一个包含中心事实表和四张维度表的雪花模型,其中时间和地点维度表各有一张子表用于进一步拆分。在表之间建立了外键约束,使得它们能够互相关联。