返回

简单数据库设计作业案例:简单数据库设计作业案例,MySQL学生选课系统设计与实现

来源:网络   作者:   日期:2025-10-24 10:32:32  

案例背景

假设我们要设计一个简单的“学生选课系统”,用于记录学生的基本信息、课程信息以及学生的选课情况,系统需要支持以下功能:

  • 学生信息的增删改查;
  • 课程信息的增删改查;
  • 学生选课记录的添加与查询。

需求分析

在设计数据库之前,我们需要明确系统的功能需求:

  1. 学生(Student):学号、姓名、性别、出生日期、所在院系。
  2. 课程(Course):课程号、课程名、授课教师、学分。
  3. 选课记录(SC):学号、课程号、成绩。

系统需要保证数据的完整性,例如学号和课程号必须唯一,选课记录中的学号和课程号必须与学生表和课程表中的数据一致。


概念模型设计(E-R图)

根据需求,我们可以绘制出以下E-R图:

  • 实体:学生(Student)、课程(Course)、选课记录(SC)。

  • 属性

    • Student:学号(Sno,主键)、姓名(Sname)、性别(Ssex)、出生日期(Sbirth)、院系(Sdept)。
    • Course:课程号(Cno,主键)、课程名(Cname)、教师(Cteacher)、学分(Ccredit)。
    • SC:学号(Sno,外键)、课程号(Cno,外键)、成绩(Grade)。
  • 关系

    学生与课程之间是多对多关系,通过选课记录(SC)关联。

    简单数据库设计作业案例:简单数据库设计作业案例,MySQL学生选课系统设计与实现


逻辑模型设计(关系模式)

将E-R图转换为关系模式:

  1. 学生表(Student)

    CREATE TABLE Student (
        Sno CHAR(8) PRIMARY KEY,  -- 学号,主键
        Sname VARCHAR(20) NOT NULL,
        Ssex CHAR(1) DEFAULT '男',
        Sbirth DATE,
        Sdept VARCHAR(20)
    );
  2. 课程表(Course)

    CREATE TABLE Course (
        Cno CHAR(4) PRIMARY KEY,  -- 课程号,主键
        Cname VARCHAR(40) NOT NULL,
        Cteacher VARCHAR(20),
        Ccredit TINYINT
    );
  3. 选课记录表(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中,我们可以创建上述三个表,并插入一些示例数据:

简单数据库设计作业案例:简单数据库设计作业案例,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;

数据操作示例

  1. 插入学生数据

    INSERT INTO Student VALUES
    ('20230001', '张三', '男', '2000-01-01', '计算机学院'),
    ('20230002', '李四', '女', '2000-02-02', '数学学院');
  2. 插入课程数据

    INSERT INTO Course VALUES
    ('C001', '高等数学', '王老师', 4),
    ('C002', '数据库原理', '李教授', 3);
  3. 插入选课记录

    INSERT INTO SC VALUES
    ('20230001', 'C001', 90.00),
    ('20230001', 'C002', 85.50);
  4. 查询选课成绩

    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语句编写能力。

在实际应用中,数据库设计需要考虑更多的因素,如性能优化、安全性、事务处理等,但作为作业案例,这个设计已经足够展示数据库设计的核心思想。

分类:编程
责任编辑:今题网
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。

相关文章:

文章已关闭评论!