一张订单表里,“下单日期”和“发货日期”都叫日期,但回答的是两件事;订单号也不是日期、客户那样的描述信息。若把这些字段都当成同一种维度处理,报表看似能跑,含义却可能悄悄错位。
Salvatore Cagliari 的文章梳理了星型模型(star schema)中的维度类型。星型模型以记录销售、库存等业务事件和数值的事实表为中心,周围连接客户、商品、日期等维度表。角色扮演维度(role-playing dimension)让同一张日期表分别充当“下单日期”和“发货日期”,关键是明确标注角色,不能混用。退化维度(degenerate dimension)则把订单号这类没有额外描述属性的业务标识留在事实表中,既方便按单据追踪,也避免另建一张只有编号的空壳表。两者都可能出现在事实表附近,但一个解决“同一描述表承担不同语义”,另一个处理“只有标识、无须独立成表”的字段;分清边界,能减少隐蔽的指标口径错误。