销售订单号与采购订单号应存于FactOrders表还是单独维度表?
销售订单号/采购订单号的存储方案判断
核心得看这两个订单号是否关联了需要用于分析的业务属性,分两种场景来说:
场景1:仅作为标识,无额外分析属性
如果销售订单号、采购订单号只是用来做业务追溯(比如关联原始业务系统的订单数据),或者仅作为分组统计的唯一标识(比如按订单号汇总总金额),没有对应的额外属性(比如销售订单的客户、下单渠道;采购订单的供应商、收货状态这类需要分析的字段),那直接保留在FactOrders事实表里就够了,没必要单独建维度表。
这种情况下,订单号就是事实表的一个普通属性列,用来满足订单级的查询需求,不会带来冗余或维护成本。
场景2:关联需分析的业务属性
如果订单号背后绑定了需要参与多维分析的属性,比如:
- 销售订单:对应客户ID、下单渠道、订单状态、支付方式、配送地址
- 采购订单:对应供应商ID、采购类型、收货日期、验收状态
那必须单独创建维度表(比如DimSalesOrder、DimPurchaseOrder),把这些属性放到维度表里,FactOrders只存储订单的代理键(比如sales_order_key、purchase_order_key)。这么做的好处:
- 避免事实表冗余:同一个订单的属性不用在每条产品行里重复存储
- 支持多维分析:可以直接基于订单维度的属性做分组、筛选(比如统计“京东渠道的销售订单总销量”、“供应商A的采购订单退货率”)
- 方便维护缓慢变化属性:比如订单状态从“待发货”变“已完成”,只需要更新维度表的对应行,不用修改事实表
补充:多产品订单的特殊情况
如果同一个销售/采购订单对应FactOrders里的多条记录(比如一个订单买了3个不同产品,每条产品占一行),只要这个订单有需要分析的属性,就优先建维度表——重复存储订单属性会浪费存储空间,也会增加后续属性变更的维护成本。
内容的提问来源于stack exchange,提问作者variable
相关产品推荐
相关产品推荐

