【数据库】基于Oracle数据库的教务管理系统设计

本文详细描述了一次关于Oracle数据库的实验,涉及教务系统数据库的设计,包括ER图、实体关系、表结构创建、PL/SQL编程、SQLDeveloper工具使用,以及索引、视图和存储过程的创建。通过实例展示了如何管理对象、数据操作和数据分析。
摘要由CSDN通过智能技术生成

无偿分享一些之前做的实验报告~喜欢点赞+关注(*^_^*)

这个报告只是数据库的设计,没有前后端的其他知识,有需要可以参考

  • 实验目的

掌握Oracle数据库的对象的创建和管理方法,巩固对Oracle数据库基本原理和基础理论的理解。掌握开发Oracle数据库应用程序的技术,巩固对Oracle数据库基本原理和基础理论的理解。

  • 设备与环境

硬件:多媒体计算机

软件:Windows,Oracle 12c 数据库管理系统

  • 实验内容

1系统概述

1.1系统功能介绍

教务系统管理数据库是针对学校教务管理方面设计的一个数据库,主要目的是在选课事项上达到学生、课程和教师的统一,实现更清晰的插入与查询。

1.2功能模块划分

  1. 学生信息管理模块:负责处理学生信息的相关操作。系统可以录入、更新和检索学生的基本信息,包括学号、姓名、性别、年龄等。
  2. 教师信息管理模块:负责处理教师信息的相关操作。
  3. 课程管理模块:负责课程设置和维护的相关操作。系统可以添加课程,设定课时,学分,课程号,课程名等。
  4. 成绩管理模块:负责学生成绩录入、更新和查询的相关操作。可以录入和更新成绩,也可以查询成绩。
  5. 其他模块:各类其他数据库对象使用查询筛选排序。可以以时间为顺序,整理出课程表。还可以查询每个课程的所有信息。

1.3开发语言

Oracle12c教务管理系统数据库的开发语言主要是PL/SQL,这是一种Oracle公司特有的过程式编程语言,主要用于数据库的存储过程、触发器和函数等对象的编写。

1.4开发工具

选择使用Oracle的SQL Developer。这是一个为数据库管理员和开发人员设计的图形化用户界面,提供了一个强大的环境来创建、查询、调试和管理Oracle数据库。

2设计应用系统数据库

2.1系统ER图

图 2-1:ER图

2.2数据库逻辑设计

实体:

  1. 学生(学号,姓名,性别,年龄)
  2. 课程(课程号,课程名,课时,学分)
  3. 教师(编号,姓名,性别,职称,年龄)

联系:

  1. 选课(学号,课程号,考核成绩)
  2. 任课(课程号,编号,任课时间,使用教材)

2.3数据库实现

 2.3.1 数据库表结构

将所有关系模式的表结构列出,如下

  1. 表名:学生表

字段名

数据类型

是否主、外键

约束条件

含义

学号

Char(10)

是主键

唯一约束

学生的学号

姓名

VarChar(30)

非空约束

学生的名字

性别

Char(4)

男或者女

学生的性别

年龄

Int

大于0

学生的年龄

  1. 表名:课程表

字段名

数据类型

是否主、外键

约束条件

含义

课程号

Char(10)

是主键

唯一约束

课程号

课程名

VarChar(30)

非空约束

课程名

课时

Int

大于0

课时

学分

Int

大于0

学分

  1. 表名:教师表

字段名

数据类型

是否主、外键

约束条件

含义

编号

Char(10)

是主键

唯一约束

编号

姓名

VarChar(30)

非空约束

姓名

性别

Char(4)

男或者女

性别

年龄

Int

大于0

年龄

职称

VarChar(30)

职称

  1. 表名:选课表

字段名

数据类型

是否主、外键

约束条件

含义

学号

Char(10)

是主键、外键

外键约束

学生的学号

课程号

Char(10)

是主键、外键

外键约束

课程号

考核成绩

Decimal(10,2)

考核成绩

  1. 表名:任课表

字段名

数据类型

是否主、外键

约束条件

含义

编号

Char(10)

是外键

外键约束

编号

课程号

Char(10)

是主键、外键

外键约束

课程号

任课时间

Date

任课时间

使用教材

VarChar(30)

使用教材

2.3.2 在ORACLE中创建数据表和其他数据对象

写出所有表的sql语句,经过勘误,以下代码成功执行。

(1) 表空间及用户创建语句:

创建一个名为ora1的表空间和CWJ的用户,并授权给CWJ所有权限:

create tablespace ora1

datafile 'd:/ora1.ora'

size 100m

autoextend on;

create user c

identified by 123456

default tablespace ora1

temporary tablespace temp;

grant all privileges to c;

图 3-1:成功截图

(2) 各个数据表创建语句:

create table C.学生表(

学号 char(10) primary key,

姓名 varchar(30) not null,

性别 char(4) check(性别 in('男','女')),

年龄 int check(年龄>0)

)

tablespace ora1;

create table C.课程表(

课程号 char(10) primary key,

课程名 varchar(30) not null,

课时 int check(课时>0),

学分 int check(学分>0)

)

tablespace ora1;

create table C.教师表(

编号 char(10) primary key,

姓名 varchar(30) not null,

性别 char(4) check(性别 in('男','女')),

年龄 int check(年龄>0),

职称 varchar(30)

)

