# 盘古用户平台 - 数据库设计文档

---

| 文档信息 | 内容 |
|---------|------|
| **文档版本** | V1.0 |
| **项目名称** | 盘古用户平台（Pangu User Platform） |
| **编写团队** | pangu |
| **创建日期** | 2026-01-31 |
| **数据库** | MySQL 8.0 |
| **字符集** | utf8mb4 |
| **排序规则** | utf8mb4_general_ci |

---

## 1. 数据库概述

### 1.1 数据库命名

- 数据库名：`pangu_user`
- 表前缀：`pg_`

### 1.2 命名规范

| 类型 | 规范 | 示例 |
|-----|------|------|
| 表名 | 前缀_模块_实体（小写下划线）| pg_user_member |
| 字段名 | 小写下划线 | member_id |
| 主键 | 表名_id 或 id | member_id |
| 外键 | 关联表名_id | school_id |
| 索引 | idx_表名_字段名 | idx_member_phone |
| 唯一索引 | uk_表名_字段名 | uk_member_phone |

### 1.3 公共字段

所有业务表包含以下公共字段：

| 字段名 | 类型 | 说明 |
|-------|------|------|
| create_by | varchar(64) | 创建者 |
| create_time | datetime | 创建时间 |
| update_by | varchar(64) | 更新者 |
| update_time | datetime | 更新时间 |
| del_flag | char(1) | 删除标志（0存在 1删除）|
| remark | varchar(500) | 备注 |

---

## 2. ER图

```
┌─────────────┐         ┌─────────────┐         ┌─────────────┐
│   pg_region │◀────────│  pg_school  │────────▶│pg_school_   │
│   区域表     │  1   n  │   学校表     │  1   n  │grade 学校   │
└─────────────┘         └─────────────┘         │年级关联表    │
                               │                └──────┬──────┘
                               │                       │
                               │                       │ 1
                               │                       │
                               ▼                       ▼ n
                        ┌─────────────┐         ┌─────────────┐
                        │ pg_student  │         │pg_school_   │
                        │   学生表     │◀────────│class 学校   │
                        └──────┬──────┘   n   1 │班级关联表    │
                               │                └─────────────┘
                               │ n
                               │
                               ▼ 1
                        ┌─────────────┐
                        │ pg_member   │
                        │   会员表     │
                        └─────────────┘

┌─────────────┐         ┌─────────────┐
│  pg_grade   │         │  pg_class   │
│  年级字典表  │         │  班级字典表  │
└─────────────┘         └─────────────┘

┌─────────────┐         ┌─────────────┐
│ pg_subject  │         │pg_application│
│  学科字典表  │         │   应用表     │
└─────────────┘         └──────┬──────┘
                               │ 1
                               │
                               ▼ n
                        ┌─────────────┐
                        │pg_app_api   │
                        │ 应用接口授权 │
                        └─────────────┘
```

---

## 3. 表结构设计

### 3.1 区域表（pg_region）

存储省-市-区层级区域数据。

```sql
CREATE TABLE `pg_region` (
  `region_id` bigint NOT NULL AUTO_INCREMENT COMMENT '区域ID',
  `parent_id` bigint DEFAULT 0 COMMENT '父区域ID',
  `region_name` varchar(100) NOT NULL COMMENT '区域名称',
  `region_code` varchar(20) DEFAULT NULL COMMENT '区域编码',
  `level` tinyint NOT NULL DEFAULT 1 COMMENT '层级（1省 2市 3区）',
  `ancestors` varchar(500) DEFAULT '' COMMENT '祖级列表',
  `order_num` int DEFAULT 0 COMMENT '显示顺序',
  `status` char(1) DEFAULT '0' COMMENT '状态（0正常 1停用）',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `del_flag` char(1) DEFAULT '0' COMMENT '删除标志（0存在 1删除）',
  PRIMARY KEY (`region_id`),
  KEY `idx_parent_id` (`parent_id`)
) ENGINE=InnoDB COMMENT='区域表';
```

### 3.2 学校表（pg_school）

存储学校基本信息。

