知识卡片

星型模式用事实表与维度表拆分事件本身和事件属性

结构图卡

内容

和OLTP领域数据模型百花齐放不同,[[OLTP与OLAP访问模式的本质差异催生独立的数据仓库]] 里的数据仓库用得最多的是一种相当公式化的模式——星型模式(也叫维度建模)。模式中心 是一张事实表,每一行代表一个特定时刻发生的事件(比如一次商品购买、一次页面浏览); 事实表里有些列是数值属性(如销售价格、采购成本,用于计算利润),另一些列是指向 “维度表”的外键——维度代表这个事件发生的地点、时间、方式、原因(比如”哪个商品被卖了” 对应dim_product维度表,甚至日期本身也常用维度表表示,以便编码”是否公共假期”这类 附加信息)。因为每一行事实都被当作独立事件保留(以便后续分析获得最大灵活性), 事实表会变得极其庞大——大企业的数据仓库里事实表可能有几十PB历史交易数据,而维度表 通常小得多(数百万行级别)。这个模式之所以叫”星型”,是因为可视化表关系时,事实表 在中央、被维度表包围,连接看起来像星星发出的光芒。它的一个变体叫雪花模式:把维度 进一步拆解成子维度(比如把品牌和类别单独建表),比星型模式更规范化,但星型模式 通常仍是首选,因为分析师用起来更简单。典型数据仓库的表非常”宽”——事实表常有上百 列,维度表也可能包含大量可能与分析相关的元数据字段。

结构图

flowchart LR
    D1[dim_date 维度表] --> F[fact_sales 事实表<br/>每行=一次事件]
    D2[dim_product 维度表] --> F
    D3[dim_store 维度表] --> F
    D4[dim_customer 维度表] --> F
    F -.事实表: 数值属性+指向维度表的外键, 行数可达数十PB.-> F

参考来源

- 位置:《数据密集型应用系统设计》第三章《存储与检索》"星型和雪花型:分析的模式" (源文件:_epub-src/ch3_split_002.html) - 结论依据:原文详述星型模式以事实表为中心、每行代表一个事件,维度表代表事件发生 的地点时间方式原因,事实表因保留独立事件而变得极大,并说明雪花模式是更规范化的 变体,直接支撑本卡片的结构梳理。 - 原始内容:在模式的中心是一个所谓的事实表……事实表的每一行代表在特定时间发生的 事件……事实表中的其他列是对其他表(称为维度表)的外键引用……这个模板的变体被称为 雪花模式,其中维度被进一步分解为子维度……雪花模式比星形模式更规范化,但是星形 模式通常是首选,因为分析师使用它更简单。