tablespace ora1;

create table C.选课表(  

学号 char(10),  

课程号 char(10),  

考核成绩 decimal(10, 2),

primary key(学号,课程号),

foreign key (学号) references C.学生表(学号),  

foreign key (课程号) references C.课程表(课程号)

)tablespace ora1;

create table C.任课表(  

编号 char(10),  

课程号 char(10) primary key,  

任课时间 date,

使用教材 varchar(30),

foreign key (编号) references C.教师表(编号),  

foreign key (课程号) references C.课程表(课程号)

)tablespace ora1;

图 3-2 建表成功截图

(3) 插入数据:

使用sql developer页面插入,或使用sql语句。

图 3-3学生表

图 3-4教师表

图 3-5课程表

图 3-6选课表

图 3-7任课表

(4) 创建数据库对象:

索引:在选课表的成绩列创建一个降序索引

create index C.ind1 on C.选课表(考核成绩 desc)

tablespace ora1;

图 4-1

视图:创建视图,显示每个课程的任课教师,时间,教材以及上课学生数量等:

create view C.inf1 as

select

    C.课程表.课程号,  

    C.课程表.课程名,  

    C.任课表.编号,  

    C.任课表.任课时间,  

    C.任课表.使用教材,  

   count(distinct C.选课表.学号) AS 学生数量,  

    avg(C.选课表.考核成绩) AS 平均成绩  

from C.课程表,C.任课表,C.选课表

where C.课程表.课程号=C.任课表.课程号 and

C.课程表.课程号=C.选课表.课程号  

group by

    C.课程表.课程号,  

    C.课程表.课程名,  

    C.任课表.编号,  

    C.任课表.任课时间,  

    C.任课表.使用教材;

图 4-2

存储过程:创建一个存储过程,输入学号,可以查询到自己名下课程的平均成绩,并列出单科最高分:

create or replace procedure C.get1

(id in C.学生表.学号%type,av out number,ma out number

)

as

begin

select avg(考核成绩),max(考核成绩) into av,ma from C.学生表

join C.选课表 on C.学生表.学号=C.选课表.学号;

end get1;

图 4-3

调用语句测试:

set serveroutput on;

declare

a number(10,2);

b number(10,2);

begin

C.get1(102,a,b);

dbms_output.put_line('平均分:'||a||' 最高分:'||b);

end;

图 4-4

  • 实验结果及分析

(1) 索引情况:选课表成绩列降序索引

图 5-1

(2) 存储过程调用查询情况:

图5-2 查询学号101

图 5-3 查询学号102

(3) 视图情况:显示每个课程的情况并计算平均成绩

图 5-4 视图

(4) 实验总结:

通过对教务管理系统设计的Oracle综合实验,从关系模式,关系表,建表,添加数据,创建各类数据对象来分析数据这一系列的实验活动,我发现每一个步骤都是必不可少的,让数据库的建立充满逻辑。

在这个过程中,我觉得最重要的是清晰的思路和细心的做法,在此过程中,我更加熟悉对于sql语句的书写和使用,熟练掌握了Oracle SQL Developer的使用,包括创建表空间用户,创建数据表,通过查询完成各项数据库使用……我掌握了Oracle数据库的多种建立方法。这对于在实验过程中遇到问题很有帮助,可以换种思路解决。

另外,我也学会了快速地通过Developer的错误分析找到我书写的sql语句中的漏洞,最终初具规模地完成了教务管理系统数据库的制作,并能够建立视图、索引以及存储过程来分析数据库中的数据,融会贯通了本学期学习的Oracle数据库的各种相关知识,我觉得非常有成就感。

当然,这个实验还有很多地方值得完善,比如说数据库的表用户并没有排上大用场,觉得可以往这方面实现一下,以及因为时间关系,没有做一个前端页面,使得数据库能灵活运用起来。还有我觉得可以使用视图索引存储过程制作出更复杂更有用的数据分析表,教务系统对于我们来说比较熟悉,应该思考如何能让更贴合实际的数据库落实……这些都是值得我们去深入讨论和掌握的。

(5) 报错记录与分析:

图 5-5 报错1

经过检查发现,int类型不能写上长度,去掉之后顺利建表。

图 5-6 报错2

经检查发现,忘记改名,不重名表才能建立。

图 5-7 报错3

经过搜索资料和对比发现,建立外键时,联系不应该写C.课程表.课程号,而是应该写C.课程表(课程号),将字段名写到括号里,报错消失。

图 5-8 报错4

在插入数据的时候无法保存,发现是教师表中的编号重复了,违反了约束条件。

图 5-9 报错5

经过查教材86页的创建索引语法规则,发现把desc误写到括号外面,引发错误。

图 5-10 报错6

百度查询报错原因,发现是因为group后面应该跟上select的所有字段。

图 5-11 报错7

第一错在打错字应该是output,第二错在不明白去哪里看结果,加上一句set serveroutput on;还有一个是小数位数太长,限制了一下number到两位数。

图 5-12 报错8

测试的时候发现调用存储过程计算出来的平均分不是这位同学的真实分数,而变成所有同学的成绩,发现代码写错了,漏了条件与in参数对照。想要加入中文的时候,发现必须要单引号而且要小心不要打成中文字符了。

  • 32
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值