```sql
CREATE TABLE `pg_school` (
  `school_id` bigint NOT NULL AUTO_INCREMENT COMMENT '学校ID',
  `school_code` varchar(32) NOT NULL COMMENT '学校编码',
  `school_name` varchar(100) NOT NULL COMMENT '学校名称',
  `school_type` char(2) DEFAULT NULL COMMENT '学校类型（01小学 02初中 03高中）',
  `region_id` bigint NOT NULL COMMENT '所属区域ID',
  `region_path` varchar(200) DEFAULT NULL COMMENT '区域路径（如：湖北省-武汉市-武昌区）',
  `address` varchar(255) DEFAULT NULL COMMENT '详细地址',
  `contact_person` varchar(50) DEFAULT NULL COMMENT '联系人',
  `contact_phone` varchar(20) DEFAULT NULL COMMENT '联系电话',
  `status` char(1) DEFAULT '0' COMMENT '状态（0正常 1停用）',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `del_flag` char(1) DEFAULT '0' COMMENT '删除标志（0存在 1删除）',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`school_id`),
  UNIQUE KEY `uk_school_code` (`school_code`),
  KEY `idx_region_id` (`region_id`),
  KEY `idx_school_name` (`school_name`)
) ENGINE=InnoDB COMMENT='学校表';
```

### 3.3 年级字典表（pg_grade）

存储年级基础数据。

```sql
CREATE TABLE `pg_grade` (
  `grade_id` bigint NOT NULL AUTO_INCREMENT COMMENT '年级ID',
  `grade_code` varchar(32) NOT NULL COMMENT '年级编码',
  `grade_name` varchar(50) NOT NULL COMMENT '年级名称',
  `order_num` int DEFAULT 0 COMMENT '显示顺序',
  `status` char(1) DEFAULT '0' COMMENT '状态（0正常 1停用）',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `del_flag` char(1) DEFAULT '0' COMMENT '删除标志（0存在 1删除）',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`grade_id`),
  UNIQUE KEY `uk_grade_code` (`grade_code`)
) ENGINE=InnoDB COMMENT='年级字典表';
```

### 3.4 班级字典表（pg_class）

存储班级基础数据。

```sql
CREATE TABLE `pg_class` (
  `class_id` bigint NOT NULL AUTO_INCREMENT COMMENT '班级ID',
  `class_code` varchar(32) NOT NULL COMMENT '班级编码',
  `class_name` varchar(50) NOT NULL COMMENT '班级名称',
  `order_num` int DEFAULT 0 COMMENT '显示顺序',
  `status` char(1) DEFAULT '0' COMMENT '状态（0正常 1停用）',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `del_flag` char(1) DEFAULT '0' COMMENT '删除标志（0存在 1删除）',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`class_id`),
  UNIQUE KEY `uk_class_code` (`class_code`)
) ENGINE=InnoDB COMMENT='班级字典表';
```

### 3.5 学校年级关联表（pg_school_grade）

学校与年级的多对多关联。

```sql
CREATE TABLE `pg_school_grade` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `school_id` bigint NOT NULL COMMENT '学校ID',
  `grade_id` bigint NOT NULL COMMENT '年级ID',
  `order_num` int DEFAULT 0 COMMENT '显示顺序',
  `status` char(1) DEFAULT '0' COMMENT '状态（0正常 1停用）',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `del_flag` char(1) DEFAULT '0' COMMENT '删除标志（0存在 1删除）',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_school_grade` (`school_id`, `grade_id`),
  KEY `idx_school_id` (`school_id`),
  KEY `idx_grade_id` (`grade_id`)
) ENGINE=InnoDB COMMENT='学校年级关联表';
```

### 3.6 学校班级关联表（pg_school_class）

学校年级下班级的关联。

```sql
CREATE TABLE `pg_school_class` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `school_grade_id` bigint NOT NULL COMMENT '学校年级关联ID',
  `class_id` bigint NOT NULL COMMENT '班级ID',
  `order_num` int DEFAULT 0 COMMENT '显示顺序',
  `status` char(1) DEFAULT '0' COMMENT '状态（0正常 1停用）',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `del_flag` char(1) DEFAULT '0' COMMENT '删除标志（0存在 1删除）',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_school_grade_class` (`school_grade_id`, `class_id`),
  KEY `idx_school_grade_id` (`school_grade_id`),
  KEY `idx_class_id` (`class_id`)
) ENGINE=InnoDB COMMENT='学校班级关联表';
```

### 3.7 学科表（pg_subject）

存储学科基础数据。

