35 KiB
35 KiB
阶段1:业务分析和表结构设计
阶段概述
时间: 2天
目标: 分析现有业务,识别核心表和冗余表,设计新的表结构
优先级: P0 (最高优先级)
详细任务清单
1.1 业务表分析 (0.5天)
任务描述
分析现有82个表,识别核心业务表、辅助表和冗余表
具体工作
- 分析表的数据量和使用频率
- 识别核心业务流程相关表
- 标记冗余和废弃的表
- 梳理表之间的关联关系
表分类结果
🔥 核心业务表 (必须迁移)
用户相关:
- user (2,201条) - 用户主表
- user_account (3,452条) - 用户账户信息
- user_login_log (11,407条) - 登录日志
商品相关:
- goods (503条) - 商品主表
- goods_list (1,844条) - 商品奖品列表
- goods_type (13条) - 商品类型配置
- goods_extend (34条) - 商品扩展配置
订单相关:
- order (15条) - 订单主表
- order_list (67条) - 订单详情
钻石系统:
- diamond_orders (398条) - 钻石订单 (有实际交易数据)
- diamond_products (5条) - 钻石商品配置
财务相关:
- profit_money (26,061条) - 余额明细
- profit_integral (33,487条) - 积分明细
- profit_money2 (19,491条) - 积分明细2
- profit_pay (3,310条) - 支付记录
优惠券相关:
- coupon (19条) - 优惠券模板
- coupon_receive (7,846条) - 用户优惠券
- user_coupon (0条) - 欧气券
任务系统:
- task_list (9条) - 任务配置
- user_task_list (4,899条) - 用户任务记录
其他核心:
- shang (106条) - 奖品等级配置
- config (25条) - 系统配置
辅助业务表
管理相关:
- admin (3条) - 管理员
- admin_login_log (398条) - 管理员登录日志(数据不迁移,之前已表结构)
- admin_operation_log (94,986条) - 操作日志(数据不迁移,之前已表结构)
统计分析:
- user_statistics (7条) - 用户统计
- reward (915条) - 奖励记录
- picture (1,175条) - 图片管理
VIP系统:
- quan_yi_level (75条) - 权益等级
- quan_yi_level_jiang (225条) - 权益奖品
- user_quan_yi_level_jiang (1,393条) - 用户权益记录
签到系统:
- sign_config (35条) - 签到配置
- user_sign (702条) - 用户签到记录
地址管理:
- user_address (51条) - 用户地址
- delivery (11条) - 快递公司
❌ 废弃表 (不迁移)
空表或废弃功能:
- ads (0条) - 广告系统
- category (0条) - 分类(已废弃)
- error_log (0条) - 错误日志
- ff_* 系列 (商城功能,已废弃)
- kk_* 系列 (发货系统,已废弃)
- market* (集市功能,已废弃)
- rank_* (排行榜,已废弃)
- user_vip (0条) - VIP表(已废弃)
- withdraw (0条) - 提现(已废弃)
- yushou (0条) - 预售(已废弃)
测试或临时表:
- diamond_* (钻石系统,测试功能)
- notify_log (通知日志,可用日志系统替代)
- user_verification_codes (验证码,可用Redis替代)
- wxpay_log (支付日志,可合并到profit_pay)
1.2 表结构重新设计 (1天)
任务描述
基于snake_case命名规范,重新设计表结构
商品表字段分析
基于数据库实际查询结果,goods表共有54个字段,按业务功能分类如下:
🔥 核心业务字段 (必须迁移)
基础信息 (7字段):
- id: 主键
- category_id: 分类ID
- title: 商品标题
- imgurl: 商品图片
- imgurl_detail: 详情图片
- prize_imgurl: 奖品图片
- goods_describe: 商品描述 (402/503商品有描述)
价格库存 (4字段):
- price: 商品价格
- stock: 总库存
- sale_stock: 已售库存
- show_price: 显示价格(营销)
状态控制 (4字段):
- type: 商品类型 (1一番赏 2无限赏等)
- status: 状态 (0下架 1上架)
- sort: 排序权重
- new_is: 新品标识
时间字段 (4字段):
- sale_time: 开售时间
- addtime: 创建时间
- update_time: 更新时间
- delete_time: 删除时间
⚡ 重要功能字段 (高使用率)
福利屋功能 (5字段) - 383/503商品启用:
- is_flw: 福利屋开关
- flw_start_time: 开始时间
- flw_end_time: 结束时间
- open_time: 开放时间
- is_open: 是否开放
限购控制 (4字段):
- daily_xiangou: 每日限购 (重要业务逻辑)
- quanju_xiangou: 全局限购
- unlock_amount: 解锁金额门槛
- user_lv: 用户等级限制
抽奖核心 (3字段):
- prize_num: 奖品数量
- choujiang_xianzhi: 抽奖限制
- lock_is/lock_time: 锁箱功能
自动下架 (4字段) - 47/503商品启用:
- is_auto_xiajia: 自动下架开关
- xiajia_lirun: 利润阈值
- xiajia_auto_coushu: 自动抽数
- xiajia_jine: 金额阈值
🎯 特色功能字段 (中等使用率)
营销功能 (4字段):
- coupon_is/coupon_pro: 优惠券功能
- integral_is: 积分功能
- is_shou_zhe: 折扣标识
- show_is: 首页显示控制
定价策略 (4字段):
- day_price: 日价格
- mouth_price: 月价格
- mouth_pay_price: 月支付价格
- day_pay_price: 日支付价格
卡片系统 (5字段):
- card_banner: 卡片横幅
- card_set: 卡片设置JSON
- card_notice: 卡片通知
- card_num: 卡片数量
- item_card_id: 道具卡ID
同步功能 (2字段) - 21/503商品有异步代码:
- async_code: 异步同步代码
- async_date: 异步同步时间
🔧 高级功能字段 (低使用率但重要)
灵珠系统 (3字段) - 8个商品启用:
- lingzhu_is: 领主功能开关
- lingzhu_fan: 领主返还
- lingzhu_shang_id: 领主奖品ID
连击系统 (2字段):
- lian_ji_num: 连击数量
- lian_ji_shang_id: 连击奖品ID
暴怒系统 (2字段):
- rage_is: 暴怒功能开关
- rage: 暴怒值
拳王系统 (1字段):
- king_user_id: 拳王用户ID
📊 字段使用统计
高使用率字段 (>300个商品):
- is_flw: 383个商品 (福利屋功能)
- goods_describe: 402个商品 (商品描述)
中使用率字段 (20-100个商品):
- is_auto_xiajia: 47个商品 (自动下架)
- async_code: 21个商品 (异步同步)
低使用率字段 (<20个商品):
- lingzhu_is: 8个商品 (灵珠功能)
- 其他特殊功能字段
具体工作
- 统一命名规范为snake_case
- 优化数据类型和字段长度
- 规范化外键关系
- 设计合理的索引策略
核心表结构设计
用户相关表
-- 用户主表
CREATE TABLE users (
id INT IDENTITY(1,1) PRIMARY KEY,
open_id NVARCHAR(50) NOT NULL COMMENT '微信OpenID',
union_id NVARCHAR(255) NULL COMMENT '微信UnionID',
gzh_open_id NVARCHAR(255) NULL COMMENT '公众号OpenID',
mobile NVARCHAR(15) NULL COMMENT '手机号',
nickname NVARCHAR(255) NOT NULL COMMENT '昵称',
head_img NVARCHAR(500) NOT NULL COMMENT '头像URL',
parent_id INT NOT NULL DEFAULT 0 COMMENT '推荐人ID',
money DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '余额',
money2 DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '积分货币',
integral DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '积分',
score DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '评分',
ou_qi INT NOT NULL DEFAULT 0 COMMENT '欧气值',
ou_qi_level INT NOT NULL DEFAULT 0 COMMENT '欧气等级',
vip_level TINYINT NOT NULL DEFAULT 1 COMMENT 'VIP等级',
status TINYINT NOT NULL DEFAULT 1 COMMENT '状态 0禁用 1正常',
is_test INT NOT NULL DEFAULT 0 COMMENT '是否测试账号',
uid NVARCHAR(16) NOT NULL COMMENT '用户唯一标识',
click_id INT NULL COMMENT '点击ID',
draw_num INT NOT NULL DEFAULT 0 COMMENT '抽奖次数',
password NVARCHAR(40) NULL COMMENT '密码',
is_use_coupon TINYINT NOT NULL DEFAULT 0 COMMENT '是否使用优惠券',
created_at DATETIME2 NOT NULL DEFAULT GETDATE() COMMENT '创建时间',
updated_at DATETIME2 NOT NULL DEFAULT GETDATE() COMMENT '更新时间',
last_login_at DATETIME2 NULL COMMENT '最后登录时间',
-- 索引
INDEX ix_users_open_id (open_id),
INDEX ix_users_mobile (mobile),
INDEX ix_users_union_id (union_id),
INDEX ix_users_uid (uid),
INDEX ix_users_status_created (status, created_at),
INDEX ix_users_parent_id (parent_id),
-- 约束
CONSTRAINT uk_users_open_id UNIQUE (open_id),
CONSTRAINT uk_users_uid UNIQUE (uid)
) COMMENT = '用户主表';
-- 用户账户表
CREATE TABLE user_accounts (
id INT IDENTITY(1,1) PRIMARY KEY,
user_id INT NOT NULL COMMENT '用户ID',
account_token NVARCHAR(255) NOT NULL COMMENT '账户令牌',
token_num NVARCHAR(50) NOT NULL COMMENT '令牌编号',
token_time BIGINT NOT NULL COMMENT '令牌时间',
last_login_time BIGINT NOT NULL COMMENT '最后登录时间戳',
last_login_ip BIGINT NOT NULL COMMENT '最后登录IP(数值)',
last_login_ip_str NVARCHAR(45) NOT NULL COMMENT '最后登录IP(字符串)',
ip_province NVARCHAR(50) NULL COMMENT 'IP省份',
ip_city NVARCHAR(50) NULL COMMENT 'IP城市',
ip_adcode NVARCHAR(20) NULL COMMENT 'IP区域代码',
created_at DATETIME2 NOT NULL DEFAULT GETDATE() COMMENT '创建时间',
updated_at DATETIME2 NOT NULL DEFAULT GETDATE() COMMENT '更新时间',
-- 索引
INDEX ix_user_accounts_user_id (user_id),
INDEX ix_user_accounts_token (account_token),
-- 外键
CONSTRAINT fk_user_accounts_user_id FOREIGN KEY (user_id) REFERENCES users(id)
) COMMENT = '用户账户信息表';
-- 用户登录日志表
CREATE TABLE user_login_logs (
id INT IDENTITY(1,1) PRIMARY KEY,
user_id INT NOT NULL COMMENT '用户ID',
platform NVARCHAR(50) NOT NULL COMMENT '登录平台',
ip_address NVARCHAR(45) NOT NULL COMMENT 'IP地址',
location NVARCHAR(100) NULL COMMENT '登录地点',
device NVARCHAR(100) NULL COMMENT '设备信息',
device_info NVARCHAR(500) NULL COMMENT '详细设备信息',
login_time DATETIME2 NOT NULL DEFAULT GETDATE() COMMENT '登录时间',
-- 索引
INDEX ix_user_login_logs_user_id (user_id),
INDEX ix_user_login_logs_login_time (login_time),
INDEX ix_user_login_logs_platform (platform)
) COMMENT = '用户登录日志表';
商品相关表
-- 商品主表 (完整54字段结构)
CREATE TABLE goods (
id INT IDENTITY(1,1) PRIMARY KEY,
-- 基础信息
category_id INT NOT NULL DEFAULT 0 COMMENT '分类ID',
title NVARCHAR(255) NOT NULL COMMENT '商品标题',
img_url NVARCHAR(500) NOT NULL COMMENT '商品图片URL',
img_url_detail NVARCHAR(500) NOT NULL COMMENT '商品详情图片URL',
prize_img_url NVARCHAR(500) NULL COMMENT '奖品图片URL',
goods_describe NVARCHAR(300) NULL COMMENT '商品描述',
-- 价格和库存
price DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT '商品价格',
stock INT NOT NULL DEFAULT 0 COMMENT '总库存',
sale_stock INT NOT NULL DEFAULT 0 COMMENT '已售库存',
show_price NVARCHAR(100) NULL COMMENT '显示价格(营销用)',
-- 定价策略
day_price DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT '日价格',
mouth_price DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT '月价格',
mouth_pay_price DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT '月支付价格',
day_pay_price DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT '日支付价格',
-- 商品状态和类型
type TINYINT NOT NULL DEFAULT 0 COMMENT '商品类型 1一番赏 2无限赏 3擂台赏等',
status TINYINT NOT NULL DEFAULT 1 COMMENT '状态 0下架 1上架 2待审核 3预售',
sort_order INT NOT NULL DEFAULT 1 COMMENT '排序权重',
-- 显示控制
is_show TINYINT NOT NULL DEFAULT 0 COMMENT '首页显示 0显示 1不显示',
is_discount TINYINT NOT NULL DEFAULT 0 COMMENT '是否折扣 0否 1是',
is_new TINYINT NOT NULL DEFAULT 0 COMMENT '是否新品 0否 1是',
-- 锁箱功能
is_lock TINYINT NOT NULL DEFAULT 0 COMMENT '是否锁箱 0否 1是',
lock_time INT NOT NULL DEFAULT 0 COMMENT '锁箱时间(秒)',
-- 功能开关
coupon_is TINYINT NOT NULL DEFAULT 0 COMMENT '优惠券功能 0关闭 1开启',
coupon_pro INT NOT NULL DEFAULT 0 COMMENT '优惠券概率',
integral_is TINYINT NOT NULL DEFAULT 0 COMMENT '积分功能 0关闭 1开启',
-- 抽奖相关
prize_num INT NOT NULL DEFAULT 0 COMMENT '奖品数量',
draw_limit INT NOT NULL DEFAULT 0 COMMENT '抽奖限制次数',
-- 限购控制
daily_limit INT NOT NULL DEFAULT 0 COMMENT '每日限购数量 0不限制',
global_limit INT NOT NULL DEFAULT 0 COMMENT '全局限购数量 0不限制',
unlock_amount DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT '解锁金额门槛',
user_level INT NOT NULL DEFAULT -1 COMMENT '用户等级限制 -1不限制',
-- 特殊功能
rage_is TINYINT NOT NULL DEFAULT 0 COMMENT '暴怒功能 0关闭 1开启',
rage INT NOT NULL DEFAULT 0 COMMENT '暴怒值',
lingzhu_is TINYINT NOT NULL DEFAULT 0 COMMENT '灵珠功能 0关闭 1开启',
lingzhu_fan INT NOT NULL DEFAULT 0 COMMENT '灵珠返还',
lingzhu_shang_id INT NOT NULL DEFAULT 0 COMMENT '灵珠奖品ID',
lian_ji_num INT NOT NULL DEFAULT 0 COMMENT '连击数量',
lian_ji_shang_id INT NOT NULL DEFAULT 0 COMMENT '连击奖品ID',
king_user_id INT NOT NULL DEFAULT 0 COMMENT '拳王用户ID',
-- 福利屋功能 (重要!383个商品启用)
is_flw TINYINT NOT NULL DEFAULT 0 COMMENT '福利屋功能 0关闭 1开启',
flw_start_time INT NOT NULL DEFAULT 0 COMMENT '福利屋开始时间戳',
flw_end_time INT NOT NULL DEFAULT 0 COMMENT '福利屋结束时间戳',
open_time INT NOT NULL DEFAULT 0 COMMENT '开放时间戳',
is_open TINYINT NOT NULL DEFAULT 0 COMMENT '是否开放 0关闭 1开放',
-- 自动下架功能 (47个商品启用)
is_auto_xiajia TINYINT NOT NULL DEFAULT 0 COMMENT '自动下架 0关闭 1开启',
xiajia_lirun INT NOT NULL DEFAULT 0 COMMENT '下架利润阈值',
xiajia_auto_coushu INT NOT NULL DEFAULT 0 COMMENT '下架自动抽数',
xiajia_jine INT NOT NULL DEFAULT 0 COMMENT '下架金额阈值',
-- 卡片功能
card_banner NVARCHAR(500) NULL COMMENT '卡片横幅图片',
card_set NVARCHAR(MAX) NULL COMMENT '卡片设置JSON',
card_notice NVARCHAR(500) NULL COMMENT '卡片通知',
card_num INT NOT NULL DEFAULT 1 COMMENT '卡片数量',
item_card_id INT NOT NULL DEFAULT 0 COMMENT '道具卡ID',
-- 同步相关 (21个商品有异步代码)
async_code NVARCHAR(64) NULL COMMENT '异步同步代码',
async_date DATETIME2 NULL COMMENT '异步同步时间',
-- 时间字段
sale_time INT NOT NULL DEFAULT 0 COMMENT '开售时间戳',
created_at INT NOT NULL COMMENT '创建时间戳',
updated_at INT NOT NULL DEFAULT 0 COMMENT '更新时间戳',
deleted_at INT NULL COMMENT '删除时间戳',
-- 索引
INDEX ix_goods_type_status (type, status),
INDEX ix_goods_status_sort (status, sort_order DESC),
INDEX ix_goods_category_id (category_id),
INDEX ix_goods_created_at (created_at),
INDEX ix_goods_unlock_amount (unlock_amount),
INDEX ix_goods_daily_limit (daily_limit),
INDEX ix_goods_global_limit (global_limit),
INDEX ix_goods_is_flw (is_flw),
INDEX ix_goods_is_auto_xiajia (is_auto_xiajia),
INDEX ix_goods_async_code (async_code),
INDEX ix_goods_user_level (user_level),
INDEX ix_goods_sale_time (sale_time)
) COMMENT = '商品主表 - 包含完整54个字段的业务逻辑';
-- 商品奖品列表
CREATE TABLE goods_items (
id INT IDENTITY(1,1) PRIMARY KEY,
goods_id INT NOT NULL COMMENT '商品ID',
box_number INT NOT NULL COMMENT '箱号',
prize_id INT NOT NULL COMMENT '奖品等级ID',
title NVARCHAR(255) NOT NULL COMMENT '奖品名称',
stock INT NOT NULL DEFAULT 0 COMMENT '奖品库存',
surplus_stock INT NOT NULL DEFAULT 0 COMMENT '剩余库存',
img_url NVARCHAR(500) NOT NULL COMMENT '奖品图片URL',
goods_type TINYINT NOT NULL DEFAULT 1 COMMENT '奖品类型',
price DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '奖品价格',
market_price DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '市场价格',
real_probability DECIMAL(8,4) NOT NULL DEFAULT 0 COMMENT '真实概率',
parent_item_id INT NOT NULL DEFAULT 0 COMMENT '父奖品ID(子奖品用)',
sale_time DATETIME2 NULL COMMENT '开售时间',
sort_order INT NOT NULL DEFAULT 1 COMMENT '排序权重',
created_at DATETIME2 NOT NULL DEFAULT GETDATE() COMMENT '创建时间',
updated_at DATETIME2 NOT NULL DEFAULT GETDATE() COMMENT '更新时间',
-- 索引
INDEX ix_goods_items_goods_box (goods_id, box_number),
INDEX ix_goods_items_prize_id (prize_id),
INDEX ix_goods_items_parent_id (parent_item_id),
INDEX ix_goods_items_surplus_stock (surplus_stock),
-- 外键
CONSTRAINT fk_goods_items_goods_id FOREIGN KEY (goods_id) REFERENCES goods(id)
) COMMENT = '商品奖品列表';
-- 商品类型配置
CREATE TABLE goods_types (
id INT IDENTITY(1,1) PRIMARY KEY,
type_value INT NOT NULL COMMENT '类型值',
corner_text NVARCHAR(50) NOT NULL COMMENT '角标文字',
pay_wechat TINYINT NOT NULL DEFAULT 1 COMMENT '支持微信支付 0否 1是',
pay_balance TINYINT NOT NULL DEFAULT 1 COMMENT '支持余额支付 0否 1是',
pay_currency TINYINT NOT NULL DEFAULT 1 COMMENT '支持积分支付 0否 1是',
pay_currency2 TINYINT NOT NULL DEFAULT 1 COMMENT '支持积分2支付 0否 1是',
pay_coupon TINYINT NOT NULL DEFAULT 1 COMMENT '支持优惠券 0否 1是',
is_deduction TINYINT NOT NULL DEFAULT 1 COMMENT '支持抵扣 0否 1是',
created_at DATETIME2 NOT NULL DEFAULT GETDATE() COMMENT '创建时间',
updated_at DATETIME2 NOT NULL DEFAULT GETDATE() COMMENT '更新时间',
-- 索引
INDEX ix_goods_types_value (type_value),
-- 约束
CONSTRAINT uk_goods_types_value UNIQUE (type_value)
) COMMENT = '商品类型配置表';
-- 商品扩展配置
CREATE TABLE goods_extensions (
id INT IDENTITY(1,1) PRIMARY KEY,
goods_id INT NOT NULL COMMENT '商品ID',
pay_wechat TINYINT NOT NULL DEFAULT 1 COMMENT '支持微信支付 0否 1是',
pay_balance TINYINT NOT NULL DEFAULT 1 COMMENT '支持余额支付 0否 1是',
pay_currency TINYINT NOT NULL DEFAULT 1 COMMENT '支持积分支付 0否 1是',
pay_currency2 TINYINT NOT NULL DEFAULT 1 COMMENT '支持积分2支付 0否 1是',
pay_coupon TINYINT NOT NULL DEFAULT 1 COMMENT '支持优惠券 0否 1是',
is_deduction TINYINT NOT NULL DEFAULT 1 COMMENT '支持抵扣 0否 1是',
config_json NVARCHAR(MAX) NULL COMMENT '扩展配置JSON',
created_at DATETIME2 NOT NULL DEFAULT GETDATE() COMMENT '创建时间',
updated_at DATETIME2 NOT NULL DEFAULT GETDATE() COMMENT '更新时间',
-- 索引
INDEX ix_goods_extensions_goods_id (goods_id),
-- 外键
CONSTRAINT fk_goods_extensions_goods_id FOREIGN KEY (goods_id) REFERENCES goods(id),
CONSTRAINT uk_goods_extensions_goods_id UNIQUE (goods_id)
) COMMENT = '商品扩展配置表';
订单相关表
-- 订单主表 (完整33字段结构)
CREATE TABLE orders (
id INT IDENTITY(1,1) PRIMARY KEY,
order_no NVARCHAR(60) NOT NULL COMMENT '订单号',
user_id INT NOT NULL COMMENT '用户ID',
goods_id INT NOT NULL COMMENT '商品ID',
box_number INT NOT NULL COMMENT '箱号',
-- 商品信息
goods_title NVARCHAR(255) NOT NULL COMMENT '商品标题',
goods_img_url NVARCHAR(500) NULL COMMENT '商品图片URL',
goods_price DECIMAL(10,2) NOT NULL COMMENT '商品单价',
-- 订单金额
order_total DECIMAL(10,2) NOT NULL COMMENT '订单总金额',
discount_total DECIMAL(10,2) NOT NULL COMMENT '折扣后金额',
final_price DECIMAL(10,2) NOT NULL COMMENT '最终支付金额',
discount_rate DECIMAL(10,2) NOT NULL COMMENT '折扣率',
-- 支付方式
used_money DECIMAL(10,2) NOT NULL DEFAULT 0 COMMENT '使用余额',
used_integral DECIMAL(10,2) NOT NULL DEFAULT 0 COMMENT '使用积分',
used_money2 DECIMAL(10,2) NOT NULL DEFAULT 0 COMMENT '使用积分2',
used_score DECIMAL(10,2) NOT NULL DEFAULT 0 COMMENT '使用评分',
used_draw INT NOT NULL DEFAULT 0 COMMENT '使用抽奖次数',
used_item_card INT NOT NULL DEFAULT 0 COMMENT '使用道具卡',
-- 优惠券
coupon_id INT NULL DEFAULT 0 COMMENT '优惠券ID',
used_coupon DECIMAL(10,2) NOT NULL DEFAULT 0 COMMENT '优惠券抵扣金额',
-- 抽奖相关
draw_count INT NOT NULL DEFAULT 0 COMMENT '抽奖次数',
prize_card_set NVARCHAR(MAX) NULL COMMENT '奖品卡片设置JSON',
-- 订单属性
order_type TINYINT NOT NULL DEFAULT 0 COMMENT '订单类型',
pay_type TINYINT NOT NULL DEFAULT 1 COMMENT '支付方式 1微信 2支付宝',
status TINYINT NOT NULL DEFAULT 0 COMMENT '订单状态 0待支付 1已支付 2已取消',
-- 特殊标识
is_treasure TINYINT NOT NULL DEFAULT 0 COMMENT '是否秘宝 0否 1是',
is_discount TINYINT NOT NULL DEFAULT 0 COMMENT '是否折扣 0否 1是',
is_flw TINYINT NOT NULL DEFAULT 0 COMMENT '是否福利屋 0否 1是',
-- 快递相关
is_express TINYINT NOT NULL DEFAULT 0 COMMENT '是否需要快递 0否 1是',
auto_ship TINYINT NOT NULL DEFAULT 0 COMMENT '自动发货 0否 1是',
auto_ship_time INT NULL COMMENT '自动发货时间戳',
-- 广告和推广
ad_id INT NULL COMMENT '广告ID',
click_id INT NULL COMMENT '点击ID',
-- 时间字段
created_at INT NOT NULL COMMENT '创建时间戳',
paid_at INT NOT NULL DEFAULT 0 COMMENT '支付时间戳',
-- 索引
INDEX ix_orders_user_status (user_id, status),
INDEX ix_orders_goods_box (goods_id, box_number),
INDEX ix_orders_order_no (order_no),
INDEX ix_orders_created_at (created_at),
INDEX ix_orders_paid_at (paid_at),
INDEX ix_orders_status (status),
INDEX ix_orders_pay_type (pay_type),
INDEX ix_orders_order_type (order_type),
-- 约束
CONSTRAINT uk_orders_order_no UNIQUE (order_no),
-- 外键
CONSTRAINT fk_orders_user_id FOREIGN KEY (user_id) REFERENCES users(id),
CONSTRAINT fk_orders_goods_id FOREIGN KEY (goods_id) REFERENCES goods(id)
) COMMENT = '订单主表 - 包含完整33个字段的订单逻辑';
-- 订单详情表 (抽奖结果)
CREATE TABLE order_items (
id INT IDENTITY(1,1) PRIMARY KEY,
order_id NVARCHAR(60) NOT NULL COMMENT '订单号',
user_id INT NOT NULL COMMENT '用户ID',
goods_id INT NOT NULL COMMENT '商品ID',
box_number INT NOT NULL COMMENT '箱号',
goods_item_id INT NOT NULL COMMENT '商品奖品ID',
item_title NVARCHAR(255) NOT NULL COMMENT '奖品标题',
item_img_url NVARCHAR(500) NULL COMMENT '奖品图片URL',
prize_id INT NOT NULL COMMENT '奖品等级ID',
order_type TINYINT NOT NULL COMMENT '订单类型',
source TINYINT NOT NULL DEFAULT 1 COMMENT '来源 1正常抽奖',
item_price DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '奖品价格',
created_at DATETIME2 NOT NULL DEFAULT GETDATE() COMMENT '创建时间',
-- 索引
INDEX ix_order_items_order_id (order_id),
INDEX ix_order_items_user_id (user_id),
INDEX ix_order_items_goods_box (goods_id, box_number),
INDEX ix_order_items_prize_id (prize_id),
INDEX ix_order_items_created_at (created_at),
-- 外键
CONSTRAINT fk_order_items_user_id FOREIGN KEY (user_id) REFERENCES users(id),
CONSTRAINT fk_order_items_goods_id FOREIGN KEY (goods_id) REFERENCES goods(id)
) COMMENT = '订单详情表(抽奖结果)';
钻石系统表
-- 钻石商品表
CREATE TABLE diamond_products (
id INT IDENTITY(1,1) PRIMARY KEY,
name NVARCHAR(50) NOT NULL COMMENT '钻石商品名称',
product_id NVARCHAR(64) NOT NULL COMMENT '商品ID',
product_type NVARCHAR(64) NOT NULL COMMENT '商品类型',
base_reward NVARCHAR(64) NOT NULL COMMENT '基础奖励',
price DECIMAL(10,2) NOT NULL COMMENT '价格',
is_first TINYINT DEFAULT 0 COMMENT '是否首充商品 0否 1是',
first_bonus_reward NVARCHAR(64) NULL COMMENT '首充额外奖励',
first_charge_image NVARCHAR(255) NULL COMMENT '首充图片',
first_select_charge_image NVARCHAR(255) NULL COMMENT '首充选中图片',
normal_image NVARCHAR(255) NULL COMMENT '普通图片',
normal_select_image NVARCHAR(255) NULL COMMENT '普通选中图片',
sort_order INT DEFAULT 0 COMMENT '排序',
status TINYINT DEFAULT 1 COMMENT '状态 0禁用 1启用',
created_at DATETIME2 DEFAULT GETDATE() COMMENT '创建时间',
updated_at DATETIME2 DEFAULT GETDATE() COMMENT '更新时间',
-- 索引
INDEX ix_diamond_products_product_id (product_id),
INDEX ix_diamond_products_status_sort (status, sort_order),
-- 约束
CONSTRAINT uk_diamond_products_product_id UNIQUE (product_id)
) COMMENT = '钻石商品配置表';
-- 钻石订单表
CREATE TABLE diamond_orders (
id BIGINT IDENTITY(1,1) PRIMARY KEY,
order_no NVARCHAR(64) NOT NULL COMMENT '订单号',
user_id BIGINT NOT NULL COMMENT '用户ID',
diamond_id INT NOT NULL COMMENT '钻石商品ID',
product_id NVARCHAR(64) NOT NULL COMMENT '商品ID',
product_name NVARCHAR(50) NULL COMMENT '商品名称',
amount_paid DECIMAL(10,2) NOT NULL COMMENT '支付金额',
pay_method NVARCHAR(20) NOT NULL COMMENT '支付方式',
reward_log NVARCHAR(300) NULL COMMENT '奖励日志',
is_first_charge TINYINT DEFAULT 0 COMMENT '是否首充 0否 1是',
status NVARCHAR(20) DEFAULT 'pending' COMMENT '订单状态 pending待支付 paid已支付 failed失败',
created_at DATETIME2 DEFAULT GETDATE() COMMENT '创建时间',
paid_at DATETIME2 NULL COMMENT '支付时间',
-- 索引
INDEX ix_diamond_orders_order_no (order_no),
INDEX ix_diamond_orders_user_id (user_id),
INDEX ix_diamond_orders_status (status),
INDEX ix_diamond_orders_created_at (created_at),
INDEX ix_diamond_orders_paid_at (paid_at),
-- 约束
CONSTRAINT uk_diamond_orders_order_no UNIQUE (order_no),
-- 外键
CONSTRAINT fk_diamond_orders_user_id FOREIGN KEY (user_id) REFERENCES users(id),
CONSTRAINT fk_diamond_orders_diamond_id FOREIGN KEY (diamond_id) REFERENCES diamond_products(id)
) COMMENT = '钻石订单表';
1.3 数据迁移映射表 (0.5天)
任务描述
创建旧表到新表的字段映射关系
具体工作
- 创建字段映射文档
- 标记需要数据转换的字段
- 设计数据清洗规则
字段映射表
用户表映射
user -> users:
id -> id
openid -> open_id
unionid -> union_id
gzh_openid -> gzh_open_id
mobile -> mobile
nickname -> nickname
headimg -> head_img
pid -> parent_id
money -> money
money2 -> money2
integral -> integral
score -> score
ou_qi -> ou_qi
ou_qi_level -> ou_qi_level
vip -> vip_level
status -> status
istest -> is_test
uid -> uid
click_id -> click_id
draw_num -> draw_num (新增字段)
password -> password (新增字段)
is_use_coupon -> is_use_coupon (新增字段)
addtime -> created_at (时间戳转换)
update_time -> updated_at (时间戳转换)
last_login_time -> last_login_at (时间戳转换)
商品表映射 (完整54字段)
goods -> goods:
# 基础信息
id -> id
category_id -> category_id
title -> title
imgurl -> img_url
imgurl_detail -> img_url_detail
prize_imgurl -> prize_img_url
goods_describe -> goods_describe
# 价格和库存
price -> price
stock -> stock
sale_stock -> sale_stock
show_price -> show_price
# 定价策略
day_price -> day_price
mouth_price -> mouth_price
mouth_pay_price -> mouth_pay_price
day_pay_price -> day_pay_price
# 商品状态和类型
type -> type
status -> status
sort -> sort_order
# 显示控制
show_is -> is_show
is_shou_zhe -> is_discount
new_is -> is_new
# 锁箱功能
lock_is -> is_lock
lock_time -> lock_time
# 功能开关
coupon_is -> coupon_is
coupon_pro -> coupon_pro
integral_is -> integral_is
# 抽奖相关
prize_num -> prize_num
choujiang_xianzhi -> draw_limit
# 限购控制
daily_xiangou -> daily_limit
quanju_xiangou -> global_limit
unlock_amount -> unlock_amount
user_lv -> user_level
# 特殊功能
rage_is -> rage_is
rage -> rage
lingzhu_is -> lingzhu_is
lingzhu_fan -> lingzhu_fan
lingzhu_shang_id -> lingzhu_shang_id
lian_ji_num -> lian_ji_num
lian_ji_shang_id -> lian_ji_shang_id
king_user_id -> king_user_id
# 福利屋功能
is_flw -> is_flw
flw_start_time -> flw_start_time
flw_end_time -> flw_end_time
open_time -> open_time
is_open -> is_open
# 自动下架功能
is_auto_xiajia -> is_auto_xiajia
xiajia_lirun -> xiajia_lirun
xiajia_auto_coushu -> xiajia_auto_coushu
xiajia_jine -> xiajia_jine
# 卡片功能
card_banner -> card_banner
card_set -> card_set
card_notice -> card_notice
card_num -> card_num
item_card_id -> item_card_id
# 同步相关
async_code -> async_code
async_date -> async_date (datetime转换)
# 时间字段
sale_time -> sale_time (时间戳保持)
addtime -> created_at (时间戳保持)
update_time -> updated_at (时间戳保持)
delete_time -> deleted_at (时间戳保持)
订单表映射 (完整33字段)
order -> orders:
# 基础信息
id -> id
order_num -> order_no
user_id -> user_id
goods_id -> goods_id
num -> box_number
# 商品信息
goods_title -> goods_title
goods_imgurl -> goods_img_url
goods_price -> goods_price
# 订单金额
order_total -> order_total
order_zhe_total -> discount_total
price -> final_price
zhe -> discount_rate
# 支付方式
use_money -> used_money
use_integral -> used_integral
use_money2 -> used_money2
use_score -> used_score
use_draw -> used_draw
use_item_card -> used_item_card
# 优惠券
coupon_id -> coupon_id
use_coupon -> used_coupon
# 抽奖相关
prize_num -> draw_count
prize_card_set -> prize_card_set
# 订单属性
order_type -> order_type
pay_type -> pay_type
status -> status
# 特殊标识
is_mibao -> is_treasure
is_shou_zhe -> is_discount
is_flw -> is_flw
# 快递相关
kd_is -> is_express
zdfh_is -> auto_ship
zdfh_time -> auto_ship_time
# 广告和推广
ad_id -> ad_id
click_id -> click_id
# 时间字段
addtime -> created_at (时间戳保持)
pay_time -> paid_at (时间戳保持)
钻石系统映射
diamond_products -> diamond_products:
id -> id
name -> name
products_id -> product_id
products_type -> product_type
base_reward -> base_reward
price -> price
is_first -> is_first
first_bonus_reward -> first_bonus_reward
first_charge_image -> first_charge_image
first_select_charge_image -> first_select_charge_image
normal_image -> normal_image
normal_select_image -> normal_select_image
sort_order -> sort_order
status -> status
created_at -> created_at (直接映射)
updated_at -> updated_at (直接映射)
diamond_orders -> diamond_orders:
id -> id
order_no -> order_no
user_id -> user_id
diamond_id -> diamond_id
product_id -> product_id
product_name -> product_name
amount_paid -> amount_paid
pay_method -> pay_method
reward_log -> reward_log
is_first_charge -> is_first_charge
status -> status
created_at -> created_at (直接映射)
paid_at -> paid_at (直接映射)
验收标准
功能验收
- 完成所有82个表的分类分析
- 确定核心业务表清单(约30个表)
- 完成新表结构设计(snake_case命名)
- 创建完整的字段映射文档
- 设计合理的索引和约束策略
质量验收
- 表命名符合snake_case规范
- 字段类型优化合理
- 外键关系设计正确
- 索引策略覆盖主要查询场景
文档验收
- 业务表分析文档完整
- 表结构设计文档详细
- 字段映射关系清晰
- 数据转换规则明确
风险点和注意事项
业务风险
- 业务理解偏差: 可能误判某些表的重要性
- 数据关联遗漏: 可能遗漏重要的表关联关系
- 字段语义变化: 重命名可能导致语义理解偏差
技术风险
- 数据类型兼容: SQL Server与MySQL的数据类型差异
- 字符集问题: 中文数据的字符集处理
- 索引策略: 新索引策略可能影响性能
解决方案
- 业务确认: 与业务方确认表的重要性和关联关系
- 分步验证: 分批次验证表结构设计的合理性
- 充分测试: 在测试环境充分验证数据迁移效果
下一阶段准备
为阶段2准备的内容
- SQL Server环境搭建
- 数据迁移脚本模板
- 数据验证工具准备
- 回滚方案设计
交接文档
- 业务表分析报告
- 新表结构设计文档
- 字段映射关系表
- 数据转换规则文档
关键发现和重要说明
🔍 数据库分析关键发现
商品表复杂度超预期
- 实际字段数: 54个字段 (远超初期估计)
- 福利屋功能: 383/503商品启用,是核心业务功能
- 自动下架功能: 47/503商品启用,涉及利润控制
- 商品描述: 402/503商品有描述,用户体验重要字段
- 异步同步: 21/503商品有异步代码,可能涉及第三方集成(这个是从测试环境同步到正式环境的编号,因为所有的盒子都需要从测试环境试完概率后才能上线到正式环境。)
业务功能丰富度高
- 多种定价策略: 日价格、月价格、支付价格等
- 复杂抽奖逻辑: 领主、连击、暴怒、拳王等多种玩法
- 精细化控制: 限购、等级限制、解锁门槛等
- 营销功能完善: 优惠券、积分、折扣等
数据完整性良好
- 用户数据: 2,201个用户,活跃度较高
- 商品数据: 503个商品,业务功能使用率高
- 钻石系统: 398个订单,352个已支付,收入稳定
- 订单数据: 虽然总量不大(15个),但钻石订单活跃
⚠️ 迁移风险提醒
高风险点
- 福利屋功能: 383个商品依赖,迁移时需特别注意时间戳处理
- 自动下架逻辑: 涉及利润计算,业务逻辑复杂
- 多种支付方式: 余额、积分、积分2、优惠券等组合支付
- 时间戳处理: MySQL使用INT时间戳,SQL Server需要转换
中风险点
- 异步同步功能: 21个商品有异步代码,可能涉及外部系统
- 卡片系统: JSON数据存储,需要验证SQL Server兼容性
- 灵珠等特殊功能: 虽然使用量少,但逻辑复杂
📋 下一步行动计划
立即执行 (阶段1剩余工作)
- 验证其他核心表结构完整性
- 确认所有表的字段映射关系
- 设计数据转换和验证规则
- 准备阶段2的环境搭建清单
需要业务确认的问题
- 异步同步功能: 21个商品的async_code是否还在使用?
- 灵珠功能: 8个商品的灵珠功能是否需要保留?
- 拳王系统: king_user_id字段的业务逻辑确认
- 卡片系统: card_set JSON结构的详细说明
技术准备工作
- SQL Server环境: 确保支持NVARCHAR(MAX)和JSON处理
- 时间戳转换: 准备INT到DATETIME2的转换脚本
- 数据验证: 设计迁移前后的数据一致性检查
- 回滚方案: 准备完整的数据回滚策略
阶段1完成标志: 完成业务分析,确定迁移范围,设计好新的表结构,为后续数据迁移奠定基础。