文档目录
营销工具表

简介

本设计文档聚焦于 DouPHP 营销工具模块的数据库表结构,覆盖优惠券、促销活动(以分享推广为主)、分销佣金与层级、以及分享推广等关键能力。文档从数据模型出发,解释优惠券发放与使用、活动规则配置、分销佣金计算、分享推广等业务逻辑的数据支撑,并提供表关系设计与性能优化策略,面向营销系统开发者与运营人员提供完整的参考。

项目结构

营销相关表主要分布在以下模块的备份 SQL 中:

  • 优惠券模块:包含优惠券主表与日志表
  • 分销模块:包含分销申请、等级、等级变更日志、上下级关系
  • 分享模块:包含分享单记录
graph TB
subgraph "营销模块"
C["优惠券<br/>dou_coupon / dou_coupon_log"]
D["分销<br/>dou_distribution / dou_distribution_level / dou_distribution_level_log / dou_distribution_relation"]
S["分享推广<br/>dou_share"]
end
C --> |"关联订单号"| D
S --> |"用户维度追踪"| D

核心组件

  • 优惠券体系
    • 优惠券主表:定义券类型、面值、门槛、适用范围、有效期、可叠加、首单限制、总量与已发量等
    • 优惠券日志表:记录领取、使用、状态、关联订单、IP 等审计信息
  • 分销体系
    • 分销申请表:记录会员申请、处理记录与状态
    • 分销等级表:定义直推与间推佣金比例、升级条件、排序
    • 等级变更日志:记录用户等级变化、触发金额、关联订单
    • 分销关系表:维护用户与上级用户的层级关系
  • 分享推广
    • 分享单表:记录分享任务、审核状态与处理记录

架构总览

营销工具的数据流围绕“活动配置—发放/参与—核销/结算—统计”展开:

  • 优惠券:通过主表配置规则,日志表记录领取与使用,结合订单号完成核销闭环
  • 分销:通过等级表定义佣金比例,关系表构建推广链路,申请与等级日志记录生命周期
  • 分享:通过分享单记录推广行为与审核流程,为后续转化归因提供依据
sequenceDiagram
participant U as "用户"
participant O as "订单系统"
participant CP as "优惠券服务"
participant CL as "优惠券日志"
participant DS as "分销服务"
participant DR as "分销关系"
participant DL as "等级日志"
participant SH as "分享服务"
U->>CP : 领取优惠券
CP-->>U : 返回领取结果
U->>O : 下单并尝试使用优惠券
O->>CP : 校验券规则与可用性
CP->>CL : 记录使用(订单号/时间/IP)
O-->>U : 返回支付结果
U->>DS : 成为分销员(申请)
DS->>DR : 建立上下级关系
O-->>DS : 订单结算触发佣金
DS->>DL : 记录等级变更/佣金计算
U->>SH : 发起分享推广
SH-->>U : 生成分享单/待审核

详细组件分析

优惠券表设计

  • 优惠券主表
    • 标识与名称:自增 ID、名称、唯一编号
    • 券类型与面额:券类型、面值、最大折扣
    • 使用限制:每人限领数量、是否可叠加、是否仅限首单
    • 门槛与范围:使用条件金额、适用范围类型与值(如商品/类目)
    • 有效期:开始与结束时间
    • 展示与排序:简介、图片、排序字段
    • 总量控制:总量、已发放量
    • 状态:启用/禁用
  • 优惠券日志表
    • 主体:用户 ID、券 ID
    • 事件:领取时间、使用时间、订单号、IP
    • 状态:记录券生命周期状态
    • 时间戳:创建时间
erDiagram
DOU_COUPON {
int id PK
varchar name
varchar coupon_sn
varchar type
decimal face_value
decimal max_discount
smallint limit_per_user
int total_quantity
int issued_quantity
tinyint is_stackable
tinyint is_first_order_only
decimal condition
varchar scope_type
text scope_value
datetime start_at
datetime end_at
varchar brief
varchar image
tinyint sort
tinyint status
datetime created_at
}
DOU_COUPON_LOG {
int id PK
mediumint user_id
mediumint coupon_id
datetime claimed_at
datetime used_at
varchar order_sn
varchar ip
tinyint status
datetime created_at
}
DOU_COUPON ||--o{ DOU_COUPON_LOG : "被领取/使用"

分销表设计

  • 分销申请表
    • 主体:用户 ID、姓名、备注
    • 等级:当前等级 ID
    • 处理:处理记录、处理时间、状态(待处理/已通过/已拒绝等)
    • 时间戳:创建时间
  • 分销等级表
    • 名称、直推佣金比例、间推佣金比例、升级条件金额、排序、创建时间
  • 等级变更日志
    • 用户 ID、旧等级 ID、新等级 ID、触发条件值、关联订单、创建时间
  • 分销关系表
    • 用户 ID、上级用户 ID、层级深度、创建时间;唯一约束保证一对一父子关系
erDiagram
DOU_DISTRIBUTION {
int id PK
mediumint user_id
varchar name
text remark
int level_id
text handle_record
datetime handled_at
varchar status
datetime created_at
}
DOU_DISTRIBUTION_LEVEL {
int id PK
varchar name
decimal direct_reward_percent
decimal indirect_reward_percent
decimal upgrade_condition_amount
tinyint sort
datetime created_at
}
DOU_DISTRIBUTION_LEVEL_LOG {
int id PK
int user_id
int old_level_id
int new_level_id
decimal condition_value
varchar order_sn
datetime created_at
}
DOU_DISTRIBUTION_RELATION {
int id PK
int user_id
int parent_user_id
tinyint level
datetime created_at
}
DOU_DISTRIBUTION }o--|| DOU_DISTRIBUTION_LEVEL : "level_id"
DOU_DISTRIBUTION_LEVEL_LOG }o--|| DOU_DISTRIBUTION_LEVEL : "old/new level"
DOU_DISTRIBUTION_RELATION }o--|| DOU_DISTRIBUTION_RELATION : "parent -> child"