```sql
CREATE TABLE `pg_subject` (
  `subject_id` bigint NOT NULL AUTO_INCREMENT COMMENT '学科ID',
  `subject_code` varchar(32) NOT NULL COMMENT '学科编码',
  `subject_name` varchar(50) NOT NULL COMMENT '学科名称',
  `order_num` int DEFAULT 0 COMMENT '显示顺序',
  `status` char(1) DEFAULT '0' COMMENT '状态（0正常 1停用）',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `del_flag` char(1) DEFAULT '0' COMMENT '删除标志（0存在 1删除）',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`subject_id`),
  UNIQUE KEY `uk_subject_code` (`subject_code`)
) ENGINE=InnoDB COMMENT='学科表';
```

### 3.8 会员表（pg_member）

存储前端用户（家长/教师）信息。

```sql
CREATE TABLE `pg_member` (
  `member_id` bigint NOT NULL AUTO_INCREMENT COMMENT '会员ID',
  `member_code` varchar(32) NOT NULL COMMENT '会员编号',
  `phone` varchar(20) NOT NULL COMMENT '手机号',
  `password` varchar(100) DEFAULT NULL COMMENT '密码',
  `nickname` varchar(50) DEFAULT NULL COMMENT '昵称',
  `avatar` varchar(255) DEFAULT NULL COMMENT '头像URL',
  `gender` char(1) DEFAULT '0' COMMENT '性别（0未知 1男 2女）',
  `birthday` date DEFAULT NULL COMMENT '出生日期',
  `identity_type` char(1) NOT NULL DEFAULT '1' COMMENT '身份类型（1家长 2教师）',
  `open_id` varchar(100) DEFAULT NULL COMMENT '微信OpenID',
  `union_id` varchar(100) DEFAULT NULL COMMENT '微信UnionID',
  `region_id` bigint DEFAULT NULL COMMENT '所属区域ID（教师必填）',
  `school_id` bigint DEFAULT NULL COMMENT '所属学校ID（教师必填）',
  `school_grade_id` bigint DEFAULT NULL COMMENT '所属学校年级ID（教师必填）',
  `school_class_id` bigint DEFAULT NULL COMMENT '所属学校班级ID（教师必填）',
  `register_source` char(1) DEFAULT '1' COMMENT '注册来源（1小程序 2H5 3后台 4导入）',
  `register_time` datetime DEFAULT NULL COMMENT '注册时间',
  `last_login_time` datetime DEFAULT NULL COMMENT '最后登录时间',
  `last_login_ip` varchar(50) DEFAULT NULL COMMENT '最后登录IP',
  `login_count` int DEFAULT 0 COMMENT '登录次数',
  `status` char(1) DEFAULT '0' COMMENT '状态（0正常 1停用）',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `del_flag` char(1) DEFAULT '0' COMMENT '删除标志（0存在 1删除）',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`member_id`),
  UNIQUE KEY `uk_member_code` (`member_code`),
  UNIQUE KEY `uk_phone` (`phone`),
  KEY `idx_open_id` (`open_id`),
  KEY `idx_school_id` (`school_id`),
  KEY `idx_identity_type` (`identity_type`)
) ENGINE=InnoDB COMMENT='会员表';
```

### 3.9 学生表（pg_student）

存储学生信息。

```sql
CREATE TABLE `pg_student` (
  `student_id` bigint NOT NULL AUTO_INCREMENT COMMENT '学生ID',
  `student_name` varchar(50) NOT NULL COMMENT '学生姓名',
  `student_no` varchar(32) DEFAULT NULL COMMENT '学号',
  `gender` char(1) DEFAULT '0' COMMENT '性别（0未知 1男 2女）',
  `birthday` date DEFAULT NULL COMMENT '出生年月',
  `region_id` bigint NOT NULL COMMENT '所属区域ID',
  `region_path` varchar(200) DEFAULT NULL COMMENT '区域路径',
  `school_id` bigint NOT NULL COMMENT '所属学校ID',
  `school_grade_id` bigint NOT NULL COMMENT '所属学校年级ID',
  `school_class_id` bigint NOT NULL COMMENT '所属学校班级ID',
  `subject_id` bigint DEFAULT NULL COMMENT '学科ID',
  `member_id` bigint DEFAULT NULL COMMENT '归属会员ID（可为空，学生可暂不绑定会员）',
  `status` char(1) DEFAULT '0' COMMENT '状态（0正常 1停用）',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `del_flag` char(1) DEFAULT '0' COMMENT '删除标志（0存在 1删除）',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`student_id`),
  UNIQUE KEY `uk_student_no` (`student_no`),
  KEY `idx_member_id` (`member_id`),
  KEY `idx_school_id` (`school_id`),
  KEY `idx_school_class_id` (`school_class_id`),
  KEY `idx_student_name` (`student_name`)
) ENGINE=InnoDB COMMENT='学生表';
```

