设计某高校学生选课管理系统

本文介绍了如何设计和优化某高校的学生选课管理系统,包括数据库设计、E-R图、存储过程和触发器的创建,以确保数据的完整性和一致性。通过引入临时班级实体,简化了教师、课程和学生的多对多关系,并实现了防止选课冲突、统计学分和任课人数等功能。
摘要由CSDN通过智能技术生成

设计某高校学生选课管理系统

因为期末的时候做数据库综合实验太匆忙,很多地方都是能用就好,做完之后突然想到可以改进的方法,所以现在寒假来重做一下

题目如下:

设计某高校学生选课管理系统

  • 实现学生信息、课程学生管理;

  • 实现教师及任课信息管理;

  • 实现选课登记,要保证学生不能选修重复的课程(实用触发器实现);

  • 创建存储过程统计学生指定学期选修课程的总学分数;

  • 创建视图查询2006-2007学年,没有被选修的课程;

  • 创建存储过程统计各教师任课的学生人数;

  • 创建表间关系

前言

这部分说的是我之前的实现,和改进思路,节省时间可跳过。

因为要求对于教师和课程等等的对应关系没有说明,所以可以自由发挥,我能找到 教师和课程之间是一对一关系的 实现,但是因为我想要实现教师课程多对多的数据库,所以就自己发挥了。

当时做实验的时候,对数据的描述如下:

一名学生可以选修多门课程,一门课程可被多个学生选修,每门课程对应一个老师,每门课程有一个成绩,且选修课程名不能重复;一名教师可以任教多门课程,一门课程可由多个老师教授,每个老师所任教的每门课程有一个课程评价;一个老师可教多名学生。

E-R图如下:
在这里插入图片描述

用Excel做的表格如下:
在这里插入图片描述

这个实现的问题就在于每个学生选的课程,是需要教师号和课程号一起才能共同确定的,这种情况实验要求就会很麻烦(而且E-R图上是三角多对多感觉很难受)改进思路就是将多一个临时班级实体,一个临时班级对应一个教师和一个课程,这样就可以将学生对老师和学生对课程这两个多对多关系化简成临时班级对老师,临时班级对课程这两个一对多的关系。

接下来,正文开始

数据库描述和E-R图

有要求,可转化成如下数据间关系:

一名学生可以选修多门课程,一门课程可被多个学生选修,学生先修课程的实质是选临时班级。每个临时班级对应一门课程和一个老师,每门课程有一个成绩,且选修课程名不能重复;一名教师可以任教多门课程,一门课程可由多个老师教授。

依照此描述,E-R图如下:
在这里插入图片描述

这里临时班级多了一个人数的属性主要是为了接下来统计人数方便。

这里可以先按照E-R图在excel上把表建出来,输一些用于插入数据时做参考和验证。
在这里插入图片描述

数据库建立

需要建立的东西如下(加粗为主码):

  • 实体

    学生(学号,姓名,性别,生日,专业)

    教师(职工号,姓名,性别)

    课程(课程号,课程名,学分,开课学期)

    临时班级(班级号,课程号,教师号,人数)

  • 关系

    选课(学号班级号,成绩)

  • 视图

    未选修06-07(班级号,课程名,教师名)

  • Trigger

    学生不能选择课程号相同的课程。

  • 存储过程

    查看指定学期的学生学分

    各教师任课的学生人数

下面是实现过程:

  • 建立选课模式

    CREATE SCHEMA select_courses;
    
  • 建立实体表

    -- student table
    CREATE TABLE students(
        stu_id INT PRIMARY KEY,
        name VARCHAR(40),
        birth_day DATE,
        sex VARCHAR(1),
        major VARCHAR(40)
    );
    
    -- teacher table
    CREATE TABLE teathers(
        tea_id INT PRIMARY KEY,
        name VARCHAR(40),
        sex VARCHAR(1)
    );
    
    -- courses table
    CREATE TABLE courses(
        course_id INT PRIMARY KEY,
        course_name VARCHAR(40),
        credit INT,
        open_time VARCHAR(20)
    );
    
    -- temp class table
    CREATE TABLE classes(
        class_id INT PRIMARY KEY,
        course_id INT,
        tea_id INT,
        number INT DEFAULT 0,
        FOREIGN KEY (course_id) REFERENCES courses(course_id) ON DELETE CASCADE,
        FOREIGN KEY (tea_id) REFERENCES teathers(tea_id) ON DELETE CASCADE
    );
    
  • 建立多对多关系表

    CREATE TABLE select_courses(
        stu_id INT,
        class_id INT,
        grade INT,
        PRIMARY KEY (stu_id
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值