分享推广表设计

  • 分享单表
    • 分享单号、用户 ID、处理记录、处理时间、状态(待审核/驳回/通过)、创建时间
erDiagram
DOU_SHARE {
int id PK
varchar share_sn
mediumint user_id
text handle_record
datetime handled_at
tinyint status
datetime created_at
}

业务逻辑与数据模型映射

  • 优惠券发放与使用
    • 发放:写入日志表,更新主表已发量
    • 使用:校验规则(门槛、范围、有效期、首单限制、叠加),写入日志表并绑定订单号
  • 活动规则配置
    • 通过主表的范围类型与值实现商品/类目/全站等范围控制
    • 通过阈值与最大折扣控制优惠力度
  • 分销佣金计算
    • 基于等级表的比例计算直推与间推佣金
    • 通过关系表确定推广链路,结合订单结算触发佣金入账
    • 等级变更日志记录升级事件与触发条件
  • 分享推广
    • 分享单用于记录推广行为与审核流程,为后续转化归因提供基础

依赖关系分析

  • 优惠券与订单:通过订单号在日志表中关联订单,形成核销闭环
  • 分销与用户:通过关系表构建多级推广网络,支持直推与间推
  • 分享与用户:通过分享单记录推广行为,便于后续统计与归因
graph LR
A["订单"] -- "order_sn" --> B["优惠券日志"]
B -- "coupon_id" --> C["优惠券主表"]
D["用户"] -- "user_id" --> E["分销申请"]
E -- "level_id" --> F["分销等级"]
G["用户"] -- "user_id" --> H["分销关系"]
I["用户"] -- "user_id" --> J["分享单"]

性能考虑

  • 索引建议
    • 优惠券日志:按 user_id、coupon_id、order_sn 建立索引,提升领取/使用查询与对账效率
    • 分销关系:按 parent_user_id 建立索引,加速上级下级的查找与佣金计算
    • 分销等级日志:按 user_id、order_sn 建立索引,便于等级变更与结算追溯
  • 并发与一致性
    • 优惠券总量与已发量更新需加锁或使用原子操作,避免超发
    • 使用优惠券时进行幂等校验,防止重复核销
  • 存储与归档
    • 日志类表增长快,建议定期归档或分区,保持热数据表体积可控
  • 查询优化
    • 常用筛选字段(如状态、时间范围)应纳入复合索引
    • 大范围扫描尽量使用覆盖索引减少回表

故障排查指南

  • 优惠券无法使用
    • 检查有效期、门槛、适用范围、是否首单限制、是否可叠加
    • 核对日志中的使用时间与订单号是否正确
  • 分销佣金异常
    • 检查等级比例配置是否正确
    • 确认分销关系链是否完整,是否存在断链或重复关系
    • 查看等级变更日志,确认升级条件是否满足
  • 分享推广未生效
    • 检查分享单状态是否为通过
    • 核对用户 ID 与分享单号的对应关系

结论

本设计文档基于现有 SQL 备份文件,梳理了优惠券、分销与分享推广的核心表结构与关系,明确了各表在营销活动中的职责与交互方式。通过合理的索引与并发控制策略,可保障高并发场景下的稳定性与准确性。建议在后续迭代中持续完善范围配置、风控策略与数据统计能力,以满足更复杂的营销需求。

附录

  • 术语说明
    • 直推:直接邀请的用户产生的交易
    • 间推:间接邀请的用户(下级下级)产生的交易
    • 叠加:多张优惠券同时使用的能力
  • 扩展建议
    • 增加风控字段:黑名单、风险评分、设备指纹等
    • 增强统计:按日/周/月聚合的券使用率、分销转化率、分享 ROI 等指标表
添加日期:2026-10-05