### 3.10 应用表（pg_application）

存储接入平台的第三方应用信息。

```sql
CREATE TABLE `pg_application` (
  `app_id` bigint NOT NULL AUTO_INCREMENT COMMENT '应用ID',
  `app_code` varchar(32) NOT NULL COMMENT '应用编码',
  `app_name` varchar(100) NOT NULL COMMENT '应用名称',
  `app_secret` varchar(64) NOT NULL COMMENT '应用密钥',
  `app_desc` varchar(500) DEFAULT NULL COMMENT '应用描述',
  `contact_person` varchar(50) DEFAULT NULL COMMENT '联系人',
  `contact_phone` varchar(20) DEFAULT NULL COMMENT '联系电话',
  `status` char(1) DEFAULT '0' COMMENT '状态（0正常 1停用）',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `del_flag` char(1) DEFAULT '0' COMMENT '删除标志（0存在 1删除）',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`app_id`),
  UNIQUE KEY `uk_app_code` (`app_code`)
) ENGINE=InnoDB COMMENT='应用表';
```

### 3.11 应用接口授权表（pg_app_api）

存储应用可访问的接口授权。

```sql
CREATE TABLE `pg_app_api` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `app_id` bigint NOT NULL COMMENT '应用ID',
  `api_code` varchar(100) NOT NULL COMMENT '接口编码',
  `api_name` varchar(100) DEFAULT NULL COMMENT '接口名称',
  `api_path` varchar(200) NOT NULL COMMENT '接口路径',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_app_api` (`app_id`, `api_code`),
  KEY `idx_app_id` (`app_id`)
) ENGINE=InnoDB COMMENT='应用接口授权表';
```

### 3.12 API接口字典表（pg_api_dict）

存储系统对外开放的API接口定义。

```sql
CREATE TABLE `pg_api_dict` (
  `api_id` bigint NOT NULL AUTO_INCREMENT COMMENT '接口ID',
  `api_code` varchar(100) NOT NULL COMMENT '接口编码',
  `api_name` varchar(100) NOT NULL COMMENT '接口名称',
  `api_path` varchar(200) NOT NULL COMMENT '接口路径',
  `api_method` varchar(10) DEFAULT 'GET' COMMENT '请求方法',
  `api_desc` varchar(500) DEFAULT NULL COMMENT '接口描述',
  `order_num` int DEFAULT 0 COMMENT '显示顺序',
  `status` char(1) DEFAULT '0' COMMENT '状态（0正常 1停用）',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`api_id`),
  UNIQUE KEY `uk_api_code` (`api_code`)
) ENGINE=InnoDB COMMENT='API接口字典表';
```

---

## 4. 初始化数据

### 4.1 区域数据

```sql
-- 省级
INSERT INTO pg_region (region_id, parent_id, region_name, level, ancestors, order_num) VALUES
(1, 0, '湖北', 1, '0', 1),
(2, 0, '北京', 1, '0', 2),
(3, 0, '香港', 1, '0', 3),
(4, 0, '吉宁', 1, '0', 4);

-- 市级（湖北）
INSERT INTO pg_region (region_id, parent_id, region_name, level, ancestors, order_num) VALUES
(11, 1, '武汉', 2, '0,1', 1),
(12, 1, '黄冈', 2, '0,1', 2);

-- 区级（武汉）
INSERT INTO pg_region (region_id, parent_id, region_name, level, ancestors, order_num) VALUES
(111, 11, '武昌区', 3, '0,1,11', 1),
(112, 11, '汉口区', 3, '0,1,11', 2),
(113, 11, '汉阳区', 3, '0,1,11', 3),
(114, 11, '江夏区', 3, '0,1,11', 4),
(115, 11, '新洲区', 3, '0,1,11', 5),
(116, 11, '黄陂区', 3, '0,1,11', 6);

