# 数据平台服务数据库设计文档

## 1. 概述

本文档详细描述了数据平台服务(data-platform-service)的数据库设计，包括数据统计、报表生成、数据分析等核心业务数据表结构。

## 2. 数据库环境

- 数据库类型：MySQL 8.0
- 字符集：utf8mb4
- 排序规则：utf8mb4_unicode_ci
- 数据库名：xlxumu_data

## 3. 表结构设计

### 3.1 数据统计表 (data_statistics)

| 字段名 | 类型 | 约束 | 描述 |
|--------|------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 统计记录ID |
| stat_type | VARCHAR(50) | NOT NULL | 统计类型(USER_COUNT, PRODUCT_COUNT, ORDER_COUNT, REVENUE等) |
| stat_value | DECIMAL(15,2) | NOT NULL | 统计值 |
| stat_date | DATE | NOT NULL | 统计日期 |
| dimension1 | VARCHAR(100) |  | 维度1(如地区、品类等) |
| dimension2 | VARCHAR(100) |  | 维度2 |
| created_at | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |

索引：
- INDEX idx_stat_type (stat_type)
- INDEX idx_stat_date (stat_date)
- INDEX idx_dimension1 (dimension1)
- INDEX idx_dimension2 (dimension2)

### 3.2 报表模板表 (report_templates)

| 字段名 | 类型 | 约束 | 描述 |
|--------|------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 模板ID |
| name | VARCHAR(100) | NOT NULL | 报表名称 |
| description | TEXT |  | 报表描述 |
| template_type | VARCHAR(50) | NOT NULL | 模板类型(DAILY, WEEKLY, MONTHLY, QUARTERLY, YEARLY) |
| data_source | VARCHAR(100) | NOT NULL | 数据源(user_service, trade_service, finance_service等) |
| query_sql | TEXT | NOT NULL | 查询SQL |
| columns_config | JSON |  | 列配置信息 |
| status | VARCHAR(20) | NOT NULL, DEFAULT 'ACTIVE' | 模板状态(ACTIVE:启用, INACTIVE:停用) |
| created_at | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |

索引：
- INDEX idx_template_type (template_type)
- INDEX idx_data_source (data_source)
- INDEX idx_status (status)

### 3.3 报表生成记录表 (report_generations)

| 字段名 | 类型 | 约束 | 描述 |
|--------|------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 生成记录ID |
| template_id | BIGINT | NOT NULL | 报表模板ID |
| report_name | VARCHAR(200) | NOT NULL | 报表文件名 |
| report_path | VARCHAR(500) | NOT NULL | 报表文件路径 |
| report_format | VARCHAR(20) | NOT NULL | 报表格式(PDF, EXCEL, CSV) |
| start_date | DATE |  | 统计开始日期 |
| end_date | DATE |  | 统计结束日期 |
| status | VARCHAR(20) | NOT NULL, DEFAULT 'GENERATING' | 生成状态(GENERATING:生成中, SUCCESS:成功, FAILED:失败) |
| generated_at | DATETIME |  | 生成完成时间 |
| created_at | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |

索引：
- INDEX idx_template_id (template_id)
- INDEX idx_report_format (report_format)
- INDEX idx_status (status)
- INDEX idx_created_at (created_at)

### 3.4 数据分析任务表 (analysis_tasks)

| 字段名 | 类型 | 约束 | 描述 |
|--------|------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 任务ID |
| name | VARCHAR(100) | NOT NULL | 任务名称 |
| description | TEXT |  | 任务描述 |
| analysis_type | VARCHAR(50) | NOT NULL | 分析类型(TREND, CORRELATION, CLUSTER等) |
| data_source | VARCHAR(100) | NOT NULL | 数据源 |
| parameters | JSON |  | 分析参数 |
| result_data | JSON |  | 分析结果数据 |
| status | VARCHAR(20) | NOT NULL, DEFAULT 'PENDING' | 任务状态(PENDING:待处理, RUNNING:运行中, SUCCESS:成功, FAILED:失败) |
| started_at | DATETIME |  | 开始执行时间 |
| completed_at | DATETIME |  | 完成时间 |
| created_at | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |

索引：
- INDEX idx_analysis_type (analysis_type)
- INDEX idx_data_source (data_source)
- INDEX idx_status (status)
- INDEX idx_created_at (created_at)

### 3.5 数据看板配置表 (dashboard_configs)

