File size: 7,845 Bytes
2a889d3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
# 学生成绩管理系统数据库设计文档
# Student Grade Management System Database Documentation

## 概述 (Overview)

本数据库设计用于存储和管理学生成绩信息,支持多学年、多学期、多科目的成绩管理和统计分析。

This database design is used to store and manage student grade information, supporting multi-academic year, multi-semester, and multi-subject grade management and statistical analysis.

## 数据库架构 (Database Architecture)

### 核心表结构 (Core Table Structure)

#### 1. 班级表 (classes)
存储班级基本信息。

| 字段名 | 类型 | 约束 | 描述 |
|--------|------|------|------|
| class_id | INT | PRIMARY KEY, AUTO_INCREMENT | 班级ID |
| class_name | VARCHAR(50) | NOT NULL, UNIQUE | 班级名称 |
| grade_level | INT | NOT NULL | 年级 |
| academic_year | VARCHAR(20) | NOT NULL | 学年 |
| class_teacher | VARCHAR(50) | | 班主任 |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |

#### 2. 科目表 (subjects)
存储科目信息。

| 字段名 | 类型 | 约束 | 描述 |
|--------|------|------|------|
| subject_id | INT | PRIMARY KEY, AUTO_INCREMENT | 科目ID |
| subject_code | VARCHAR(10) | NOT NULL, UNIQUE | 科目代码 |
| subject_name | VARCHAR(50) | NOT NULL | 科目名称 |
| subject_type | ENUM('core', 'elective') | DEFAULT 'core' | 科目类型 |
| full_score | DECIMAL(5,2) | DEFAULT 100.00 | 满分 |
| is_active | BOOLEAN | DEFAULT TRUE | 是否启用 |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |

#### 3. 学生表 (students)
存储学生基本信息。

| 字段名 | 类型 | 约束 | 描述 |
|--------|------|------|------|
| student_id | INT | PRIMARY KEY, AUTO_INCREMENT | 学生ID |
| student_number | VARCHAR(20) | NOT NULL, UNIQUE | 学号 |
| student_name | VARCHAR(50) | NOT NULL | 学生姓名 |
| class_id | INT | NOT NULL, FOREIGN KEY | 班级ID |
| seat_number | INT | NOT NULL | 座号 |
| gender | ENUM('male', 'female') | NOT NULL | 性别 |
| birth_date | DATE | | 出生日期 |
| enrollment_date | DATE | NOT NULL | 入学日期 |
| phone | VARCHAR(20) | | 联系电话 |
| address | TEXT | | 家庭地址 |
| parent_name | VARCHAR(50) | | 家长姓名 |
| parent_phone | VARCHAR(20) | | 家长电话 |
| is_active | BOOLEAN | DEFAULT TRUE | 是否在读 |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |

#### 4. 成绩表 (grades)
存储学生各科目成绩。

| 字段名 | 类型 | 约束 | 描述 |
|--------|------|------|------|
| grade_id | INT | PRIMARY KEY, AUTO_INCREMENT | 成绩ID |
| student_id | INT | NOT NULL, FOREIGN KEY | 学生ID |
| subject_id | INT | NOT NULL, FOREIGN KEY | 科目ID |
| exam_type | ENUM('midterm', 'final', 'monthly', 'quiz') | NOT NULL | 考试类型 |
| exam_date | DATE | NOT NULL | 考试日期 |
| score | DECIMAL(5,2) | NOT NULL | 成绩 |
| semester | VARCHAR(20) | NOT NULL | 学期 |
| academic_year | VARCHAR(20) | NOT NULL | 学年 |
| remarks | TEXT | | 备注 |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |

#### 5. 成绩汇总表 (grade_summaries)
存储计算后的总分和排名信息。

| 字段名 | 类型 | 约束 | 描述 |
|--------|------|------|------|
| summary_id | INT | PRIMARY KEY, AUTO_INCREMENT | 汇总ID |
| student_id | INT | NOT NULL, FOREIGN KEY | 学生ID |
| semester | VARCHAR(20) | NOT NULL | 学期 |
| academic_year | VARCHAR(20) | NOT NULL | 学年 |
| exam_type | ENUM('midterm', 'final', 'monthly', 'quiz') | NOT NULL | 考试类型 |
| ten_subjects_total | DECIMAL(6,2) | DEFAULT 0.00 | 十门总分 |
| ten_subjects_rank | INT | DEFAULT 0 | 十门年次排名 |
| three_subjects_total | DECIMAL(6,2) | DEFAULT 0.00 | 三门总分 |
| three_subjects_rank | INT | DEFAULT 0 | 三门年次排名 |
| class_rank_ten_subjects | INT | DEFAULT 0 | 班级十门排名 |
| class_rank_three_subjects | INT | DEFAULT 0 | 班级三门排名 |
| calculated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 计算时间 |

