141838-URS推广模块数据库设计.md 11 KB

URS推广模块数据库设计

创建时间: 2025年06月14日 18:38
文档类型: 数据库设计
关联任务: URS推广模块创建规划

1. 数据库表概览

URS推广模块包含以下核心数据表:

  1. urs_promotion_user_referrals - URS用户推荐关系表
  2. urs_promotion_user_talents - URS达人等级表
  3. urs_promotion_profits - URS团队收益记录表
  4. urs_promotion_referral_codes - URS推荐码表
  5. urs_promotion_talent_configs - URS达人等级配置表
  6. urs_promotion_profit_rules - URS收益分成规则表
  7. urs_promotion_referral_changes - URS推荐关系修改记录表
  8. urs_promotion_user_relation_cache - URS用户关系缓存表
  9. urs_promotion_invite_rewards - URS邀请奖励记录表
  10. urs_promotion_referral_code_usages - URS邀请码使用记录表

2. 表结构详细设计

2.1 URS用户推荐关系表 (urs_promotion_user_referrals)

存储URS用户与其直接推荐人的关系,是URS推广系统的核心基础表。

CREATE TABLE `kku_urs_promotion_user_referrals` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `user_id` bigint unsigned NOT NULL COMMENT '用户ID',
  `referrer_id` bigint unsigned NOT NULL COMMENT '推荐人ID',
  `referral_code` varchar(32) DEFAULT NULL COMMENT '使用的推荐码',
  `referral_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '推荐时间',
  `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态:1有效,0无效',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_user_id` (`user_id`),
  KEY `idx_referrer_id` (`referrer_id`),
  KEY `idx_referral_code` (`referral_code`),
  KEY `idx_referral_time` (`referral_time`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='URS用户推荐关系表';

2.2 URS达人等级表 (urs_promotion_user_talents)

存储URS用户的达人等级信息和团队统计数据。

CREATE TABLE `kku_urs_promotion_user_talents` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `user_id` bigint unsigned NOT NULL COMMENT '用户ID',
  `talent_level` tinyint NOT NULL DEFAULT '0' COMMENT '达人等级:0无,1初级,2中级,3高级,4资深,5顶级',
  `direct_count` int NOT NULL DEFAULT '0' COMMENT '直推人数',
  `promotion_count` int NOT NULL DEFAULT '0' COMMENT '团队总人数',
  `last_level_update_time` timestamp NULL DEFAULT NULL COMMENT '最后等级更新时间',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_user_id` (`user_id`),
  KEY `idx_talent_level` (`talent_level`),
  KEY `idx_direct_count` (`direct_count`),
  KEY `idx_promotion_count` (`promotion_count`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='URS达人等级表';

2.3 URS团队收益记录表 (urs_promotion_profits)

记录URS团队收益分成的详细信息。

CREATE TABLE `kku_urs_promotion_profits` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `user_id` bigint unsigned NOT NULL COMMENT '获得收益的用户ID',
  `promotion_member_id` bigint unsigned NOT NULL COMMENT '团队成员ID(产生收益的用户)',
  `source_id` bigint unsigned NOT NULL COMMENT '收益来源ID',
  `source_type` varchar(32) NOT NULL COMMENT '收益来源类型',
  `relation_type` varchar(16) NOT NULL COMMENT '关系类型:direct直推,indirect间推',
  `relation_level` tinyint NOT NULL DEFAULT '1' COMMENT '推荐层级:1直推,2-20间推',
  `original_amount` decimal(30,10) NOT NULL DEFAULT '0.0000000000' COMMENT '原始收益金额',
  `profit_amount` decimal(30,10) NOT NULL DEFAULT '0.0000000000' COMMENT '分成收益金额',
  `profit_rate` decimal(8,6) NOT NULL DEFAULT '0.000000' COMMENT '分成比例',
  `talent_level` tinyint NOT NULL DEFAULT '0' COMMENT '获得收益时的达人等级',
  `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态:1正常,0取消',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_promotion_member_id` (`promotion_member_id`),
  KEY `idx_source` (`source_type`,`source_id`),
  KEY `idx_relation_type` (`relation_type`),
  KEY `idx_relation_level` (`relation_level`),
  KEY `idx_created_at` (`created_at`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='URS团队收益记录表';

2.4 URS推荐码表 (urs_promotion_referral_codes)

管理URS用户的推荐码信息。

CREATE TABLE `kku_urs_promotion_referral_codes` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `user_id` bigint unsigned NOT NULL COMMENT '用户ID',
  `code` varchar(32) NOT NULL COMMENT '推荐码',
  `type` varchar(16) NOT NULL DEFAULT 'default' COMMENT '推荐码类型:default默认,custom自定义',
  `usage_count` int NOT NULL DEFAULT '0' COMMENT '使用次数',
  `max_usage` int NOT NULL DEFAULT '0' COMMENT '最大使用次数,0为无限制',
  `expire_time` timestamp NULL DEFAULT NULL COMMENT '过期时间,NULL为永不过期',
  `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态:1启用,0禁用',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_code` (`code`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_type` (`type`),
  KEY `idx_status` (`status`),
  KEY `idx_expire_time` (`expire_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='URS推荐码表';

2.5 URS达人等级配置表 (urs_promotion_talent_configs)

配置URS达人等级的要求和权益。

CREATE TABLE `kku_urs_promotion_talent_configs` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `level` tinyint NOT NULL COMMENT '等级:0无,1初级,2中级,3高级,4资深,5顶级',
  `name` varchar(32) NOT NULL COMMENT '等级名称',
  `direct_count_required` int NOT NULL DEFAULT '0' COMMENT '所需直推人数',
  `promotion_count_required` int NOT NULL DEFAULT '0' COMMENT '所需团队总人数',
  `profit_rate` decimal(8,6) NOT NULL DEFAULT '0.000000' COMMENT '间推分成比例',
  `benefits` json DEFAULT NULL COMMENT '等级权益JSON',
  `icon` varchar(255) DEFAULT NULL COMMENT '等级图标',
  `description` text COMMENT '等级描述',
  `sort_order` int NOT NULL DEFAULT '0' COMMENT '排序权重',
  `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态:1启用,0禁用',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_level` (`level`),
  KEY `idx_sort_order` (`sort_order`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='URS达人等级配置表';

2.6 URS收益分成规则表 (urs_promotion_profit_rules)

配置不同收益来源的分成规则。

CREATE TABLE `kku_urs_promotion_profit_rules` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `source_type` varchar(32) NOT NULL COMMENT '收益来源类型',
  `name` varchar(64) NOT NULL COMMENT '规则名称',
  `direct_profit_rate` decimal(8,6) NOT NULL DEFAULT '0.050000' COMMENT '直推分成比例',
  `max_indirect_level` tinyint NOT NULL DEFAULT '20' COMMENT '最大间推层级',
  `min_amount` decimal(30,10) NOT NULL DEFAULT '0.0000000000' COMMENT '最小分成金额',
  `max_amount` decimal(30,10) NOT NULL DEFAULT '0.0000000000' COMMENT '最大分成金额,0为无限制',
  `rules` json DEFAULT NULL COMMENT '扩展规则JSON',
  `description` text COMMENT '规则描述',
  `sort_order` int NOT NULL DEFAULT '0' COMMENT '排序权重',
  `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态:1启用,0禁用',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_source_type` (`source_type`),
  KEY `idx_status` (`status`),
  KEY `idx_sort_order` (`sort_order`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='URS收益分成规则表';

3. 索引设计说明

3.1 主要查询场景

  1. 推荐关系查询:根据用户ID查询推荐人和被推荐人
  2. 达人等级查询:根据用户ID查询达人等级和团队统计
  3. 收益记录查询:根据用户ID、时间范围查询收益记录
  4. 推荐码查询:根据推荐码查询归属用户和使用情况

3.2 索引优化策略

  1. 唯一索引:确保数据唯一性,如用户推荐关系、推荐码等
  2. 复合索引:支持多条件查询,如收益来源类型+ID
  3. 时间索引:支持时间范围查询和统计分析
  4. 状态索引:支持按状态筛选有效数据

4. 数据完整性约束

4.1 外键约束

  • 所有user_id字段关联users表
  • referrer_id关联users表
  • 确保推荐关系的用户存在性

4.2 业务约束

  • 用户不能推荐自己
  • 推荐关系不能形成循环
  • 达人等级必须符合配置要求
  • 收益分成比例必须在合理范围内

5. 数据初始化

5.1 达人等级配置初始化

INSERT INTO `kku_urs_promotion_talent_configs` (`level`, `name`, `direct_count_required`, `promotion_count_required`, `profit_rate`, `sort_order`) VALUES
(0, '非达人', 0, 0, 0.000000, 0),
(1, 'URS初级达人', 5, 10, 0.010000, 1),
(2, 'URS中级达人', 10, 30, 0.015000, 2),
(3, 'URS高级达人', 20, 100, 0.020000, 3),
(4, 'URS资深达人', 50, 300, 0.025000, 4),
(5, 'URS顶级达人', 100, 1000, 0.030000, 5);

5.2 收益分成规则初始化

INSERT INTO `kku_urs_promotion_profit_rules` (`source_type`, `name`, `direct_profit_rate`, `max_indirect_level`, `sort_order`) VALUES
('urs_farm_harvest', 'URS农场收获', 0.050000, 20, 1),
('urs_task_complete', 'URS任务完成', 0.030000, 10, 2),
('urs_item_sell', 'URS物品出售', 0.020000, 5, 3);

6. 性能优化建议

6.1 分表策略

  • 收益记录表按月分表,提高查询性能
  • 用户关系缓存表按用户ID范围分表

6.2 缓存策略

  • 达人等级配置使用Redis缓存
  • 用户推荐关系使用缓存加速查询
  • 收益分成规则使用内存缓存

6.3 归档策略

  • 定期归档历史收益记录
  • 清理过期的推荐码使用记录
  • 备份重要的推荐关系数据

备注: 本数据库设计基于Promotion模块的成熟架构,针对URS业务场景进行了优化和定制。