跳转至

商城业务

1. 用户表 (user_info)

CREATE TABLE `user_info` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `user_id` bigint NOT NULL COMMENT '用户ID(业务主键)',
  `user_name` varchar(50) DEFAULT NULL COMMENT '用户姓名',
  `gender` char(1) DEFAULT NULL COMMENT '性别 M男 F女',
  `age` int DEFAULT NULL COMMENT '年龄',
  `register_time` datetime DEFAULT NULL COMMENT '注册时间',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';

2. 商品分类表 (base_category)

CREATE TABLE `base_category` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `category_id` bigint NOT NULL COMMENT '分类ID(业务主键)',
  `category_name` varchar(50) NOT NULL COMMENT '分类名称',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_category_id` (`category_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品一级分类表';

3. 商品SKU表 (sku_info)

CREATE TABLE `sku_info` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `sku_id` bigint NOT NULL COMMENT '商品SKU_ID(业务主键)',
  `sku_name` varchar(150) NOT NULL COMMENT '商品名称',
  `category_id` bigint NOT NULL COMMENT '所属分类ID',
  `price` decimal(10,2) NOT NULL COMMENT '商品单价',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_sku_id` (`sku_id`),
  KEY `idx_category_id` (`category_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品SKU表';

4. 订单主表 (order_info)

CREATE TABLE `order_info` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `order_id` bigint NOT NULL COMMENT '订单ID(业务主键)',
  `user_id` bigint NOT NULL COMMENT '下单用户ID',
  `total_amount` decimal(10,2) NOT NULL COMMENT '订单总金额',
  `order_status` varchar(20) NOT NULL COMMENT '订单状态(1001-待支付, 1002-已支付, 1003-已取消)',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间(下单时间)',
  `payment_time` datetime DEFAULT NULL COMMENT '支付时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_order_id` (`order_id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单主表';

5. 订单明细表 (order_detail)

CREATE TABLE `order_detail` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `detail_id` bigint NOT NULL COMMENT '明细ID(业务主键)',
  `order_id` bigint NOT NULL COMMENT '关联订单ID',
  `sku_id` bigint NOT NULL COMMENT '关联商品SKU_ID',
  `sku_num` int NOT NULL COMMENT '购买数量',
  `sku_price` decimal(10,2) NOT NULL COMMENT '购买时单价(快照)',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_detail_id` (`detail_id`),
  KEY `idx_order_id` (`order_id`),
  KEY `idx_sku_id` (`sku_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单明细表';

6. 用户行为日志表 (app_event_log)

注:真实场景中,日志通常由前端打点直接写入Kafka/Logstash,不落盘MySQL。这里为了方便你本地模拟生成数据,建在MySQL中。

CREATE TABLE `app_event_log` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `log_id` varchar(50) NOT NULL COMMENT '日志唯一ID',
  `user_id` bigint DEFAULT NULL COMMENT '用户ID(未登录可为空)',
  `event_type` varchar(30) NOT NULL COMMENT '事件类型(如: page_view, click, cart_add)',
  `item_id` bigint DEFAULT NULL COMMENT '目标物品ID(如点击的商品SKU_ID)',
  `event_time` datetime NOT NULL COMMENT '事件发生时间',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '日志入库时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_log_id` (`log_id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_event_time` (`event_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='APP端用户行为日志表(模拟)';

ER

erDiagram
    %% 实体定义
    USER_INFO {
        bigint user_id PK "用户ID"
        varchar user_name "用户姓名"
        char gender "性别"
        int age "年龄"
        datetime register_time "注册时间"
    }

    BASE_CATEGORY {
        bigint category_id PK "分类ID"
        varchar category_name "分类名称"
    }

    SKU_INFO {
        bigint sku_id PK "SKU_ID"
        varchar sku_name "商品名称"
        bigint category_id FK "所属分类ID"
        decimal price "商品单价"
    }

    ORDER_INFO {
        bigint order_id PK "订单ID"
        bigint user_id FK "下单用户ID"
        decimal total_amount "订单总金额"
        varchar order_status "订单状态"
        datetime create_time "下单时间"
        datetime payment_time "支付时间"
    }

    ORDER_DETAIL {
        bigint detail_id PK "明细ID"
        bigint order_id FK "关联订单ID"
        bigint sku_id FK "关联SKU_ID"
        int sku_num "购买数量"
        decimal sku_price "购买时单价"
    }

    APP_EVENT_LOG {
        varchar log_id PK "日志ID"
        bigint user_id FK "用户ID"
        varchar event_type "事件类型"
        bigint item_id FK "目标物品SKU_ID"
        datetime event_time "事件时间"
    }

    %% 关系定义
    BASE_CATEGORY ||--o{ SKU_INFO : "包含"
    USER_INFO ||--o{ ORDER_INFO : "下单"
    ORDER_INFO ||--|{ ORDER_DETAIL : "包含"
    SKU_INFO ||--o{ ORDER_DETAIL : "被购买"
    USER_INFO ||--o{ APP_EVENT_LOG : "产生行为"
    SKU_INFO ||--o{ APP_EVENT_LOG : "被点击/加购"