本科生事务管理系统数据库的设计与部分实现
第一部分 主流数据库管理系统MySQL概述
1.1 所支持的编程接口或编程语言
为了方便应用程序的开发,MySQL提供了用C编程语言编写的客户机库,它允许从任何C程序的内部访问MySQL数据库。客户机库实现应用程序接口(API),API定义客户机程序如何建立和执行与服务器的通信。然而,使用C语言来编写MySQL程序并不受限制。许多其他语言处理器本身也是由C语言编写的,或具有是有C库的能力。所以MySQL客户机库提供了这个方法,由此,MySQL对这些语言的约束可以建立在C API的上面。这就为与MySQL服务器通信而编写应用程序提供了许多选择。客户机程序的API是用Perl、PHP、Java、Python、C++、TCL和其他一些语言编写的。
1.2 数据字典(或元数据)的组织管理方式、主要内容和查询方法
MySQL与其它的数据库一样,需要一个储存元数据的地方。在MySQL8之前,它们以各种文件的形式保存在不同的地方,例如FRM,TRG,TR等等。随着时间的推移,这些文件逐渐成为了各种环境中的瓶颈。MySQL8推出了支持事务的数据字典。
描述数据库的任何数据—作为数据库内容的对立面—是元数据。因此,列名、数据库名、用户名、版本名以及从SHOW语句得到的结果中的大部分字符串是元数据。还包括INFORMATION_SCHEMA数据库中的表中的内容,因为定义的那些表存储关于数据库对象的信息。
查询方法:各种show,各种select,MySQL的命令行下的命令。
1.3 安全机制
(1)权限表
(2)用户管理
① 登陆和退出MySQL
② 创建用户、删除用户、修改密码
(3)权限管理
① 权限的给予
② 权限列表
③ 权限的回收
1.4 备份与恢复机制。
目前 MySQL支持的免费备份工具有: mysqldump、mysqlhotcopy,还可以用 SQL 语法进行备份: BACKUP TABLE或者SELECT INTO OUTFILE,又或者备份二进制日志(binlog),还可以是 直接拷贝数据文件和相关的配置文件。MyISAM 表是保存成文件的形式,因此相对比较容易备份,上面提到的几种方法都可以使用。Innodb所有的表都保存在同一个数据文件ibdata1中(也可能是多个文件,或者是独立的表空间文件),相对来说比较不好备份,免费的方案可以是 拷贝数据文件、备份binlog,或者用mysqldump。
mysqldump 是采用SQL级别的备份机制,它将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法。
用mysqldump备份出来的文件是一个可以直接倒入的SQL脚本,有两种方法可以将数据导入。一是直接用mysql客户端,二是用SOURCE语法
mysqlhotcopy是一个PERL程序,最初由Tim Bunce编写。它使用LOCK TABLES、FLUSH TABLES和cp或scp来快速备份数据库。它是备份数据库或单个表的最快的途径,但它只能运行在数据库文件(包括数据表定义文件、数据文件、索引文件)所在的机器上。 mysqlhotcopy只能用于备份MyISAM,并且只能运行在类Unix和NetWare系统上。mysqlhotcopy备份出来的是整个数据库目录,使用时可以直接拷贝到mysqld指定的 datadir目录下即可,同时要注意权限的问题。
BACKUP TABLE语法其实和mysqlhotcopy的工作原理差不多,都是锁表,然后拷贝数据文件。它能实现在线备份,但是效果不理想,因此不推荐使用。它只拷贝表结构文件和数据文件,不同时拷贝索引文件,因此恢复时比较慢。用BACKUP TABLE方法备份出来的文件,可以运行RESTORE TABLE语句来恢复数据表。
相较前几种方法,备份数据文件最为直接、快速、方便,缺点是基本上不能实现增量备份。为了保证数据的一致性,需要在靠背文件前,执行以下SQL语句:FLUSH TABLES WITH READ LOCK;也就是把内存中的数据都刷新到磁盘中,同时锁定数据表,以保证拷贝过程中不会有新的数据写入。这种方法备份出来的数据恢复也很简单,直接拷贝回原来的数据库目录下即可。
对于中等级别业务量的系统来说,备份策略可以这么定:第一次全量备份,每天一次增量备份,每周再做一次全量备份,如此一直重复。而对于重要的且繁忙的系统来说,则可能需要每天一次全量备份,每小时一次增量备份,甚至更频繁。为了不影响线上业务,实现在线备份,并且能增量备份,最好的办法就是采用主从复制机制( replication ),在slave机器上做备份。
第二部分 本科生事务管理系统的设计与部分实现
2.1 需求分析
2.1.1数据库管理对象及其基本信息
学生信息:学号、姓名、性别、籍贯、出生日期、所属专业、所属学院、就业去向
宿舍信息:宿舍编号(楼号-层号-房间号)、类型(男宿舍、女宿舍)、管理员工号、管理员姓名、管理员性别、总房间数、空余房间数
课程信息:课程号、课程名、学分、开课学期
项目信息:项目号、项目名、项目级别(重点、一般)、期限、验收等级(优、良、中、合格、不合格)
教师信息:工号、姓名、性别、职称、专长、所属学院
2.1.2功能需求
学工部管理学生的学号、姓名、性别、籍贯、出生日期、所属专业、所属学院、就业去向。并且,学工部可经常查看:各籍贯的生源情况、所属专业及就业去向;统计各籍贯的生源数及男女比例。
团委管理学生的学号、姓名、职务,项目及学生参加项目的情况,教师指导项目的情况。其中,一个学生可以参加多个项目,一个项目可以有多个学生参加。学生参与项目有角色之分(负责人或参与人)。并且,一个教师能指导多项学生项目,一个项目只能有一个指导教师。此外,团委可经常查看:各项目的项目号、项目名、负责人学号、参与人数、指导教师姓名;统计各验收等级的项目数。
教务处管理学生的学号、姓名,课程及学生选课情况,教师情况及教师任课情况。其中,一个学生选修多门课,一门课有多个学生选修。学生每选一门课都有唯一的成绩,成绩按百分制记。并且,一个教师可以多讲授多门课,一门课可以由多个教师讲授。此外,教务处可经常查看:学号、姓名、课程号、课程名、成绩;统计各课程的最高成绩、最低成绩和平均成绩。
宿管科管理学生的学号、姓名、性别,宿舍及学生住宿情况。其中,一个学生只能住一个房间,一个房间可住多个学生(不超过6人),学生住宿有年缴费金额;插入记录时,如果缴费金额高于或低于1200元,将之改为1200元。此外,宿管科可经常查看:总房间数、已住了男生的房间数、已住了女生的房间数、空余房间数及空房间编号;按年度统计学生缴费金额。
2.1.3数据库系统用户
管理员:学工部、团委、教务处、宿舍科的管理员(各部门都只有一位管理员)
一般用户:学工部、团委、教务处、宿舍科的工作人员、教师、学生
超级管理员
2.1.4对数据库系统的操作及权限要求
(1)查询
学工部可查询:各籍贯的生源情况、所属专业及就业去向;统计各籍贯的生源数及男女比例。
团委可查询:各项目的项目号、项目名、负责人学号、参与人数、指导教师姓名;统计各验收等级的项目数。
教务处可查询:学号、姓名、课程号、课程名、成绩;统计各课程的最高成绩、最低成绩和平均成绩。
宿管科可查询:总房间数、已住了男生的房间数、已住了女生的房间数、空余房间数及空房间编号;按年度统计学生缴费金额。
各部门信息的查询在部门内不设置权限,但不能跨部门查询。
(2)增加、删除、更改
各部门都有一位管理员负责相关数据的添加、修改、删除
2.1.5总体概述流程图
2.1.6完整性需求
录入数据采用表格方式,限制录入数据类型及取值范围以确保数据完整性及准确性。
域完整性:从语义出发,规定属性是否可以为null。
一般化完整性约束:(