-- 学生表 CREATE TABLE Students ( StudentID INT PRIMARY KEY, Name VARCHAR(50), Age INT ); -- 课程表 CREATE TABLE Courses ( CourseID INT PRIMARY KEY, CourseName VARCHAR(50), Credits INT ); -- 选课表 CREATE TABLE Enrollments ( EnrollmentID INT PRIMARY KEY AUTO_INCREMENT, StudentID INT, CourseID INT, EnrollmentDate DATETIME, FOREIGN KEY (StudentID) REFERENCES Students(StudentID), FOREIGN KEY (CourseID) REFERENCES Courses(CourseID) ); -- 选课日志表(触发器3使用) CREATE TABLE EnrollmentLog ( LogID INT PRIMARY KEY AUTO_INCREMENT, StudentID INT, CourseID INT, EnrollmentDate DATETIME, FOREIGN KEY (StudentID) REFERENCES Students(StudentID), FOREIGN KEY (CourseID) REFERENCES Courses(CourseID) ); -- 学生总学分表(触发器4使用) CREATE TABLE StudentCredits ( StudentID INT PRIMARY KEY, TotalCredits INT DEFAULT 0, FOREIGN KEY (StudentID) REFERENCES Students(StudentID) );
时间: 2025-03-11 07:14:57 浏览: 48
### 设计并创建学生选课系统的数据库表结构
为了满足项目需求,即统计成绩分布和自动更新选课表等功能,以下是关于如何设计并创建一个包含学生、课程、选课及其相应日志和统计信息的数据库表结构。
#### 数据库表的设计原则
- 表之间应建立合理的关系以确保数据的一致性和完整性。
- 使用外键约束来维护参照完整性。
- 对于频繁查询的操作优化索引设置。
#### 主要表格描述
##### 1. 学生表 (Student)
| 字段名 | 类型 | 描述 |
|------------|-------------|------------------|
| Sno | INT | 学号, 主键 |
| Sname | VARCHAR | 姓名 |
| Sex | CHAR(2) | 性别 |
| Age | TINYINT | 年龄 |
| ClassNo | VARCHAR | 所属班级编号 |
| Major | VARCHAR | 专业名称 |
| EntranceTime| DATE | 入学时间 |
| Email | VARCHAR | 邮箱地址 |
此表用于保存有关学生的个人信息[^2]。
##### 2. 课程表 (Course)
| 字段名 | 类型 | 描述 |
|------------|-------------|--------------------|
| Cno | INT | 课程编号, 主键 |
| Cname | VARCHAR | 课程名称 |
| Credit | DECIMAL | 学分 |
| TeacherID | INT | 授课教师工号, 外键关联到Teacher表|
该表用来表示学校开设的各种课程的信息[^4]。
##### 3. 教师表 (Teacher)
| 字段名 | 类型 | 描述 |
|------------|-------------|----------------------|
| Tid | INT | 工号, 主键 |
| Tname | VARCHAR | 名字 |
| Department | VARCHAR | 所在部门/学院 |
记录教授们的相关资料。
##### 4. 成绩表 (Score)
| 字段名 | 类型 | 描述 |
|------------|-------------|------------------------|
| Sno | INT | 学号, 外键引用自Student表 |
| Cno | INT | 课程编号, 外键引用自Course表|
| Grade | DECIMAL | 获得的成绩 |
这张表是用来存储每位同学每门科目的考试分数情况[^3]。
##### 5. 日志表 (Log)
| 字段名 | 类型 | 描述 |
|------------|-------------|----------------------------|
| LogId | BIGINT AUTO_INCREMENT | 自增的日志条目唯一标识符 ,主键 |
| Action | TEXT | 发生的动作详情 |
| TimeStamp | TIMESTAMP | 动作发生的具体时刻,默认当前时间戳 |
| UserId | INT | 用户ID, 可能来自任何其他涉及用户的表|
每当有重要事件发生时(比如新增加了一个学生或者某位同学选择了新的科目),就会向这个表里插入一条新纪录以便日后审查或审计之用[^1]。
##### 6. 统计信息表 (StatisticsInfo)
| 字段名 | 类型 | 描述 |
|------------|-------------|------------------------------|
| StatisticType | ENUM('grade_distribution') | 统计类型 |
| DataJson | JSON | 结果集JSON对象形式的数据字段,例如{"A": 10,"B+": 8,...}|
这里专门用来存放一些预计算好的统计数据,方便快速检索展示给前端页面或其他应用层组件使用。
以上就是针对本项目的数据库设计方案。通过这样的架构能够有效地支持后续开发工作中的各项业务逻辑处理,并且保证了良好的性能表现。
```sql
CREATE TABLE Student (
Sno INT PRIMARY KEY,
Sname VARCHAR NOT NULL,
Sex CHAR CHECK (Sex IN ('男','女')),
Age TINYINT UNSIGNED,
ClassNo VARCHAR,
Major VARCHAR,
EntranceTime DATE,
Email VARCHAR UNIQUE);
CREATE TABLE Course(
Cno INT PRIMARY KEY,
Cname VARCHAR NOT NULL,
Credit DECIMAL(3,1),
TeacherID INT,
FOREIGN KEY(TeacherID) REFERENCES Teacher(Tid));
CREATE TABLE Score(
Sno INT,
Cno INT,
Grade DECIMAL(4,1),
PRIMARY KEY(Sno,Cno),
FOREIGN KEY(Sno) REFERENCES Student(Sno),
FOREIGN KEY(Cno) REFERENCES Course(Cno));
CREATE TABLE `Log`(
LogId BIGINT AUTO_INCREMENT PRIMARY KEY,
Action TEXT NOT NULL,
TimeStamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UserId INT);
```
阅读全文
相关推荐
















