Schema 类型

系统有两种 Schema 类型:Entity(实体)Event(事件)

基础概念

核心概念对比

概念定义示例
实体业务中需要分析的对象客户、产品、门店
事件实体之间发生的业务行为下单、支付、出库
ER 模型描述实体与关系的结构图订单 → 店铺 → 地理位置
与数仓概念的区别

实体和事件的概念与数仓中的维度表(dim)和明细表(dwd)类似,但侧重点不同。这里更强调业务语义上的"对象"与"行为",而非技术层面的"维度"与"事实"。

建模时,需要根据实际业务场景合理划分实体和事件,并建立它们之间的关联关系。

Entity(实体表)

实体表用于描述业务中的核心对象,例如:客户、产品、门店、员工等。

建模要求

  • 必须定义主键字段:作为实体的唯一标识,用于与其他实体表或事件表建立关联

Event(事件表)

事件表用于记录业务中发生的行为或交易,例如:订单、支付、退货、登录等。

建模要求

  • 必须定义唯一的时间戳字段:标识事件发生的时间点

时间戳字段说明

时间戳字段用于确定问答时的默认时间维度。

以订单表为例,通常包含多个时间字段:下单时间、支付时间、发货时间等。在 Schema 中,需要选择其中一个作为时间戳字段,系统会将其作为默认的统计时间。

示例:用户提问"去年销售额 TOP10 的产品"时,系统会自动使用时间戳字段进行时间范围筛选。

对于涉及多个时间条件的问题,如"上月下单、本月发货的订单",系统仍能识别并分别匹配到对应的时间字段。


实体关联

实体之间以及事件与实体之间可以建立关联关系,类似于数据库中的外键。

配置方式

在 Schema 配置中,将字段类型设置为"实体"(object),然后选择对应的实体表即可完成关联。系统会通过该字段与目标实体表的主键进行匹配,实现表与表之间的连接。

关联规则

关联类型是否允许示例
实体 → 实体✅ 允许门店 → 区域
事件 → 实体✅ 允许订单 → 客户、订单 → 产品
事件 → 事件✅ 允许交付 → 生产 → 订单 → 线索、订单 → 支付记录

字段命名规范

字段命名应遵循原子化原则,确保语义清晰、无冗余。

Schema 中的字段名称直接影响问答的匹配准确度。

实体表示例

数据库中产品表的字段可能命名为"产品ID"、"产品名称"、"产品类型"。在 Schema 中建议调整为:

  • 表名:产品
  • 字段名:ID、名称、类型

去除重复的表名前缀后,字段语义更加清晰,问答匹配度也会相应提升。

事件表示例

事件表中的关联字段命名需要与实体表名称保持一致。

例如订单表中有"产品ID"字段,在 Schema 中应:

  1. 将字段类型设置为"实体"(object)
  2. 关联表选择"产品"
  3. 字段名从"产品ID"修改为"产品"

这样配置后,字段名与关联的实体表名称一致,系统能够更准确地理解数据关系,提升问答匹配效果。


实战示例:从宽表拆解实体与事件

下面通过一个零售场景的订单宽表,演示如何识别和拆分实体表与事件表,结合上面的说明内容,注意建模后模型同原表的字段命名变化。

订单宽表

订单日期 店铺 code 店铺名称 店铺所在城市 sku 编码 sku 名称 产品尺寸 产品颜色 产品重量 产品单价 spu 产品大类 产品子类 产品线 产品数量 订单金额 订单状态 订单创建时间
2026-02-05 SH0089 都市家居优选店 上海市 SKU2026020501 纯棉磨毛四件套 2.0m×2.3m 浅灰蓝 1.8kg 239.9 SPU001 家纺用品 床品套件 纯棉系列 1 239.9 已付款 2026-02-05 09:23:15
2026-02-05 BJ0126 数码潮品体验店 北京市 SKU2026020502 无线蓝牙耳机 5cm×3cm 曜石黑 0.08kg 199.0 SPU028 3C 数码 音频设备 便携系列 2 398.0 已发货 2026-02-05 10:15:42
2026-02-06 GZ0057 生鲜果蔬直供店 广州市 SKU2026020601 贵妃芒精品装 单果 200-300g 金黄 2.5kg 45.8 SPU106 生鲜食品 热带水果 精品果系列 1 45.8 待收货 2026-02-06 08:50:33
2026-02-06 CD0093 户外出行装备店 成都市 SKU2026020602 折叠露营椅 展开 60×55×80cm 军绿色 1.2kg 89.9 SPU063 户外用品 露营装备 折叠系列 3 269.7 已付款 2026-02-06 14:38:29
2026-02-04 HZ0072 美妆个护专营店 杭州市 SKU2026020401 氨基酸洁面乳 100g/支 透白 0.12kg 69.9 SPU091 美妆个护 面部清洁 温和系列 1 69.9 已完成 2026-02-04 16:22:08

拆解分析

整张宽表的基调是一个事件表,因为它记录了每次订单发生时的所有信息。但其中包含了很多维度信息,比如店铺、产品等,这些应该定义为实体表

我们可以把相关信息抽取出来:

归属字段
店铺实体表店铺 code、店铺名称、店铺所在城市
产品实体表(SKU)sku 编码、sku 名称、产品尺寸、产品颜色、产品重量、产品单价、spu
产品实体表(SPU)spu、产品大类、产品子类、产品线
订单事件表订单日期、订单创建时间、订单状态(属性);产品数量、订单金额(度量值)
关于 SKU 与 SPU

产品实体表在业务上分为 SKUSPU 两个不同层级:

  • SKU(Stock Keeping Unit)是最细粒度的产品单元
  • SPU(Standard Product Unit)是更高级别的产品,通常代表一个产品系列

拆分结果

这张宽表会被分成 4 张表

  1. 店铺实体表
  2. SKU 实体表
  3. SPU 实体表
  4. 订单事件表

表关系图

SPU(实体表)
🔑 spu
  产品大类
  产品子类
  产品线
SKU(实体表)
🔑 编码
  名称
  尺寸
  颜色
  重量
  单价
🔗 spu → SPU
店铺(实体表)
🔑 code
  名称
  所在城市
订单(事件表)
⏱️日期
  sku编码
  店铺code
📊数量
📊金额
  订单状态
  创建时间
关联
🔗 sku编码 → SKU
🔗 店铺code → 店铺

图例说明: 🔑 主键 🔗 外键关联 ⏱️ 时间戳 📊 度量值

关联关系:

             ┌─────────┐
             │   SPU   │
             └────▲────┘

             ┌────┴────┐       ┌─────────┐
             │   SKU   │       │  店铺   │
             └────▲────┘       └────▲────┘
                  │                 │
                  └────────┬────────┘

                    ┌──────┴──────┐
                    │  订单       │
                    └─────────────┘

其中 SKU 和 SPU 有关联,订单事件表与所有实体表关联。

正是因为 SKU 和 SPU 有关联,所以即使订单事件表中只存放了 sku编码,我们也可以通过 sku编码 关联到 SKU 实体表,再关联 SPU 实体表,从而根据 SPU 信息进行统计和分析。