#### 6. 考试信息表 (exams)
存储考试基本信息。

| 字段名 | 类型 | 约束 | 描述 |
|--------|------|------|------|
| exam_id | INT | PRIMARY KEY, AUTO_INCREMENT | 考试ID |
| exam_name | VARCHAR(100) | NOT NULL | 考试名称 |
| exam_type | ENUM('midterm', 'final', 'monthly', 'quiz') | NOT NULL | 考试类型 |
| semester | VARCHAR(20) | NOT NULL | 学期 |
| academic_year | VARCHAR(20) | NOT NULL | 学年 |
| start_date | DATE | NOT NULL | 开始日期 |
| end_date | DATE | NOT NULL | 结束日期 |
| is_active | BOOLEAN | DEFAULT TRUE | 是否启用 |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |

## 关系图 (Relationship Diagram)

```
classes (1) ---------> (N) students
students (1) ---------> (N) grades
subjects (1) --------> (N) grades
students (1) ---------> (N) grade_summaries
exams (1) -----------> (N) grades
```

## 索引设计 (Index Design)

### 主要索引 (Primary Indexes)
- `PRIMARY KEY` on all tables for unique identification
- `UNIQUE KEY` on students (class_id, seat_number) for class seating
- `UNIQUE KEY` on grades (student_id, subject_id, exam_type, semester, academic_year)

### 性能索引 (Performance Indexes)
- `idx_students_class` on students(class_id)
- `idx_grades_student` on grades(student_id)
- `idx_grades_subject` on grades(subject_id)
- `idx_grades_exam` on grades(exam_type, semester, academic_year)
- `idx_summaries_student` on grade_summaries(student_id)
- `idx_summaries_rank` on grade_summaries(ten_subjects_rank)
- `idx_exams_semester` on exams(semester, academic_year)

## 数据完整性 (Data Integrity)

### 外键约束 (Foreign Key Constraints)
- `students.class_id` → `classes.class_id` (RESTRICT)
- `grades.student_id` → `students.student_id` (CASCADE)
- `grades.subject_id` → `subjects.subject_id` (RESTRICT)
- `grade_summaries.student_id` → `students.student_id` (CASCADE)

### 检查约束 (Check Constraints)
- 成绩范围:0 ≤ score ≤ full_score
- 座号在班级内唯一
- 学期格式验证
- 学年格式验证

## 常用查询 (Common Queries)

### 1. 学生成绩表查询
生成类似图片中的成绩表格格式。

### 2. 排名计算
- 十门科目总分排名
- 三门科目(语数英)总分排名
- 班级内排名
- 年级内排名

### 3. 统计分析
- 班级平均分统计
- 科目成绩分布
- 成绩趋势分析

## 性能优化 (Performance Optimization)

### 查询优化
1. 使用适当的索引
2. 避免全表扫描
3. 使用存储过程进行复杂计算
4. 定期更新汇总表

### 数据分区
- 按学年分区历史成绩数据
- 按科目分区大型成绩表

## 扩展性设计 (Scalability Design)

### 水平扩展
- 支持多学年数据
- 支持多校区部署
- 支持分布式查询

### 功能扩展
- 支持新增科目
- 支持不同评分标准
- 支持成绩分析报表
- 支持数据导入导出

## 安全性 (Security)

### 数据保护
- 敏感信息加密存储
- 访问权限控制
- 操作日志记录

### 备份策略
- 定期全量备份
- 增量备份策略
- 灾难恢复方案

## 使用说明 (Usage Instructions)

### 初始化数据库
1. 执行 `database_schema.sql` 创建表结构
2. 执行 `sample_data_queries.sql` 插入示例数据
3. 根据需要调整科目和班级信息

### 维护操作
1. 定期调用存储过程更新成绩汇总
2. 定期备份重要数据
3. 监控数据库性能

### 扩展开发
1. 根据业务需求添加新表
2. 创建自定义视图简化查询
3. 开发报表生成功能