HaniBlindBox/docs/数据库迁移详细文档/阶段1-业务分析和表结构设计.md
2026-01-02 02:11:15 +08:00

35 KiB
Raw Blame History

阶段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规范
  • 字段类型优化合理
  • 外键关系设计正确
  • 索引策略覆盖主要查询场景

文档验收

  • 业务表分析文档完整
  • 表结构设计文档详细
  • 字段映射关系清晰
  • 数据转换规则明确

风险点和注意事项

业务风险

  1. 业务理解偏差: 可能误判某些表的重要性
  2. 数据关联遗漏: 可能遗漏重要的表关联关系
  3. 字段语义变化: 重命名可能导致语义理解偏差

技术风险

  1. 数据类型兼容: SQL Server与MySQL的数据类型差异
  2. 字符集问题: 中文数据的字符集处理
  3. 索引策略: 新索引策略可能影响性能

解决方案

  1. 业务确认: 与业务方确认表的重要性和关联关系
  2. 分步验证: 分批次验证表结构设计的合理性
  3. 充分测试: 在测试环境充分验证数据迁移效果

下一阶段准备

为阶段2准备的内容

  • SQL Server环境搭建
  • 数据迁移脚本模板
  • 数据验证工具准备
  • 回滚方案设计

交接文档

  • 业务表分析报告
  • 新表结构设计文档
  • 字段映射关系表
  • 数据转换规则文档

关键发现和重要说明

🔍 数据库分析关键发现

商品表复杂度超预期

  • 实际字段数: 54个字段 (远超初期估计)
  • 福利屋功能: 383/503商品启用是核心业务功能
  • 自动下架功能: 47/503商品启用涉及利润控制
  • 商品描述: 402/503商品有描述用户体验重要字段
  • 异步同步: 21/503商品有异步代码可能涉及第三方集成(这个是从测试环境同步到正式环境的编号,因为所有的盒子都需要从测试环境试完概率后才能上线到正式环境。)

业务功能丰富度高

  • 多种定价策略: 日价格、月价格、支付价格等
  • 复杂抽奖逻辑: 领主、连击、暴怒、拳王等多种玩法
  • 精细化控制: 限购、等级限制、解锁门槛等
  • 营销功能完善: 优惠券、积分、折扣等

数据完整性良好

  • 用户数据: 2,201个用户活跃度较高
  • 商品数据: 503个商品业务功能使用率高
  • 钻石系统: 398个订单352个已支付收入稳定
  • 订单数据: 虽然总量不大(15个),但钻石订单活跃

⚠️ 迁移风险提醒

高风险点

  1. 福利屋功能: 383个商品依赖迁移时需特别注意时间戳处理
  2. 自动下架逻辑: 涉及利润计算,业务逻辑复杂
  3. 多种支付方式: 余额、积分、积分2、优惠券等组合支付
  4. 时间戳处理: MySQL使用INT时间戳SQL Server需要转换

中风险点

  1. 异步同步功能: 21个商品有异步代码可能涉及外部系统
  2. 卡片系统: JSON数据存储需要验证SQL Server兼容性
  3. 灵珠等特殊功能: 虽然使用量少,但逻辑复杂

📋 下一步行动计划

立即执行 (阶段1剩余工作)

  • 验证其他核心表结构完整性
  • 确认所有表的字段映射关系
  • 设计数据转换和验证规则
  • 准备阶段2的环境搭建清单

需要业务确认的问题

  1. 异步同步功能: 21个商品的async_code是否还在使用
  2. 灵珠功能: 8个商品的灵珠功能是否需要保留
  3. 拳王系统: king_user_id字段的业务逻辑确认
  4. 卡片系统: card_set JSON结构的详细说明

技术准备工作

  1. SQL Server环境: 确保支持NVARCHAR(MAX)和JSON处理
  2. 时间戳转换: 准备INT到DATETIME2的转换脚本
  3. 数据验证: 设计迁移前后的数据一致性检查
  4. 回滚方案: 准备完整的数据回滚策略

阶段1完成标志: 完成业务分析,确定迁移范围,设计好新的表结构,为后续数据迁移奠定基础。