目录
设计过程:
概念结构设计(ER图)
数据库具体实施
3.1 建立数据库
3.2 创建数据表
3.3 数据录入
创建索引
创建视图
创建触发器
(1)插入触发器:创建触发器stu_school_after, stu_int当有数据录入时,系统会自动显示“有新业主录入”,并且school表中的scnumb+新插入人数;代码如下所示:
(2)更新触发器:创建触发器tr2当有数据更新时,系统会自动显示“有新业主录入”;代码如下所示:
(3)删除触发器:创建触发器stu_school_after1当有数据删除时,表中对应的scnumb减少;
高校毕业生管理系统是对高校毕业生就业信息的管理,应具有的功能包括毕业生咨询就业政策、了解就业新闻、查询招聘信息和发布个人求职信息:招聘单位发布招聘信息、了解国家相关政策、查看毕业生求职信息,同时形成了就业人数统计:系统管理人员的功能,包括对大学毕业生、招聘单位的管理和维护,同时完成对数据库的操作,其中包括就业政策,就业新闻等信息的添加,删除,修改。如图2-1所示:
图2-1功能模块图
2.2.1管理员登陆子系统
(1)学生信息管理模块
该模块的主要功能是添加和维护学生基本信息。
(2)企业信息管理模块
该模块的主要功能是添加和维护企业基本信息。
2.2.2大学生登陆子系统
(1)个人信息查看模块
该模块的主要功能是查看个人基本信息。
(2)企业信息查看模块
该模块的主要功能是搜索和查看企业基本信息。
2.2.3企业登录子系统
(1)企业信息发布模块
该模块主要功能是发布企业的招聘信息。
(2)大学生信息查看模块
该模块主要功能是查看应聘大学生的个人基本信息。
(1)学生实体
学生是本概念的重要标识。在学生,知道学生的姓名和学号就可以很快的查找到该学生所有的信息包括所在学校,职业该实体包括姓名,学号,性别,所在学院,所在学校,电话,所属职业,就业状态。具体属性如图2-2所示:
2.学院实体
该实体包括学院编号,学院名称,学院地址,院长。在录入学生信息时,因为编号是每个人是唯一的,所以需要录入学院的编号作为业主的唯一标识。该实体包括学院编号,学院名称,学院地址,院长。具体属性如图2-3:
图2-3学院主要信息-属性图
3.职业实体
该实体包括职业名称,职业编号,所属公司。职业录入系统是,要确定职业的名字,编号。以此来方便系统管理者的使用。同时,要记录职业的所属公司,以此来防止突发情况的发生。录入一个职业信息时,需要系统同时录入职业名称,职业编号,所属公司。具体属性如图2-4:
图2-4职业主要信息-属性图
4.学校实体
学校在就业中。学校是重要的评判表识。学校还应该有学校名称,学校编号,学校地址,这样就可以更加直观的展示出学校的信息。该实体包括学校名称,学校编号,学校地址,校长。具体属性如图2-5:
图2-5学校主要信息-属性图
5.公司实体
公司在录入信息时,该系统会自动生成一个唯一并且不重复的编号,并且会录入学生的信息。同时记录学生和学校来确定到底是录取了哪一个。所以该实体包括公司名称,公司编号,公司地址。具体属性如图2-6:
图2-6公司主要信息-属性图
6.整体E-R图
E-R图是最常用的概念模型表示方法,也是数据库的核心和基础,是按照用户的观点来对数据和信息进行建模,依据概念模型设计应具有的特点,真实性,易理解性,易修改性,易转换性。绘制出整体实体图包括所有实体之间的联系,整体E-R图如图2-7所示:
图2-7 系统总体E-R图
本次设计是建立在MySQL关系数据库基础上,数据库的名字是wym,通过命令create database wym; 来实现。可以通过show databases;进行数据库是否存在的验证。
本系统一共创建五张表分别是:学生(student)、学院(dept)、职业(p)、学校(school)表以及公司表(company)。
(1)Student表用来记录学生的基本信息,用于对所有学生信息的统计与管理,其主要属性字段包括姓名(stuname)、学号(stuno)、性别(stusex)、所在学院(dno)、所在学校(scno)、所属职业(pno),就业状态(answer)student如表3-1所示:
表3-1 student表结构
列名 |
描述 |
数据类型 |
主外键 |
是否允许空值 |
stuname |
姓名 |
nvarchar(8) |
no |
|
stuno |
学号 |
char(8) |
主键 |
no |
stusex |
性别 |
nchar(1) |
yes |
|
dno |
所在学院 |
char(8) |
no |
|
scno |
所在学校 |
char(8) |
no |
|
tel |
电话 |
char(12) |
yes |
|
pno |
所属职业 |
char(6) |
no |
|
answer |
就业状态 |
nchar(1) |
no |
创建student表的代码:
create table student (
stuname nvarchar(8) not null,
stuno char(8) not null,
stusex nchar(1),
dno char(8) not null,
scno char(8) not null,
tel char(12),
pno char(6) not null,
answer nchar(1) not null,
Primary key(stuno) );
(2)dept表用来记录学院的基本信息,用于对所有学院信息的统计与管理,其主要属性字段包括学院编号(dno)、学院名称(dname)、院长(dchair)、所在学校(scno),dept如表3-2所示:
列名 |
描述 |
数据类型 |
主外键 |
是否允许空值 |
dno |
学院编号 |
char(10) |
主键 |
no |
dname |
学院名称 |
nvarchar(10) |
no |
|
dchair |
院长 |
nvarchar(4) |
yes |
|
scno |
所在学校 |
char(10) |
no |
表3-2 dept表结构
创建dept表的代码:
create table dept(
dno char(10) not null,
dname nvarchar(10) not null,
dchair nvarchar(4),
scno char(10) not null,
Primary key(dno));
表3-3 p表结构
列名 |
描述 |
数据类型 |
主外键 |
是否允许空值 |
pname |
职业名称 |
nvarchar(8) |
no |
|
pno |
职业编号 |
char(8) |
主键 |
no |
cno |
所属公司 |
char(8) |
no |
创建p表的代码:
create table p(
pname nvarchar(8) not null,
pno char(8) not null,
cno char(8) not null,
Primary key(pno) );
(4)School表用来记录学校的基本信息,用于对所有学校信息的统计与管理,其主要属性字段包括学校名称(scname)、学校编号(scno)、学习人数(scnumb)、学校地址(scaddress),school如表3-4所示:
表3-4 school表结构
列名 |
描述 |
数据类型 |
主外键 |
是否允许空值 |
scname |
学校名称 |
nvarchar(8) |
no |
|
scno |
学校编号 |
char(10) |
主键 |
no |
scnumb |
学校人数 |
char(10) |
no |
|
scaddress |
学校地址 |
nvarchar(50) |
yes |
|
scchair |
校长 |
nvarchar(4) |
yes |
创建school表的代码:
create table school(
scname nvarchar(8) not null,
scno char(10) not null,
Scnumb char(10)not null,
scaddress nvarchar(50),
scchair nvarchar(4),
Primary key(scno));
表3-5 company表结构
列名 |
描述 |
数据类型 |
主外键 |
是否允许空值 |
cname |
公司名称 |
nvarchar(9) |
no |
|
caddress |
公司地址 |
nvarchar(20) |
yes |
|
cno |
公司编号 |
char(8) |
主键 |
no |
创建company表的代码:
create table company(
cname nvarchar(9) not null,
caddress nvarchar(20),
cno char(8) not null,
Primary key(cno));
表中的数据是后期进行相关数据操作的基础,本次设计主要通过insert into命令来实现数据的录入,insert命令可以实现单行数据的录入,也可以实现多行数据的录入。
(1)向student表中插入数据的代码:
insert into student values('王林','2020078','男','艺术','清华','139156','网络工程师','是');
insert into student values('伍容华','202058','女','会计','五道口','13586','会计师','是');
insert into student values('陈林琳','202008','女','日语','五道口','178516','学生','不');
通过select * from student命令进行数据的查看
(2)向dept表中插入数据的代码
mysql> insert into dept values ('123456','艺术','','清华');
mysql> insert into dept values ('12345','会计','','五道口');
mysql> insert into dept values ('12347','日语','','五道口');
通过select * from dept命令进行数据的查看
(3)向p表中插入数据的代码
mysql> insert into p values('网络工程师','123456','5');
mysql> insert into p values('会计师','123457','4');
mysql> insert into p values('汉教师','153457','6');
通过select * from p命令进行数据的查看
(4)向school表中插入数据的代码
mysql> insert into school values('清华','1','1000','北京','');
mysql> insert into school values('五道口','2','1000','北京','');
通过select * from school命令进行数据的查看
(5)向company表中插入数据的代码
mysql> insert into company values('华为','深圳','01');
mysql> insert into company values('腾讯','深圳','02');
mysql> insert into company values('米哈游','上海','03');
mysql> insert into company values('FS','日本','04');
通过select * from company命令进行数据的查看
索引中的主索引可以保证实体的完整性,普通的索引是为了提高查找速度,主索引时每个表必须建立的。视图则是以另外一种视角对数据表里的数据进行访问,同时保证数据的安全性,触发器的使用使得数据操作达到一致性。
对公司创建唯一索引(适合候选码也就是公司名称),具体代码如下:
create unique index idx_com on company(cno asc);
create unique index idx_p on p(pno desc);
create unique idx_dept on dept(dno desc);
create unique idx_scl on school(scno);
通过show index from 表名命令可以查看创建的索引情况
创建student视图,视图是一个虚拟表,其内容由查询定义。同真实表一样,视图包含一系列带有名称的列和行数据,但视图并不是数据库真实存储的数据表。视图是从一个、多个表或者视图中导出的表,包含一系列带有名称的数据列和若干条数据行。
(1)创建student视图,查询计算机学生的信息姓名,学号,性别,具体运行代码如下:
create view v_student as
elect stuname,stuno,stusex
from student
where dno='计算机'
查看视图view_student,如图3-7所示:
(2)创建school视图,查询清华学校的编号具体运行代码如下:
create view v_school
as select scname,scno
from school where scname='清华'
查看视图view_school,如图3-8所示:
(3)查询学生的信息姓名,学号,性别,所在学院,所在学校,就业状态,将student表与school表连接后创建视图查看学校学生信息具体运行代码如下:
mysql> create view view1 as select
-> stuname as 姓名,
-> stuno as 学号,
-> stusex as 性别,
-> dno as 所在学院,
-> school.scno as 所在学校,
-> answer as 就业状态
-> from student join school on school.scname=student.scno ;
查看视图view1,如图3-9所示:
触发器是一种特殊的存储过程,它在视图更改触发器所保护的数据时自动执行。此外触发器有很重要的作用。触发器可以实现复杂的非标准的数据库相关完整性规则,触发器可以对数据库中相关的表进行连环更新。创建的触发器如下:
delimiter $$
create trigger stu_school_after after insert on student
for each row
begin
update school set Scnumb=Scnumb+1
where new.scno=scname;
end$$
delimiter ;
mysql> create TRIGGER stu_int after insert
-> on student for each row
-> set@str='有新学生';
输入insert into student values('陈林','202008','女','日语','五道口','178516','学生','不');
mysql> create TRIGGER tr2 after update
-> on student for each row
-> set@str='已更新'
delimiter $$
create trigger stu_school_after1 after delete on student
for each row
begin
update school set Scnumb=Scnumb-1
where old.scno=scname ;
end$$
delimiter ;
输入delete from student where stuname='陈林'AND scno='五道口';