高校学生管理系统数据库设计:班级、学生、课程、成绩表结构
高校学生管理系统数据库设计:班级、学生、课程、成绩表结构
本篇详细介绍了高校学生管理系统中四个核心数据库表:班级表、学生表、课程表和成绩表的设计,包括字段解释、数据类型、约束条件和外键关系,以及一些数据库设计规范和最佳实践。
1. 班级表 tb_class
班级表 tb_class 用于记录全校各二级学院所开设的班级信息,包括班级编号、班级名称、所属学院、人数和班长。
实体型记为:
tb_class (Class_no,Class_name,Depart,Per,Monitor)
建表信息中需对所有列字段都添加说明:
| 字段名 | 数据类型 | 说明 | 约束条件 |
|---|---|---|---|
| Class_no | CHAR(12) | 班级编号,主键 | 4位入学年份2位学院编号2位专业编号2位学制2位流水号,如:202204010301 |
| Class_name | VARCHAR(50) | 班级名称 | 唯一约束,不可有重复相同的班级名称 |
| Depart | VARCHAR(50) | 所属学院 | |
| Per | INT | 人数 | 限制在最少30人,最多不超过55人 |
| Monitor | VARCHAR(50) | 班长 | |
数据存储需求:
- 班级编号规则—4位入学年份2位学院编号2位专业编号2位学制2位流水号;如:202204010301 软件技术2231班;
- 不应有重复相同的班级名称;
- 各班人数限制在最少30人,最多不超过55人;
建表语句:
CREATE TABLE tb_class (
Class_no CHAR(12) PRIMARY KEY,
Class_name VARCHAR(50) NOT NULL,
Depart VARCHAR(50) NOT NULL,
Per INT NOT NULL,
Monitor VARCHAR(50) NOT NULL,
CONSTRAINT ck_class_per CHECK (Per >= 30 AND Per <= 55),
CONSTRAINT uc_class_name UNIQUE (Class_name)
);
2. 学生表 tb_student
学生表 tb_student 用于记录全校学生的信息,包括学号、姓名、班级编号、性别、身份证号、年龄、入学日期、学费、家庭住址、邮编、联系电话、是否共青团员、兴趣爱好和照片。
实体型记为:
tb_student ( Stu_no,Stu_name,Class_no,Gender,ID_no,Age,En_date,Xuefei,Address,Zip,Phone,Isty,Hobby,Photo)
建表信息中需对所有列字段都添加说明:
| 字段名 | 数据类型 | 说明 | 约束条件 |
|---|---|---|---|
| Stu_no | CHAR(14) | 学号,主键 | 4位入学年份2位学院编号2位专业编号2位班级编号2位流水号,如:202204013101 软件技术2231班1号 |
| Stu_name | VARCHAR(50) | 姓名 | |
| Class_no | CHAR(12) | 班级编号 | 外键关联班级表,指向班级编号 |
| Gender | CHAR(2) | 性别 | 默认'男',只可用'男'.'女'表示 |
| ID_no | CHAR(18) | 身份证号 | 唯一约束,不可有相同的身份证号码 |
| Age | INT | 年龄 | 必须17~30之间 |
| En_date | DATE | 入学日期 | 年份必须与学号前4位一致 |
| Xuefei | DECIMAL(6, 2) | 学费 | 不超过8000元/学年 |
| Address | VARCHAR(100) | 家庭住址 | |
| Zip | CHAR(6) | 邮编 | 必须6位数字组成 |
| Phone | VARCHAR(20) | 联系电话 | 唯一约束,不可有相同 |
| Isty | TINYINT | 是否共青团员 | 1表示是,0表示否 |
| Hobby | VARCHAR(20) | 兴趣爱好 | 可以为打球、绘画、音乐、阅读 中的几项 |
| Photo | VARCHAR(100) | 照片 | 以图片路径存储 |
数据存储需求:
- 因记录的是全校学生信息,所以学号不宜直接用自然数列表示,用编号组合表示,学号编号规则— 4位入学年份2位学院编号2位专业编号2位班级编号2位流水号;如:202204013101 软件技术2231班1号;
- 本校无国外留学生、也无少数民族学生;
- 班级编号即该生对应所在班级的编号;
- 性别只可用'男'.'女'表示,默认'男';
- 不可有相同的身份证号码;
- 在校生年龄必须17~30之间;
- 入学日期的年份必须与学号前4位一致;
- 学费不超过8000元/学年;
- 邮编固定必须6位数字组成;
- 联系电话为学生本人手机号码,且不可有相同;
- 1或0表示 是或不是共青团员;
- 每位学生兴趣爱好可以为打球、绘画、音乐、阅读 中的几项;
- 照片以图片路径存储;
- 学生表 与 班级表 相关联,且级联外键约束关联;
建表语句:
CREATE TABLE tb_student (
Stu_no CHAR(14) PRIMARY KEY,
Stu_name VARCHAR(50) NOT NULL,
Class_no CHAR(12) NOT NULL,
Gender CHAR(2) DEFAULT '男' NOT NULL,
ID_no CHAR(18) NOT NULL,
Age INT CHECK (Age >= 17 AND Age <= 30) NOT NULL,
En_date DATE CHECK (YEAR(En_date) = CAST(SUBSTRING(Stu_no, 1, 4) AS INT)) NOT NULL,
Xuefei DECIMAL(6, 2) CHECK (Xuefei <= 8000) NOT NULL,
Address VARCHAR(100) NOT NULL,
Zip CHAR(6) CHECK (LENGTH(Zip) = 6 AND Zip REGEXP '^[0-9]{6}$') NOT NULL,
Phone VARCHAR(20) UNIQUE NOT NULL,
Isty TINYINT CHECK (Isty IN (0, 1)) NOT NULL,
Hobby VARCHAR(20) CHECK (Hobby IN ('打球', '绘画', '音乐', '阅读')) NOT NULL,
Photo VARCHAR(100) NOT NULL,
FOREIGN KEY (Class_no) REFERENCES tb_class (Class_no) ON DELETE CASCADE
);
3. 课程表 tb_course
课程表 tb_course 用于记录全校所开设各门课程的信息,包括课程编号、课程名、课程学分、学时数和课程类型。
实体型记为:
tb_course(Cou_no,Cou_name,credit,Cou_hours,Cou_type )
建表信息中需对所有列字段都添加说明:
| 字段名 | 数据类型 | 说明 | 约束条件 |
|---|---|---|---|
| Cou_no | CHAR(4) | 课程编号,主键 | 学校制定课程编号为0开头的4位数字组成,如0004 |
| Cou_name | VARCHAR(50) | 课程名 | |
| credit | DECIMAL(2, 1) | 课程学分 | 5分制,0.0~5.0分 |
| Cou_hours | INT | 学时数 | 至少32,不超过128 |
| Cou_type | VARCHAR(20) | 课程类型 | 公共课、专业课、选修课 |
数据存储需求:
- 学校制定课程编号为0开头的4位数字组成,如0004;
- 课程的学分为5分制,0.0~5.0分;
- 一门课程学时数至少32,不超过128;
- 学校所开设的课程类型有 公共课、专业课、选修课 三种;
建表语句:
CREATE TABLE tb_course (
Cou_no CHAR(4) PRIMARY KEY,
Cou_name VARCHAR(50) NOT NULL,
credit DECIMAL(2, 1) CHECK (credit >= 0.0 AND credit <= 5.0) NOT NULL,
Cou_hours INT CHECK (Cou_hours >= 32 AND Cou_hours <= 128) NOT NULL,
Cou_type VARCHAR(20) CHECK (Cou_type IN ('公共课', '专业课', '选修课')) NOT NULL
);
4. 学生成绩表 tb_cj
学生成绩表 tb_cj 用于记录学生各科课程考试成绩信息,是学生、课程之间的关系表。
建表信息中需对所有列字段都添加说明:
| 字段名 | 数据类型 | 说明 | 约束条件 |
|---|---|---|---|
| ID | INT | 序号,主键 | 从1开始的自增自然数列 |
| Stu_no | CHAR(14) | 学号 | 外键关联学生表,指向学号 |
| Cou_no | CHAR(4) | 课程号 | 外键关联课程表,指向课程号 |
| Score | DECIMAL(4, 1) | 分数 | 百分制分数,0.0~100.0范围内分数 |
| Credit | DECIMAL(3, 2) | 获得学分 | 考试分数 X 0.05 |
| Test_term | VARCHAR(20) | 考试学期 | 按年度上下学期表示,如:2022年下学期,2023年上学期 |
数据存储需求:
- 成绩表中应记录包括学生、所考的课程、考试分数、所获得的学分、考试学期等信息;
- 序号为从1开始的自增自然数列;
- 考试分数,百分制分数,0.0~100.0范围内分数;
- 所获得的学分为: 考试分数 X 0.05;
- 考试学期按年度上下学期表示,如:2022年下学期,2023年上学期;
- 学生表 和 课程表 都通过 成绩表相关联,且强制外键约束关联 ;
建表语句:
CREATE TABLE tb_cj (
ID INT PRIMARY KEY AUTO_INCREMENT,
Stu_no CHAR(14) NOT NULL,
Cou_no CHAR(4) NOT NULL,
Score DECIMAL(4, 1) CHECK (Score >= 0.0 AND Score <= 100.0) NOT NULL,
Credit DECIMAL(3, 2) GENERATED ALWAYS AS (Score * 0.05) NOT NULL,
Test_term VARCHAR(20) NOT NULL,
FOREIGN KEY (Stu_no) REFERENCES tb_student (Stu_no) ON DELETE CASCADE,
FOREIGN KEY (Cou_no) REFERENCES tb_course (Cou_no) ON DELETE CASCADE
);
总结
以上介绍了高校学生管理系统中四个核心数据库表的设计,这些表结构和约束条件可以满足基本的管理需求。在实际应用中,还可以根据具体情况添加更多字段或约束条件,以及其他数据库表,来构建完整的数据库系统。
同时,建议使用数据库设计工具来辅助设计数据库结构,并进行必要的数据库测试,确保数据库能够满足系统的功能需求和性能要求。
原文地址: https://www.cveoy.top/t/topic/kHw 著作权归作者所有。请勿转载和采集!