简单数据库设计作业案例:简单数据库设计作业案例,MySQL学生选课系统设计与实现
案例背景
假设我们要设计一个简单的“学生选课系统”,用于记录学生的基本信息、课程信息以及学生的选课情况,系统需要支持以下功能:
- 学生信息的增删改查;
- 课程信息的增删改查;
- 学生选课记录的添加与查询。
需求分析
在设计数据库之前,我们需要明确系统的功能需求:
- 学生(Student):学号、姓名、性别、出生日期、所在院系。
- 课程(Course):课程号、课程名、授课教师、学分。
- 选课记录(SC):学号、课程号、成绩。
系统需要保证数据的完整性,例如学号和课程号必须唯一,选课记录中的学号和课程号必须与学生表和课程表中的数据一致。
概念模型设计(E-R图)
根据需求,我们可以绘制出以下E-R图:
实体:学生(Student)、课程(Course)、选课记录(SC)。
属性:
- Student:学号(Sno,主键)、姓名(Sname)、性别(Ssex)、出生日期(Sbirth)、院系(Sdept)。
- Course:课程号(Cno,主键)、课程名(Cname)、教师(Cteacher)、学分(Ccredit)。
- SC:学号(Sno,外键)、课程号(Cno,外键)、成绩(Grade)。
关系:
学生与课程之间是多对多关系,通过选课记录(SC)关联。

逻辑模型设计(关系模式)
将E-R图转换为关系模式:
学生表(Student):
CREATE TABLE Student ( Sno CHAR(8) PRIMARY KEY, -- 学号,主键 Sname VARCHAR(20) NOT NULL, Ssex CHAR(1) DEFAULT '男', Sbirth DATE, Sdept VARCHAR(20) );课程表(Course):
CREATE TABLE Course ( Cno CHAR(4) PRIMARY KEY, -- 课程号,主键 Cname VARCHAR(40) NOT NULL, Cteacher VARCHAR(20), Ccredit TINYINT );选课记录表(SC):
CREATE TABLE SC ( Sno CHAR(8) NOT NULL, Cno CHAR(4) NOT NULL, Grade DECIMAL(5, 2), PRIMARY KEY (Sno, Cno), -- 复合主键 FOREIGN KEY (Sno) REFERENCES Student(Sno), FOREIGN KEY (Cno) REFERENCES Course(Cno) );
物理模型设计(MySQL实现)
在MySQL中,我们可以创建上述三个表,并插入一些示例数据:

-- 创建数据库
CREATE DATABASE IF NOT EXISTS SchoolDB;
USE SchoolDB;
-- 创建学生表
CREATE TABLE Student (
Sno CHAR(8) PRIMARY KEY,
Sname VARCHAR(20) NOT NULL,
Ssex CHAR(1) DEFAULT '男',
Sbirth DATE,
Sdept VARCHAR(20)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 创建课程表
CREATE TABLE Course (
Cno CHAR(4) PRIMARY KEY,
Cname VARCHAR(40) NOT NULL,
Cteacher VARCHAR(20),
Ccredit TINYINT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 创建选课记录表
CREATE TABLE SC (
Sno CHAR(8) NOT NULL,
Cno CHAR(4) NOT NULL,
Grade DECIMAL(5, 2),
PRIMARY KEY (Sno, Cno),
FOREIGN KEY (Sno) REFERENCES Student(Sno),
FOREIGN KEY (Cno) REFERENCES Course(Cno)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 数据操作示例
插入学生数据:
INSERT INTO Student VALUES ('20230001', '张三', '男', '2000-01-01', '计算机学院'), ('20230002', '李四', '女', '2000-02-02', '数学学院');插入课程数据:
INSERT INTO Course VALUES ('C001', '高等数学', '王老师', 4), ('C002', '数据库原理', '李教授', 3);插入选课记录:
INSERT INTO SC VALUES ('20230001', 'C001', 90.00), ('20230001', 'C002', 85.50);查询选课成绩:
SELECT Student.Sname, Course.Cname, SC.Grade FROM Student JOIN SC ON Student.Sno = SC.Sno JOIN Course ON SC.Cno = Course.Cno WHERE Student.Sno = '20230001';
完整性约束
- 主键约束:确保每张表的主键唯一。
- 外键约束:确保选课记录中的学号和课程号在对应表中存在。
- NOT NULL约束:某些字段如学生姓名、课程名不能为空。
这个简单的“学生选课系统”数据库设计案例涵盖了数据库设计的基本步骤,包括需求分析、概念模型、逻辑模型、物理模型以及SQL实现,通过这个案例,学生可以理解数据库设计的流程,并掌握基本的SQL语句编写能力。
在实际应用中,数据库设计需要考虑更多的因素,如性能优化、安全性、事务处理等,但作为作业案例,这个设计已经足够展示数据库设计的核心思想。
相关文章:
文章已关闭评论!









