📜  数据仓库-模式(1)

📅  最后修改于: 2023-12-03 15:39:57.839000             🧑  作者: Mango

数据仓库模式

什么是数据仓库模式?

数据仓库模式是一种设计数据仓库的方法,它是一个逻辑模型,定义了如何在数据仓库中组织数据和关系。它是一种面向主题的模型,主要关注业务中的主题,而不是运营过程。数据仓库模型通常包含星型模型和雪花模型。

星型模型

星型模型是数据仓库模型中最简单和最流行的模型。它包含一个中心表,称为事实表,以及一些周围的维度表。事实表是包含数字度量的表,而维度表是包含描述事实表中数据的信息的表。

优点
  • 易于理解和实现,可以快速构建数据仓库
  • 易于查询和报告,支持快速的OLAP查询
缺点
  • 星型模型可能无法处理复杂的关系
  • 星型模型可能难以对处理低基数(基数指变量的取值个数)的维度
示例代码

以下是一个简单的星型模型示例代码:

CREATE TABLE Fact_Sales (
  SalesID INT IDENTITY PRIMARY KEY,
  DateKey INT NOT NULL REFERENCES Dim_Date(DateKey),
  ProductKey INT NOT NULL REFERENCES Dim_Product(ProductKey),
  StoreKey INT NOT NULL REFERENCES Dim_Store(StoreKey),
  SalesAmount DECIMAL(10,2) NOT NULL 
);

CREATE TABLE Dim_Date (
  DateKey INT PRIMARY KEY,
  Date DATE NOT NULL,
  Year SMALLINT NOT NULL,
  Quarter TINYINT NOT NULL,
  Month TINYINT NOT NULL,
  Day TINYINT NOT NULL
);

CREATE TABLE Dim_Product (
  ProductKey INT PRIMARY KEY,
  Product VARCHAR(50) NOT NULL,
  Category VARCHAR(50) NOT NULL,
  SubCategory VARCHAR(50) NOT NULL
);

CREATE TABLE Dim_Store (
  StoreKey INT PRIMARY KEY,
  Store VARCHAR(50) NOT NULL,
  City VARCHAR(50) NOT NULL,
  State VARCHAR(50) NOT NULL
);
雪花模型

雪花模型扩展了星型模型,通过将维度表分解成更小的表来减少重复数据。雪花模型的维度表通常具有层次结构,其中父维度具有子维度。

优点
  • 可以减少数据冗余
  • 支持更灵活的维度层级
缺点
  • 雪花模型可能导致更复杂的查询
  • 雪花模型可能减慢查询速度
示例代码

以下是一个简单的雪花模型示例代码:

CREATE TABLE Fact_Sales (
  SalesID INT IDENTITY PRIMARY KEY,
  DateKey INT NOT NULL REFERENCES Dim_Date(DateKey),
  ProductKey INT NOT NULL REFERENCES Dim_Product(ProductKey),
  StoreKey INT NOT NULL REFERENCES Dim_Store(StoreKey),
  SalesAmount DECIMAL(10,2) NOT NULL 
);

CREATE TABLE Dim_Date (
  DateKey INT PRIMARY KEY,
  Date DATE NOT NULL,
  Year SMALLINT NOT NULL,
  Quarter TINYINT NOT NULL,
  Month TINYINT NOT NULL,
  Day TINYINT NOT NULL
);

CREATE TABLE Dim_Product_Category (
  CategoryKey INT PRIMARY KEY,
  Category VARCHAR(50) NOT NULL
);

CREATE TABLE Dim_Product_Subcategory (
  SubcategoryKey INT PRIMARY KEY,
  Subcategory VARCHAR(50) NOT NULL,
  CategoryKey INT NOT NULL REFERENCES Dim_Product_Category(CategoryKey)
);

CREATE TABLE Dim_Product (
  ProductKey INT PRIMARY KEY,
  Product VARCHAR(50) NOT NULL,
  SubcategoryKey INT NOT NULL REFERENCES Dim_Product_Subcategory(SubcategoryKey)
);

CREATE TABLE Dim_Store (
  StoreKey INT PRIMARY KEY,
  Store VARCHAR(50) NOT NULL,
  City VARCHAR(50) NOT NULL,
  State VARCHAR(50) NOT NULL
);
结论

数据仓库模式是设计数据仓库的一种方法。星型模型是其中最简单和最流行的模型,而雪花模型扩展了星型模型,通过维度表分解来减少数据冗余。您可以根据不同的需求选择合适的模型。