课程设计
课程名称数据库
题目名称教职工管理系统学生学院计算机
专业班级
学号
学生姓名
指导教师左亚尧2013年 1 月15 日
目录
1 需求分析 (4)
2 功能分析 (4)
3 概念设计............................................................................................错误!未定义书签。
4 逻辑结构设计 (5)
5 物理结构设计 (5)
6 数据库的实现 (6)
6.1 视图 (6)
6.2 存储过程 (6)
6.3 触发器 (6)
6.4 表 (6)
6.5 数据库在SQL Sever2000中显示 (8)
7 总结 (15)
8 参考文献............................................................................................错误!未定义书签。
一、需求分析、
90年代中期,由于Internet 的迅速普及,使Intranet成为Internet技术在企业管理信息系统中的应用和延伸,形成了集计算机,计算机网络、数据库、分布式计算等于一体的信息技术综合体,它打破了时间和地域的界限,使信息交流变得快捷、准确,为建立现代企业管理信息系统提供了充足的条件。教职工管理系统在此基础上延伸、扩展,使之上下、内外全面贯通。高教教职工管理系统是在适应市场需求的客观前提下,为了满足各高校管理自己学校所在的教职员信息而开发的。该系统的是终目的是要将各位职员的信息放到网络上,以方便管理。
系统采用模块化程序设计方法,既便于系统功能的各种组合和修改,又便于未参与开发的技术维护人员补充、维护。该系统具备数据库维护功能,及时根据用户需求进行数据的添加、删除、修改、备份等操作。
二、功能分析、
根据分析,该管理系统必须具备如下几个功能:
1.能够记录教职工各种基本资料;员工各种信息的输入,包括员工的基本信息,学历信息,婚姻状况信息,职称等
2.系统使用者能够查询信息,能进行对各员工各种信息的修改以及对于转出,辞退,退休员工的信息删除;
3.保障数据库安全,优化数据库,,可以在程序中实现数据库备份和恢复。
4.界面的友好性。
三、概念设计、
在需求分析阶段所得到的应用需求应该首先抽象为信息世界的结构,才能更好地、更准确地用某一DBMS实现这些需求。
概念结构的主要特点是:
1.能真实、充分地反应现实世界,包括事物和事物之间的联系,能满足用户对数据的
处理要求,是对现实世界的一个真实模型;
2.易于理解,从而可以用它和不熟悉计算机的用户交换意见,用户的积极参与是数据
库设计成功的关键;
3.易于更改,当应用环境和应用要求改变时,容易对概念模型修改和扩充;
4.易于向关系、网状、层次等各种数据模型转换。
概念结构是各种数据模型的共同基础,它比数据模型更独立于机器、更抽象,从而更加稳定。
描述概念模型的有力工具是E-R模型。
下面设计教职工管理系统的E-R图:
四、逻辑结构设计、
下面将E-R图转换为关系模型:
员工信息(员工编号,员工姓名,年龄,性别,出生年月,婚姻状态,政治面貌,学历,部门编号,职务,联系方式,备注)主键:员工编号;外码:部门编号;
部门信息(部门编号,部门名称,部门人数)主键:部门编号;
奖惩信息(奖惩编号,员工编号,奖罚时间,奖罚原因,奖罚地点,备注)主键:奖惩编号,外码:员工编号;
薪资信息(薪资编号,员工编号,基本工资,福利,奖金,计算方法,实发工资,发放日期),主键:薪资编号;外码:员工编号。
五、物理结构设计、
数据库物理设计阶段的任务是根据具体计算机系统(DBMS和硬件等)的特点,为给定的数据库系统确定合理的存储结构和存取方法。所谓的“合理”主要有两个含义:一个是要使设计出的物理数据库占用较少的存储空间,另一个对数据库的操作具有尽可能高的速度。主要体现在索引和蔟集的设置。
存储结构
确定数据库的存储结构主要指确定数据的存放位置和存储结构,包括确定关系、索引、日志、备份等的存储安排及存储结构,以及确定系统存储参数的配置。
将日志文件和数据库对象(表、索引等)分别放在不同的磁盘,可以改进系统的性能,提高系统的安全性。所以,系统应将日志文件和数据文件存放在不同磁盘上。
六、数据库的实现、
6.1 视图
视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图。分布式查询也可用于定义使用多个异类源数据的视图。
6.2 存储过程
存储过程就是将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。
存储过程的优点:
(1).存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
(2).当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
(3).存储过程可以重复使用,可减少数据库开发人员的工作量
(4).安全性高,可设定只有某此用户才具有对指定存储过程的使用权。
6.3 触发器
触发器是一种特殊类型的存储过程,它不同于我们前面介绍过的存储过程。触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名字而被直接调用。当对某一表进行诸如Update、 Insert、 Delete 这些操作时,SQL Server 就会自动执行触发器所定义的SQL 语句,从而确保对数据的处理必须符合由这些SQL 语句所定义的规则。
触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性。除此之外,触发器还有其它许多不同的功能:
(1) 强化约束(Enforce restriction)
触发器能够实现比CHECK 语句更为复杂的约束。
(2) 跟踪变化Auditing changes
触发器可以侦测数据库内的操作,从而不允许数据库中未经许可的指定更新和变化。
(3) 级联运行(Cascaded operation)。
触发器可以侦测数据库内的操作,并自动地级联影响整个数据库的各项内容。例如,某个表上的触发器中包含有对另外一个表的数据操作(如删除,更新,插入)而该操作又导致该表上触发器被触发。
(4) 存储过程的调用(Stored procedure invocation)。
在物理结构中,数据的基本存取单位是存储记录。有了逻辑结构以后,就可以设计存储记录结构,一个存储记录可以与多个逻辑记录相对应。存储记录就包括记录的组成,数据项的类型和长度等。
6.4下面是各个信息表:
6.5数据库在SQL Sever2000中显示如下:(1)数据库:
(2)员工信息表:
(3)部门信息表:
(4)薪资信息表:
(5)奖惩信息表:
(6)视图1:部门部长信息
(7)视图2:员工基本信息
(8)主要代码:
1、创建教职工管理数据库:
CREATE DATABASE教职工管理
ON
(NAME=教职工管理DAT,
FILENAME='D:\SQL\database\school\教职工管理DAT.MDF', SIZE=5,
MAXSIZE=20,
FILEGROWTH=2
)
LOG ON
(NAME=教职工管理LOG,
FILENAME='D:\SQL\database\school\教职工管理LOG.LDF', SIZE=5,
MAXSIZE=20,
FILEGROWTH=2
)
--------------------------------------------------------
2、创建备份文件
sp_addumpdevice'disk','BACKUP1','D:\SQL\database\school\教职工管理backup1.dat'
go
BACKUP DATABASE教职工管理TO BACKUP1
--------------------------------------------------------------------
3、创建表
CREATE TABLE部门信息表
(
部门编号INT PRIMARY KEY,
部门名称VARCHAR(20)UNIQUE NOT NULL,
部门人数INT CHECK(部门人数>=0)NOT NULL,
)
-------------------------------------------
CREATE TABLE员工信息表
(
员工编号INT NOT NULL PRIMARY KEY,
员工姓名VARCHAR(20)NOT NULL,
年龄INT CHECK(年龄>=1)NOT NULL,
性别VARCHAR(2)CHECK(性别IN('男','女'))NOT NULL,
出生年月Datetime NOT NULL,
婚姻状态VARCHAR(4)CHECK(婚姻状态IN('已婚','未婚'))NOT NULL,
政治面貌VARCHAR(20)CHECK(政治面貌IN('清白','团员','党员'))NOT NULL, 学历VARCHAR(20)NOT NULL,
部门编号INT NOT NULL,
职务VARCHAR(20)NOT NULL,
联系方式VARCHAR(11)UNIQUE NOT NULL,
备注VARCHAR(500),
FOREIGN KEY(部门编号)REFERENCES部门信息表(部门编号)
)
---------------------------------------------------------
CREATE TABLE薪资信息表
(
薪资编号INT PRIMARY KEY,
员工编号INT NOT NULL,
基本工资INT CHECK(基本工资>=0)NOT NULL,
福利INT CHECK(福利>=0)NOT NULL,
奖金INT CHECK(奖金>=0)NOT NULL,
计算方法VARCHAR(50)NOT NULL,
实发工资INT CHECK(实发工资>=0),
发放日期Datetime NOT NULL,
FOREIGN KEY(员工编号)REFERENCES员工信息表(员工编号)
)
----------------------------------------------------------
CREATE TABLE奖惩信息表
(
奖惩编号INT PRIMARY KEY,
员工编号INT NOT NULL,
奖罚时间Datetime NOT NULL,
奖罚原因VARCHAR(100)NOT NULL,
奖罚地点VARCHAR(20)NOT NULL,
备注VARCHAR(500),
FOREIGN KEY(员工编号)REFERENCES员工信息表(员工编号)
)
---------------------------------------------------------------
4、创建视图:
--视图员工基本信息:
CREATE VIEW员工基本信息(员工姓名,部门名称,职务,联系方式,薪资)
AS SELECT员工姓名,部门名称,职务,联系方式,实发工资
FROM员工信息表,部门信息表,薪资信息表
WHERE员工信息表.部门编号=部门信息表.部门编号
AND员工信息表.员工编号=薪资信息表.员工编号
-----------------------------------------------------
--视图:各部门部长信息
CREATE VIEW部门部长信息(部门编号,部门名称,员工编号,员工名字)
AS SELECT部门信息表.部门编号,部门名称,员工编号,员工姓名
FROM员工信息表,部门信息表
WHERE员工信息表.部门编号=部门信息表.部门编号
AND员工信息表.职务='部长'
--------------------------------------------------------------
5、创建存储过程
--存储过程LOOKWAGE:根据员工提交的员工编号和工资发放时间,查看该员工的薪资信息,-- 包括员工编号,姓名,实发薪资,和发放日期。
CREATE PROCEDURE LOOKWAGE
@ID INT,@TIME Datetime
AS
SELECT员工信息表.员工编号,员工姓名,实发工资,发放日期
FROM员工信息表,薪资信息表
WHERE员工信息表.员工编号=薪资信息表.员工编号
AND员工信息表.员工编号=@ID AND发放日期=@TIME
--存储过程LOOKREWARDS:根据员工提交的员工编号和奖罚时间,查看该员工的奖罚信息,-- 包括员工编号,姓名,奖罚原因,奖罚时间。
CREATE PROCEDURE LOOKREWARDS
@ID INT,@TIME Datetime
AS
SELECT员工信息表.员工编号,员工姓名,奖罚原因,奖罚时间
FROM员工信息表,奖罚信息表
WHERE员工信息表.员工编号=奖罚信息表.员工编号
AND员工信息表.员工编号=@ID AND发放日期=@TIME
--------------------------------------------------------------------- --存储过程Find_Minister:根据提交的部门编号,查看该部门的部长
CREATE PROCEDURE Find_Minister
@ID INT
AS
SELECT部门信息表.部门编号,部门信息表.部门名称,员工信息表.员工编号,员工姓名FROM员工信息表,部门信息表
WHERE员工信息表.部门编号=部门信息表.部门编号
AND员工信息表.职务='部长'
-------------------------------------------------------------------
--6、创建触发器
--触发器workerid:要求员工信息表中的员工编号被修改时,薪资信息表
-- 奖惩信息表中的员工编号也被修改。
CREATE TRIGGER WORKERID ON员工信息表
FOR UPDATE
AS
BEGIN
IF(UPDATE(员工编号))
BEGIN
UPDATE薪资信息表
SET薪资信息表.员工编号=(SELECT员工编号FROM inserted)
WHERE薪资信息表.员工编号=(SELECT员工编号FROM deleted)
UPDATE奖惩信息表
SET奖惩信息表.员工编号=(SELECT员工编号FROM inserted)
WHERE奖惩信息表.员工编号=(SELECT员工编号FROM deleted)
END
END
------------------------------------------------------------------
--触发器CHECK_EXIST:
-- 向员工信息表插入一条记录时,检查该记录的部门信息在部门信息表
-- 是否存在,若不存在则不允许插入。
CREATE TRIGGER CHECK_EXIST
ON员工信息表
FOR INSERT
AS
IF EXISTS(SELECT*FROM inserted a
WHERE a.部门编号NOT IN(SELECT部门信息表.部门编号FROM部门信息表)) BEGIN
RAISERROR('该部门不存在!!',16,1)
ROLLBACK TRANSACTION--撤销刚才的操作,恢复到原来的状态
END
--------------------------------------------------------------------- --触发器COUNT_STAFF
-- 向员工信息表插入一条记录时,该员工所在的部门人数加.
CREATE TRIGGER COUNT_STAFF
ON员工信息表
AFTER INSERT
AS
BEGIN
UPDATE部门信息表
SET部门人数=部门人数+1
WHERE部门编号IN(SELECT部门编号FROM inserted)
END
------------------------------------------------------------
--触发器departid:要求部门信息中的部门编号被修改时,员工信息表中员工
--所属部门编号也被修改。
CREATE TRIGGER departid ON部门信息表
FOR UPDATE
AS
BEGIN
IF(UPDATE(部门编号))
UPDATE员工信息表
SET员工信息表.部门编号=(SELECT部门编号FROM inserted)
WHERE员工信息表.部门编号=(SELECT部门编号FROM inserted)
END
---------------------------------------------------------------
--触发器CHECK_DELETE:删除员工记录时,该员工所在部门人数减.
CREATE TRIGGER CHECK_DELETE
ON员工信息表
FOR DELETE
AS
BEGIN
UPDATE部门信息表
SET部门人数=部门人数-1
WHERE部门编号IN(SELECT部门编号FROM inserted)
END
七、总结、
在本学期对数据库的学习和在课程设计的制作中,非常感谢老师的耐心讲解与指导。在设计过程中运用较多的是老师在上课时候讲解的例子,受益匪浅。同时也学到了对问题的研究和思维方法。这也对本次课程设计的制作起到了积极的帮助和影响。也加深了对数据库的理解,对数据库操作也有了进一步的了解。
在对教职工管理系统的开发过程中,我学到了许多有关数据库管理软件设计的东西。在设计过程中,逐步了解到书本上的知识很重要,作为最基础的部分,带给我的是新的视角。使我重新认识了数据库,对数据库的兴趣也明显增加了许多。最大的收获莫过于对与系统的前期分析。可以从一个大的角度来判断整个系统的性能,从而分析出需要创建哪些表实现整体的功能。
当然在设计中还有很多不足的地方。对于这样的软件开发,由于没有相应的切合实际的需求分析,所以在开发过程中也遇到了许多棘手的问题。对于数据库的操作不够熟练,在整个系统的考虑方面也有些许不足。但是,我会在今后的学习中,加深自己在数据库方面的培养,提高自己对与建立数据库时候的分析以及应用的能力。
八、参考文献
[1]王珊,萨师煊.数据库系统概论(第四版).北京.高等教育出版社
[2] 李雁翔 .数据库技术及应用 .高等教育出版社