
1) 【一句话结论】设计包含用户行为流水表(记录每次购买行为)和复购标识/客单价计算表(通过聚合计算复购标识及最近N次客单价),通过用户ID关联,实现复购率与客单价的关联分析。
2) 【原理/概念讲解】首先,用户行为表用于记录每一次购买的具体信息(如用户ID、购买时间、商品SKU、金额),相当于“购买流水账”。复购标识是基于用户历史购买次数判断(如购买次数≥2则标记为复购),客单价则是用户最近N次(如30天)购买金额的平均值。类比:用户行为表是超市收银记录,复购标识是“是否再次光顾”,客单价是“最近几次买的东西平均花了多少钱”。
3) 【对比与适用场景】
| 设计方案 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 单表设计 | 在用户行为表中直接添加复购标识、客单价字段 | 字段多,查询复杂,计算性能差 | 数据量小,分析简单 | 复杂查询效率低,不适合大规模数据 |
| 多表设计(用户行为表 + 复购标识表 + 客单价表) | 分表存储行为、标识、计算结果 | 通过关联查询,计算逻辑分离,查询高效 | 大规模用户行为分析,需频繁关联 | 需维护表间关联,数据更新需同步 |
4) 【示例】
用户行为表(purchase_log):
user_id (INT, 主键)purchase_time (DATETIME, 购买时间)sku (VARCHAR, 购买商品SKU)amount (DECIMAL, 购买金额)复购标识表(user_repurchase):
user_id (INT, 主键,外键关联purchase_log.user_id)is_repurchase (INT, 1=复购,0=非复购,计算逻辑:购买次数≥2则标记为1)客单价表(user_avg_amount):
user_id (INT, 主键,外键关联purchase_log.user_id)avg_amount (DECIMAL, 最近30天购买金额的平均值,计算逻辑:SELECT AVG(amount) FROM purchase_log WHERE user_id = ? AND purchase_time >= DATE_SUB(CURDATE(), INTERVAL 30 DAY))关联逻辑:通过user_id将用户行为表与复购标识表、客单价表关联,实现复购率(复购用户数/总用户数)与客单价(复购用户平均客单价)的关联分析。
5) 【面试口播版答案】
面试官您好,针对分析用户复购率与客单价的关联,我设计如下数据库表结构:首先,创建用户行为流水表(purchase_log),包含用户ID、购买时间、购买SKU、购买金额等字段,记录每一次购买行为。然后,通过聚合计算复购标识(如购买次数≥2则标记为复购)和最近30天的客单价(平均金额),分别存储在复购标识表(user_repurchase)和客单价表(user_avg_amount)中。表间通过用户ID关联,这样既能高效查询复购用户比例,又能快速计算复购用户的平均客单价,从而分析两者关联。具体来说,用户行为表用于存储原始数据,复购标识表判断是否复购,客单价表计算最近N次的平均金额,通过用户ID关联,实现复购率与客单价的关联分析。
6) 【追问清单】
7) 【常见坑/雷区】