-- 区级（黄冈）
INSERT INTO pg_region (region_id, parent_id, region_name, level, ancestors, order_num) VALUES
(121, 12, '黄州区', 3, '0,1,12', 1),
(122, 12, '红安县', 3, '0,1,12', 2),
(123, 12, '麻城市', 3, '0,1,12', 3);
```

### 4.2 年级数据

```sql
INSERT INTO pg_grade (grade_id, grade_code, grade_name, order_num) VALUES
(1, 'GRD001', '一年级', 1),
(2, 'GRD002', '二年级', 2),
(3, 'GRD003', '三年级', 3),
(4, 'GRD004', '四年级', 4),
(5, 'GRD005', '五年级', 5),
(6, 'GRD006', '六年级', 6),
(7, 'GRD007', '七年级', 7),
(8, 'GRD008', '八年级', 8),
(9, 'GRD009', '九年级', 9),
(10, 'GRD010', '高一', 10),
(11, 'GRD011', '高二', 11),
(12, 'GRD012', '高三', 12);
```

### 4.3 班级数据

```sql
INSERT INTO pg_class (class_id, class_code, class_name, order_num) VALUES
(1, 'CLS001', '1班', 1),
(2, 'CLS002', '2班', 2),
(3, 'CLS003', '3班', 3),
(4, 'CLS004', '4班', 4),
(5, 'CLS005', '5班', 5),
(6, 'CLS006', '6班', 6),
(7, 'CLS007', '7班', 7),
(8, 'CLS008', '8班', 8),
(9, 'CLS009', '9班', 9),
(10, 'CLS010', '10班', 10);
```

### 4.4 学科数据

```sql
INSERT INTO pg_subject (subject_id, subject_code, subject_name, order_num) VALUES
(1, 'SUB001', '语文', 1),
(2, 'SUB002', '数学', 2),
(3, 'SUB003', '英语', 3),
(4, 'SUB004', '物理', 4),
(5, 'SUB005', '化学', 5),
(6, 'SUB006', '生物', 6),
(7, 'SUB007', '历史', 7),
(8, 'SUB008', '地理', 8),
(9, 'SUB009', '政治', 9),
(10, 'SUB010', '体育', 10),
(11, 'SUB011', '音乐', 11),
(12, 'SUB012', '美术', 12);
```

### 4.5 API接口字典数据

```sql
INSERT INTO pg_api_dict (api_id, api_code, api_name, api_path, api_method, api_desc, order_num) VALUES
(1, 'STUDENT_LIST', '查询学生信息', '/open/student/list', 'GET', '获取学生列表', 1),
(2, 'SCHOOL_LIST', '查询学校信息', '/open/school/list', 'GET', '获取学校列表', 2),
(3, 'GRADE_LIST', '查询年级信息', '/open/grade/list', 'GET', '获取年级列表', 3),
(4, 'CLASS_LIST', '查询班级信息', '/open/class/list', 'GET', '获取班级列表', 4),
(5, 'MEMBER_LIST', '查询会员信息', '/open/member/list', 'GET', '获取会员列表', 5),
(6, 'REGION_TREE', '查询区域树', '/open/region/tree', 'GET', '获取区域树形结构', 6);
```

### 4.6 学校示例数据

> 以下数据来源于墨刀原型设计

```sql
-- 学校数据
INSERT INTO pg_school (school_id, school_code, school_name, school_type, region_id, region_path, status, create_time) VALUES
(1, 'SCH20260001', '武汉市第一中学', '02', 111, '湖北省-武汉市-武昌区', '0', NOW()),
(2, 'SCH20260002', '武汉市第三中学', '02', 111, '湖北省-武汉市-武昌区', '0', NOW()),
(3, 'SCH20260003', '武汉市水果湖小学', '01', 111, '湖北省-武汉市-武昌区', '0', NOW());

-- 学校-年级关联（武汉市第一中学）
INSERT INTO pg_school_grade (id, school_id, grade_id, order_num) VALUES
(1, 1, 7, 1),  -- 七年级
(2, 1, 8, 2),  -- 八年级
(3, 1, 9, 3);  -- 九年级

-- 学校-年级关联（武汉市水果湖小学）
INSERT INTO pg_school_grade (id, school_id, grade_id, order_num) VALUES
(4, 3, 1, 1),  -- 一年级
(5, 3, 2, 2),  -- 二年级
(6, 3, 3, 3),  -- 三年级
(7, 3, 4, 4),  -- 四年级
(8, 3, 5, 5),  -- 五年级
(9, 3, 6, 6);  -- 六年级