| 字段名 | 类型 | 约束 | 描述 |
|--------|------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 配置ID |
| name | VARCHAR(100) | NOT NULL | 看板名称 |
| description | TEXT |  | 看板描述 |
| layout_config | JSON | NOT NULL | 布局配置 |
| widgets_config | JSON | NOT NULL | 组件配置 |
| access_permissions | JSON |  | 访问权限配置 |
| status | VARCHAR(20) | NOT NULL, DEFAULT 'ACTIVE' | 配置状态(ACTIVE:启用, INACTIVE:停用) |
| created_by | BIGINT | NOT NULL | 创建人用户ID |
| updated_by | BIGINT |  | 更新人用户ID |
| created_at | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |

索引：
- INDEX idx_created_by (created_by)
- INDEX idx_status (status)
- INDEX idx_created_at (created_at)

## 4. 表关系说明

1. 报表模板与报表生成记录是一对多关系
2. 数据分析任务独立存在，结果存储在任务记录中
3. 数据看板配置与用户通过创建人ID关联

## 5. 数据初始化

### 5.1 统计类型枚举值
- USER_COUNT: 用户数量统计
- PRODUCT_COUNT: 商品数量统计
- ORDER_COUNT: 订单数量统计
- REVENUE: 收入统计
- LOAN_COUNT: 贷款申请数量统计
- INSURANCE_COUNT: 保险投保数量统计

### 5.2 报表模板类型枚举值
- DAILY: 日报
- WEEKLY: 周报
- MONTHLY: 月报
- QUARTERLY: 季报
- YEARLY: 年报

### 5.3 报表生成状态枚举值
- GENERATING: 生成中
- SUCCESS: 成功
- FAILED: 失败

### 5.4 分析任务状态枚举值
- PENDING: 待处理
- RUNNING: 运行中
- SUCCESS: 成功
- FAILED: 失败

### 5.5 看板配置状态枚举值
- ACTIVE: 启用
- INACTIVE: 停用

## 6. SQL脚本

```sql
-- 创建数据库
CREATE DATABASE IF NOT EXISTS xlxumu_data 
  CHARACTER SET utf8mb4 
  COLLATE utf8mb4_unicode_ci;

USE xlxumu_data;

-- 数据统计表
CREATE TABLE data_statistics (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  stat_type VARCHAR(50) NOT NULL,
  stat_value DECIMAL(15,2) NOT NULL,
  stat_date DATE NOT NULL,
  dimension1 VARCHAR(100),
  dimension2 VARCHAR(100),
  created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  
  INDEX idx_stat_type (stat_type),
  INDEX idx_stat_date (stat_date),
  INDEX idx_dimension1 (dimension1),
  INDEX idx_dimension2 (dimension2)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 报表模板表
CREATE TABLE report_templates (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(100) NOT NULL,
  description TEXT,
  template_type VARCHAR(50) NOT NULL,
  data_source VARCHAR(100) NOT NULL,
  query_sql TEXT NOT NULL,
  columns_config JSON,
  status VARCHAR(20) NOT NULL DEFAULT 'ACTIVE',
  created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  
  INDEX idx_template_type (template_type),
  INDEX idx_data_source (data_source),
  INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 报表生成记录表
CREATE TABLE report_generations (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  template_id BIGINT NOT NULL,
  report_name VARCHAR(200) NOT NULL,
  report_path VARCHAR(500) NOT NULL,
  report_format VARCHAR(20) NOT NULL,
  start_date DATE,
  end_date DATE,
  status VARCHAR(20) NOT NULL DEFAULT 'GENERATING',
  generated_at DATETIME,
  created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  
  INDEX idx_template_id (template_id),
  INDEX idx_report_format (report_format),
  INDEX idx_status (status),
  INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 数据分析任务表
CREATE TABLE analysis_tasks (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(100) NOT NULL,
  description TEXT,
  analysis_type VARCHAR(50) NOT NULL,
  data_source VARCHAR(100) NOT NULL,
  parameters JSON,
  result_data JSON,
  status VARCHAR(20) NOT NULL DEFAULT 'PENDING',
  started_at DATETIME,
  completed_at DATETIME,
  created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  
  INDEX idx_analysis_type (analysis_type),
  INDEX idx_data_source (data_source),
  INDEX idx_status (status),
  INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 数据看板配置表
CREATE TABLE dashboard_configs (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(100) NOT NULL,
  description TEXT,
  layout_config JSON NOT NULL,
  widgets_config JSON NOT NULL,
  access_permissions JSON,
  status VARCHAR(20) NOT NULL DEFAULT 'ACTIVE',
  created_by BIGINT NOT NULL,
  updated_by BIGINT,
  created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  
  INDEX idx_created_by (created_by),
  INDEX idx_status (status),
  INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
```