-- 学校-班级关联（武汉市第一中学-七年级）
INSERT INTO pg_school_class (id, school_grade_id, class_id, order_num) VALUES
(1, 1, 1, 1),  -- 1班
(2, 1, 2, 2),  -- 2班
(3, 1, 3, 3);  -- 3班
```

### 4.7 会员示例数据

```sql
INSERT INTO pg_member (member_id, member_code, phone, password, nickname, gender, identity_type, region_id, school_id, register_source, register_time, status) VALUES
(1, 'JS123123123', '13207166213', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '张三家长', '1', '1', NULL, NULL, '1', NOW(), '0'),
(2, 'JS123123124', '13807166214', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '李老师', '2', '2', 111, 1, '1', NOW(), '0');
```

### 4.8 学生示例数据

```sql
INSERT INTO pg_student (student_id, student_name, student_no, gender, birthday, region_id, region_path, school_id, school_grade_id, school_class_id, member_id, status, create_time) VALUES
(1, '张小明', 'STU20260001', '1', '2015-03-15', 111, '湖北省-武汉市-武昌区', 1, 1, 1, 1, '0', NOW()),
(2, '张小红', 'STU20260002', '2', '2017-06-20', 111, '湖北省-武汉市-武昌区', 3, 4, 1, 1, '0', NOW());
```

### 4.9 应用示例数据

```sql
-- 应用数据
INSERT INTO pg_application (app_id, app_code, app_name, app_secret, app_desc, status, create_time) VALUES
(1, 'YY000001', 'AI智慧平台', 'a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6', 'AI智慧教育平台接入', '0', NOW());

-- 应用接口授权
INSERT INTO pg_app_api (id, app_id, api_code, api_name, api_path, create_time) VALUES
(1, 1, 'SCHOOL_LIST', '查询学校信息', '/open/school/list', NOW()),
(2, 1, 'GRADE_LIST', '查询年级信息', '/open/grade/list', NOW()),
(3, 1, 'CLASS_LIST', '查询班级信息', '/open/class/list', NOW());
```

---

## 5. 索引设计

### 5.1 索引策略

| 索引类型 | 应用场景 |
|---------|---------|
| 主键索引 | 所有表的主键 |
| 唯一索引 | 编码、手机号等唯一字段 |
| 普通索引 | 查询条件、外键关联 |
| 组合索引 | 多字段联合查询 |

### 5.2 关键索引说明

| 表名 | 索引名 | 索引字段 | 说明 |
|-----|-------|---------|------|
| pg_member | uk_phone | phone | 手机号唯一 |
| pg_member | idx_open_id | open_id | 微信登录查询 |
| pg_member | idx_school_id | school_id | 按学校查询 |
| pg_student | uk_student_no | student_no | 学号唯一 |
| pg_student | idx_member_id | member_id | 按会员查询 |
| pg_student | idx_school_class_id | school_class_id | 按班级查询 |
| pg_school | uk_school_code | school_code | 学校编码唯一 |
| pg_school | idx_region_id | region_id | 按区域查询 |

---

## 6. 数据字典

### 6.1 性别（gender）

| 值 | 说明 |
|---|------|
| 0 | 未知 |
| 1 | 男 |
| 2 | 女 |

### 6.2 身份类型（identity_type）

| 值 | 说明 |
|---|------|
| 1 | 家长 |
| 2 | 教师 |

### 6.3 注册来源（register_source）

| 值 | 说明 |
|---|------|
| 1 | 小程序 |
| 2 | H5 |
| 3 | 后台新增 |
| 4 | 批量导入 |

### 6.4 状态（status）

| 值 | 说明 |
|---|------|
| 0 | 正常/启用 |
| 1 | 停用/禁用 |

### 6.5 删除标志（del_flag）

| 值 | 说明 |
|---|------|
| 0 | 存在 |
| 1 | 已删除 |

### 6.6 学校类型（school_type）

| 值 | 说明 |
|---|------|
| 01 | 小学 |
| 02 | 初中 |
| 03 | 高中 |
| 04 | 完全中学 |
| 99 | 其他 |

---

*文档结束*
