课程设计说明书
题目 工厂数据库管理系统 系(部) 计算机科学与技术系 专业(班级) 姓名 学号 指导教师 起止日期
课程设计任务书
课程名称:数据库系统原理
设计题目:数据库系统课程设计 工厂数据库管理系统
1、某工厂需建立一个管理数据库存储以下信息: 工厂包括厂名和厂长名。
一个厂内有多个车间,每个车间有车间号、车间主任姓名、地址和电话。 一个车间有多个工人,每个工人有职工号、姓名、年龄、性别和工种。 一个车间生产多种产品,产品有产品号、产品名称和价格。
一个车间生产多种零件,一个零件也可能为多个车间制造。零件有零件号、重量和价格。 一个产品由多种零件组成,一种零件也可装配出多种产品。 产品与零件均存入仓库中。
厂内有多个仓库,仓库有仓库号、仓库主任姓名和电话。 2、系统功能的基本要求:
按照一定条件查询、统计工人和产品等基本信息,能模拟工厂生产过程中对原材料(零件)、产品检测、库存环节的管理。 各阶段具体要求: 1、需求分析阶段
● 定义数据项的含义和取值 ● 定义目标系统的数据流 2、概念结构设计阶段 ● 画出实体模型E-R 图 3、逻辑结构设计阶段
● 将实体模型转化为关系模型
● 给出每个关系的主关键字和函数依赖集 ● 分析你所设计的关系数据库模式是否属于3NF 4、物理设计阶段
● 确定所有字段的名称、类型、宽度、小数位数及完整性约束 ● 确定数据库及表的名称及其组成 ● 确定索引文件和索引关键字 5、数据库安全及维护设计阶段
● 设计一个适合的数据库安全策略(用户身份认证、访问权限、视图) ● 为了实现复杂的数据完整性约束,设计适当的触发器 ● 设计一个适合的数据库备份策略 6、实施阶段
要求所有操作必须在查询分析器中用SQL 语句或系统存储过程完成。
设计工作量:
(1)软件设计:完成问题陈述中所提到的所有需求功能。
(2)论文:要求撰写不少于3000个文字的文档,详细说明各阶段具体要求。
工作计划:
安排两周时间进行课程设计,软件开发步骤如下,第一周完成1~4,第二周完成5~8,论文同步进行; 1) 选定题目 2) 需求分析 3) 概念结构设计 4) 逻辑结构设计 5) 物理设计 6) 数据库安全及维护设计 7) 数据库上机实现 8) 答辩
设计工作量:
40课时
工作计划:
见课表
指导教师签名:
教研室主任签名:
系主任签名:
日期: 日期: 日期:
长沙学院课程设计鉴定表
摘 要
根据而今信息时代,信息越来越多,越复杂,这时就需要一种管理数据的软件,本次课程设计运用SQL server 2008来实现数据的管理,本次试验通过SQL 语句来实现工厂的流程,使工厂运行效率达到最大值,需要对其进行分析需求,逻辑设计,物理设计,安全性分析,权限设置等操作。
关键词:SQL 管理数据 工厂
目 录
一、引言 . ...................................................................................................................................................................... 7 1.1 1.2
编写目的 ...................................................................................................................................................... 7 参考资料 ...................................................................................................................................................... 7
二、 需求规约 .......................................................................................................................................................... 8 2.1 业务描述 . ........................................................................................................................................................... 8 2.2 需求分析 . ........................................................................................................................................................... 8 三、 数据库环境说明 .............................................................................................................................................. 9 四、 数据库的命名规则 .......................................................................................................................................... 9 4.1 数据库对象命名规则 ........................................................................................................................................ 9 4.2 数据项编码规则 ................................................................................................................................................ 9 五、 逻辑设计 ........................................................................................................................................................ 10
5.1创建数据库系统的关系模型……………………………………………………………………………11
六、 物理设计 ........................................................................................................................................................ 12 6.1 6.2 6.3 6.4
表汇总 ........................................................................................................................................................ 12 表总汇 ........................................................................................................................................................ 13 视图的设计 ................................................................................................................................................ 19 存储过程、函数及触发器的设计 ............................................................................................................ 21
七、 安全性设计 .................................................................................................................................................... 23 7.1 7.2 7.3
防止用户直接操作数据库的方法 ............................................................................................................ 24 用户帐号密码的加密方法 ........................................................................................................................ 24 角色与权限 ................................................................................................................................................ 25
八、 数据库管理与维护说明 ................................................................................................................................ 25
九、总结…………………………………………………………………………………………………………25 十.附录………………………………………………………………………………………………………..26
一、引言
1.1 编写目的
本文档是数据库系统设计文档的组成部分,编写此数据库设计文档的目的是:根据工人数据库管理系统建立一个数据库存储信息,数据库表名包含工厂,车间,工人,产品,零件,仓库。其中工厂包括多个车间和多个仓库,车间有多个工人,一个车间生产多种产品和多种零件,一个零件也可能为多个车间制造,一个产品由多种零件组成,一种零件也可装配出多种产品,产品和零件均存入仓库中等信息, 结合此信息通过sql 语言来实现此管理系统的运用,模拟工厂生产过程中队原材料(零件)、产品检测、库存环节的管理。本文档遵循《《工人数据库管理系统和开发规范》》。本文档的读者对象是需求人员,系统设计人员,开发人员,测试人员。
1.2 参考资料
列出有关资料的名称、作者、文件编号或版本等。参考资料包括: a .需求说明书、架构设计说明书等; b .本项目的其他已发表的文件;
c .引用文件、资料、软件开发标准等。
二、 需求规约
2.1 业务描述
(1)数据库系统创建的背景
运用数据库相关信息来实现工人管理系统的生产和运作。 (2)数据库系统要完成的业务流程及工作内容
根据工人管理系统模拟生产过程,实现对原材料、产品检测、库存的管理 (4)揭示该数据库的资源需求和设计约束
根据工人的各个生产所需的阶段,来建立不同的表,并将这些表连接起来,画出实体模型E-R 图,确定所有字段的名称、类型、宽度、小数位数及完整性约束,并将实体模型转化为关系模型,并设计关键字,以及设计适当的触发器
2.2 需求分析
(1) 分析该业务流程的内在联系
分析业务流程后得出:工厂与车间为一对多关系, 车间与工人为一对多关系, 车间与产品为一对多关系,仓库与产品为一对多关系, 仓库与零件为一对多关系, 车间与零件为多对多关系, 产品和零件为多对多关系, 工厂与仓库为一对多关系 (2) 对象处理如下:
对象处理:
工厂信息:厂名、厂长名。 车间信息:车间号、车间主任姓名、地址和电话。 职工信息:职工号、姓名、年龄、性别和工种。 产品信息:产品号、产品名称和价格。 零件信息:零件号、重量和价格。 仓库信息:仓库号、仓库主任姓名和电话。
(3) 实现功能与分析如下:
实现功能:实现功能其中需要注意的是,安全性需要根据其需要来给予其一定程度的安全性,再通过用户授权机制,通过用户登陆来识别用户级别,再根据这个级别来分配用户权限,从而实现更高层次的安全保密功能。完整性要求描述各信息间的关联关系和制约关系,需要根据各个值的实际情况来分析数据的数据范围及注意其是否为NULL (空),根据实际需要来满足要求。
分析:此系统首先画出了其E-R 图,并用word 文档插入表格并写入各个表的信息,在对work(工厂信息) 进行给该和查询,包括:创建数据库信息,查询各表信息,更改element(零件表) 信息,workman(工人表) 信息,建立一个名为manage 存储过程,实现修改element(零件表) 信息,workman(工人表) 信息。 对于安全性操作,建立了一个名为chenquanyu 的登录名,名为cqy 的用户,并赋予其表element(零件表) ,product(产品表) 和storage(仓库表) 的privilege(所以权限) 操作,对product (产品表)创建一个名为IS_product的视图,对workman(工人信息表) 创建一个名为IS_work的视图。并对product(pno)(产品号)和element(eno)创建一个索引,并删除其索引。创建一个名为tri_update_delete_product的触发器,来触发更新产品价格,并触发删除产品号为3的信息。最后创建一个磁盘备份,名字为work_full,地址为'd:beifen\work.bak',并实现完全备份和日记备份。
三、 数据库环境说明
提示:
(1)说明所采用的数据库系统,设计工具,编程工具等 (2)详细配置
四、 数据库的命名规则
4.1 数据库对象命名规则
4.2 数据项编码规则
五、 逻辑设计
一个m :n 联系转换为一个关系模式。与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合。
一个1:n 联系可以转换为一个独立的关系模式,也可以与n 端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为n 端实体的码。
一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。三个或三个以上实体间的一个多元联系可以转换为一个关系模式。与该多元联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合
逻辑结构设计的任务是将概念结构设计的E-R 图,转化为与选用的 DBMS 所支持的数据模型相符的逻辑结构,形成逻辑模型。 给表信息包含如下: 工厂(厂名, 厂长名)
车间(车间号, 车间主任姓名, 地址, 电话) 工人(职工号, 姓名, 年龄, 性别, 工种) 产品(产品号, 产品名称, 价格) 零件(零件号, 重量, 价格)
仓库(仓库号, 仓库主任姓名, 电话)
生产(车间号, 零件号, 生产日期) 组装(产品号, 零件号, 组装数)
存入(仓库号, 产品号, 零件号, 存储量)
5.1创建数据库系统的关系模型如下
六、 物理设计
6.1表汇总
6.2工厂表如下:
6. 车间与零件信息表: workshop_element
6.3视图的设计
各表关系图如下:
图6.3.1
创建视图过程如下
(1)给产品表创建一个拥有paname(产品名称) ,price(产品价格) ,以及外键的sno(仓库号) 的视图 create view IS_product as
select sno , pname , pprice from product 效果图如下:
图6.3.1
(2)给工人信息表创建一个包含有workman(生产表) 的所有信息的视图 create view IS_workman as
select *
from workman 效果图如下
:
图6.3.2
6.4存储过程、函数及触发器的设计
6.4.1存储过程代码如下:
create procedure manage --创建一个名字为manage 的存储过程 (@eno char (10), --定义一些参数 @wname varchar (10), @sdname char (10), @sno char (10) ) as
declare @eweight1 float =80.4 --申明一个变量@eweight1
if exists(select eweight from element where eweight
set eweight =80.4 --将element(零件) 表中的eweight 都定义为80.4
select *
from element select eprice
from element where eno =@eno
update workman
set wage =10 where wname = @wname
select *
from workman
update storage
set sdname =@sdname where sno =@sno select *
from storage print ' 修改后的零件表'
exec manage
@eno='e03' , --当eno 中为e03时,再查询此时此刻的pprice(价格) @wname=' 贺江平' , @sdname=' 张攀攀' , @sno='B2'
首先创建了一个名字为manage 的存储过程,定义一些可以用到得相关参数,如@eno,@wname,@sdname,@sno,通过这些参数传递确定的数据,利用SQL 语句结合在存储过程从而实现想要更改,删除,插入等相关的操作.
存储过程执行后的效果图为:
图6.4.1
6.4.2索引的建立
建立索引使查询的时候按顺序排列
create unique index propno on product (pno ) --为product 表的pno(产品号) 建立索引 create unique index eeno on element (eno ) --为element 表的eno(零件号) 建立索引
6.4.3触发器的建立与实现操作
为product 表创建一个基于update 操作和delete 操作的复合型触发器,当修改了该表的pprice(价格) 或者删除了pno(产品号) 时,触发器被激活生效,显示相关的操作信息
(1)创建触发器
create trigger tri_update_delete_product --创建触发器 on product
for update , delete as
if update (pprice ) --更新价格 begin
select inserted . pno , deleted . pprice as 原价格, inserted . pprice as 新价格 from deleted , inserted
where deleted . pno =inserted . pno end
else if columns_updated()=0 begin
select deleted . pno as 被删除的产品号, deleted . pname , deleted . pprice as 原价格 from deleted end
(2)触发触发器
1.在查询命令窗口中输入以下update 语句,修改产品号为’01’的价格,激发触发器 update product
set pprice =pprice +1 where pno ='01' 视图如下:
2.在查询命令窗口中输入以下delete 语句,删除产品为号为’03’的记录,激发触发器 delete product where pno ='03' 视图如下:
(3)删除新创建的触发器
drop trigger tri_update_delete_product 视图如下:
七、 安全性设计
SQL 包括了windows 认证和sql server 混合认证, 其中sql server 混合认证提供了用户登录方式,而用户登录后想更改操作的话,必须分配给用户名权限,才能对数据库的表进行相关操作。 以下是用SQL 语句实现的用户名登录,和受权操作: exec sp_grantdbaccess 'chenquanyu' , 'cqy'
//允许新建登录名和用户,其中chenquanyu 是登录名,cqy 是用户 exec sp_addlogin 'chenquanyu' , '123456' , 'work' //用户名登录, 密码为123456,默认数据库为work
exec sp_addsrvrolemember 'chenquanyu' , 'sysadmin' //授予用户名chenquanyu 一些数据库操作的权限 GRANT ALL privileges on product to cqy
GRANT ALL privileges on element to cqy
grant update on storage to cqy
//将product 产品表和零件表的所有权限授予给cqy 用户,仓库信息表的更新权限授予给cqy 用户
使用查询分析器管理备份设备和备份数据库
//创建一个磁盘备份设备,名字为work_full,地址为'd:beifen\work.bak' exec sp_addumpdevice 'disk' , 'work_full', 'd:\beifen\work.bak'
backup database work to work_full with init --完全备份 备份执行如下:
backup log work to work_full with noinit --日记备份,使用备份语句backup 来备份数据库 日记备份执行如下:
7.1防止用户直接操作数据库的方法
不授予用户操作的权限。
用户只能用帐号登陆到应用软件,通过应用软件访问数据库,而没有其他途径操作数据库。
7.2用户帐号密码的加密方法
用户账户密码加密是在程序里实现的,将用户密码通过某种算法加密转换后再存入数据库。
对用户帐号的密码进行加密处理,确保在任何地方都不会出现密码的明文。用户帐号采用MD5进行数据加密后再录入数据库,以防止任何地方密码的安全性要求。
7.3角色与权限
确定每个角色对数据库表的操作权限,如创建、检索、更新、删除等。每个角色拥有刚好能够完成任务的权限,不多也不少。在应用时再为用户分配角色,则每个用户的权限等于他所兼角色的权限之和。
八、 数据库管理与维护说明
提示:在设计数据库的时候,及时给出管理与维护本数据库的方法,有助于将来撰写出正确完备的用户手册。
在运行数据库的同时先要在脑海里想好需求分析,然后再根据要求画出E-R 图,然后再根据逻辑结构在word 文档下根据表的信息,依次完成各信息表,然后根据表与表对应的,1:1,1:n 或n:m关系确定好表的主外键,注:多对多的表还要另外创建一表来表示两表之间的关系。完成表的建立后,接下来的操作就是往各个表中插入相关实际信息,以及利用SQL 语句来实现表的插入,插入完毕后,可运用建立一个存储过程来完成表的更新,删除,插入等操作,操作完毕后可,用SQL 语句建立视图,好让操作员更能体会表与表之间的关系,而且看不出关键隐私代码,这样就能很好的维护数据库的管理和专利。在设置安全性的时候,注意用户必须要授权才能对各表进行操作, 备份需要用语句实现。
九、 总结
本次数据库课程设计让我深刻体会到了,书本前后的衔接性,这次课程设计涉及到了书本几乎
全部知识点,而在本次课程设计之前,我一直都没搞懂很多知识点,而且运用起来很生疏,尽管刚刚做得时候困难重重,思路非常不明确。但是经过我请教老师和同学之后,我从学习中逐渐找到了清晰的思路,并把知识点连接了起来,从自己亲自实践之后才能发现,只有自己动手过才能深刻理解书本知识,而不是单独的死记硬背。在本次课程设计当中,我多次遇到错误,而每次当自己埋头思考和向同学老师请教的过程中,问题总能解决,我在学习当中磨练了自己的独立思考能力和动手能力,这也是我这次课程设计的一个很大的收获。
我也从本次课程设计中深深的体会到了,学习过程中不能有一点马虎,每个完美的课程设计都是严谨的作风和清晰的思路创造出来的,所以以后无论学什么,态度是最重要的,态度端正,学习认真严谨,这样才能学好很多东西,以上是我本次课程设计的总的收获
十、 附录
create database work //创建work (工厂)数据库
1. 创建工厂信息表 use work go
create table factory (
fno varchar(10) NOT NULL primary key, fdname varchar(10) )
2. 车间信息表 use work go
create table workshop (
workshop_no char(10) NOT NULL primary key, wdname varchar(10), waddress varchar(10), wtel varchar(20),
fno varchar(10) NOT NULL,
foreign key (fno) references factory(fno) )
3. 工人信息表 use work go
create table workman (
wno char(10) NOT NULL primary key, wname varchar(10), wage int,
wtype varchar(10),
workshop_no char(10) NOT NULL,
foreign key (workshop_no) references workshop(workshop_no) )
4. 产品信息表 use work go
create table product (
pno varchar(10) NOT NULL primary key, pname varchar(10),
workshop_no char(10) NOT NULL, sno char(10) NOT NULL,
foreign key (workshop_no) references workshop(workshop_no), foreign key (sno) references storage(sno) )
5. 零件信息表 use work go
create table element (
eno char(10) NOT NULL primary key, eweight float, eprice float,
sno char(10) NOT NULL,
foreign key (sno) references storage(sno) )
6. 仓库信息表 use work go
create table storage (
sno char(10) NOT NULL primary key, sdname varchar(10), stel varchar(20),
fno varchar(10) NOT NULL,
foreign key (fno) references factory(fno) )
7. 车间与零件表 use work go
create table workshop_element (
workshop_no char(10) NOT NULL , eno char(10) NOT NULL ,
primary key(workshop_no,eno),
foreign key (workshop_no) references workshop(workshop_no), foreign key (eno) references element(eno) )
8. 产品与零件表 use work go
create table product_element
pno varchar(10) NOT NULL , eno char(10) NOT NULL , primary key(pno,eno),
foreign key (pno) references product(pno), foreign key (eno) references element(eno) )
插入数据给各个表: 1. insert into factory values('法拉利',' 陈泉宇')
select * /*查询factory 表的所用信息*/ from factory
2. 插入数据给workshop 表 insert into workshop
values ('A','胡灵敏',' 无锡区','110',' 法拉利')
insert into factory //插入数据给insert 表 values('法拉利',' 陈泉宇')
3. 插入数据给workman 表 insert into workman
values('A01','贺江平','20',' 软件工程师','A') insert into workman
values('A02','彭成辉','20',' 劳力活','A') insert into workman
values('A03','张卉卉','19',' 顾问','A') insert into workman
values('A04','尹京伟','20',' 总经理','A') insert into workman
values('A05','刘清波','20',' 总监','A')
4. 插入数据给product 表 insert into product
values('01','法拉利A10','100000','A','B') insert into product
values('02','法拉利A20','200000','A','B') insert into product
values('03','法拉利A30','300000','A','B') insert into product
values('04','法拉利A40','400000','A','B') insert into product
values('05','法拉利A40','400000','A','B')
5. 插入数据给element 表 insert into element
values('e01','80.8','100','B') insert into element
values('e02','80.2','200','B') insert into element
values('e03','80.3','300','B') insert into element
values('e04','80.4','400','B') insert into element
values('e05','80.5','500','B')
6. 插入数据给workshop_element表 insert into workshop_element values('A','e01')
7. 插入数据给product_element表 insert into product_element values('01','e01')
8. 插入数据给storage 表 insert into storage
values('B','张攀','120',' 法拉利') insert into storage
values('B2','张攀2','130',' 法拉利')
//创建存储过程manage (管理)
create procedure manage --创建一个名字为manage 的存储过程 (@eno char (10), --定义一些参数 @wname varchar (10), @sdname char (10), @sno char (10) ) as
declare @eweight1 float =80.4 --申明一个变量@eweight1
if exists(select eweight from element where eweight
set eweight =80.4 --将element(零件) 表中的eweight 都定义为80.4
select * /*查询零件表的所有信息*/ from element select eprice
where eno =@eno
update workman
set wage =10 where wname = @wname /*把一个工人姓名为贺江平的人的年龄改成10岁*/
select *
from workman /*查询工人信息表所有信息*/
update storage /*更新仓库信息表*/
set sdname =@sdname where sno =@sno /*更改仓库主任的张攀为张攀攀*/ select *
from storage print ' 修改后的零件表'
exec manage
@eno='e03' , --当eno 中为e03时,再查询此时此刻的pprice(价格) @wname=' 贺江平' , @sdname=' 张攀攀' , @sno='B2'
关于安全性的操作
exec sp_grantdbaccess 'chenquanyu' , 'cqy'
//允许新建登录名和用户,其中chenquanyu 是登录名,cqy 是用户 exec sp_addlogin 'chenquanyu' , '123456' , 'work' //用户名登录, 密码为123456,默认数据库为work
exec sp_addsrvrolemember 'chenquanyu' , 'sysadmin' //授予用户名chenquanyu 一些数据库操作的权限 GRANT ALL privileges on product
to cqy /*把产品表操作的所有权限给用户cqy*/
GRANT ALL privileges on element
to cqy /*把零件表操作的所有权限给用户cqy*/
grant update on storage
to cqy /*把仓库表操作的所有权限给用户cqy*/
--创建视图
create view IS_product /*创建一个名为IS_product的视图,有sno,pname,pprice 属性*/ as
select sno,pname,pprice from product
create view IS_workman /*创建一个名为IS_work的视图,有worman(工人表) 所有属性*/ as
select *
--创建索引
create unique index propno on product (pno ) --为product 表的pno(产品号) 建立索引 create unique index eeno on element (eno ) --为element 表的eno(零件号) 建立索引
create trigger tri_update_delete_product --创建触发器
on product
for update,delete
as
if update(pprice) --更新价格
begin
select inserted.pno,deleted.pprice as 原价格,inserted.pprice as 新价格
from deleted,inserted
where deleted.pno=inserted.pno
end
else if columns_updated()=0
begin
select deleted.pno as 被删除的产品号,deleted.pname,deleted.pprice as 原价格
from deleted
end
update product
set pprice=pprice+1 /*将产品表的价格信息加1*/
where pno='01'
delete product /*删除产品表中产品号为3的信息*/
where pno='03'
drop trigger tri_update_delete_product /*删除触发器tri_update_delete_product */
//创建一个磁盘备份设备,名字为work_full,地址为'd:beifen\work.bak'
exec sp_addumpdevice 'disk' , 'work_full', 'd:\beifen\work.bak'
backup database work to work_full with init --完全备份
backup log work to work_full with noinit --日记备份,使用备份语句backup 来备份数据库
课程设计说明书
题目 工厂数据库管理系统 系(部) 计算机科学与技术系 专业(班级) 姓名 学号 指导教师 起止日期
课程设计任务书
课程名称:数据库系统原理
设计题目:数据库系统课程设计 工厂数据库管理系统
1、某工厂需建立一个管理数据库存储以下信息: 工厂包括厂名和厂长名。
一个厂内有多个车间,每个车间有车间号、车间主任姓名、地址和电话。 一个车间有多个工人,每个工人有职工号、姓名、年龄、性别和工种。 一个车间生产多种产品,产品有产品号、产品名称和价格。
一个车间生产多种零件,一个零件也可能为多个车间制造。零件有零件号、重量和价格。 一个产品由多种零件组成,一种零件也可装配出多种产品。 产品与零件均存入仓库中。
厂内有多个仓库,仓库有仓库号、仓库主任姓名和电话。 2、系统功能的基本要求:
按照一定条件查询、统计工人和产品等基本信息,能模拟工厂生产过程中对原材料(零件)、产品检测、库存环节的管理。 各阶段具体要求: 1、需求分析阶段
● 定义数据项的含义和取值 ● 定义目标系统的数据流 2、概念结构设计阶段 ● 画出实体模型E-R 图 3、逻辑结构设计阶段
● 将实体模型转化为关系模型
● 给出每个关系的主关键字和函数依赖集 ● 分析你所设计的关系数据库模式是否属于3NF 4、物理设计阶段
● 确定所有字段的名称、类型、宽度、小数位数及完整性约束 ● 确定数据库及表的名称及其组成 ● 确定索引文件和索引关键字 5、数据库安全及维护设计阶段
● 设计一个适合的数据库安全策略(用户身份认证、访问权限、视图) ● 为了实现复杂的数据完整性约束,设计适当的触发器 ● 设计一个适合的数据库备份策略 6、实施阶段
要求所有操作必须在查询分析器中用SQL 语句或系统存储过程完成。
设计工作量:
(1)软件设计:完成问题陈述中所提到的所有需求功能。
(2)论文:要求撰写不少于3000个文字的文档,详细说明各阶段具体要求。
工作计划:
安排两周时间进行课程设计,软件开发步骤如下,第一周完成1~4,第二周完成5~8,论文同步进行; 1) 选定题目 2) 需求分析 3) 概念结构设计 4) 逻辑结构设计 5) 物理设计 6) 数据库安全及维护设计 7) 数据库上机实现 8) 答辩
设计工作量:
40课时
工作计划:
见课表
指导教师签名:
教研室主任签名:
系主任签名:
日期: 日期: 日期:
长沙学院课程设计鉴定表
摘 要
根据而今信息时代,信息越来越多,越复杂,这时就需要一种管理数据的软件,本次课程设计运用SQL server 2008来实现数据的管理,本次试验通过SQL 语句来实现工厂的流程,使工厂运行效率达到最大值,需要对其进行分析需求,逻辑设计,物理设计,安全性分析,权限设置等操作。
关键词:SQL 管理数据 工厂
目 录
一、引言 . ...................................................................................................................................................................... 7 1.1 1.2
编写目的 ...................................................................................................................................................... 7 参考资料 ...................................................................................................................................................... 7
二、 需求规约 .......................................................................................................................................................... 8 2.1 业务描述 . ........................................................................................................................................................... 8 2.2 需求分析 . ........................................................................................................................................................... 8 三、 数据库环境说明 .............................................................................................................................................. 9 四、 数据库的命名规则 .......................................................................................................................................... 9 4.1 数据库对象命名规则 ........................................................................................................................................ 9 4.2 数据项编码规则 ................................................................................................................................................ 9 五、 逻辑设计 ........................................................................................................................................................ 10
5.1创建数据库系统的关系模型……………………………………………………………………………11
六、 物理设计 ........................................................................................................................................................ 12 6.1 6.2 6.3 6.4
表汇总 ........................................................................................................................................................ 12 表总汇 ........................................................................................................................................................ 13 视图的设计 ................................................................................................................................................ 19 存储过程、函数及触发器的设计 ............................................................................................................ 21
七、 安全性设计 .................................................................................................................................................... 23 7.1 7.2 7.3
防止用户直接操作数据库的方法 ............................................................................................................ 24 用户帐号密码的加密方法 ........................................................................................................................ 24 角色与权限 ................................................................................................................................................ 25
八、 数据库管理与维护说明 ................................................................................................................................ 25
九、总结…………………………………………………………………………………………………………25 十.附录………………………………………………………………………………………………………..26
一、引言
1.1 编写目的
本文档是数据库系统设计文档的组成部分,编写此数据库设计文档的目的是:根据工人数据库管理系统建立一个数据库存储信息,数据库表名包含工厂,车间,工人,产品,零件,仓库。其中工厂包括多个车间和多个仓库,车间有多个工人,一个车间生产多种产品和多种零件,一个零件也可能为多个车间制造,一个产品由多种零件组成,一种零件也可装配出多种产品,产品和零件均存入仓库中等信息, 结合此信息通过sql 语言来实现此管理系统的运用,模拟工厂生产过程中队原材料(零件)、产品检测、库存环节的管理。本文档遵循《《工人数据库管理系统和开发规范》》。本文档的读者对象是需求人员,系统设计人员,开发人员,测试人员。
1.2 参考资料
列出有关资料的名称、作者、文件编号或版本等。参考资料包括: a .需求说明书、架构设计说明书等; b .本项目的其他已发表的文件;
c .引用文件、资料、软件开发标准等。
二、 需求规约
2.1 业务描述
(1)数据库系统创建的背景
运用数据库相关信息来实现工人管理系统的生产和运作。 (2)数据库系统要完成的业务流程及工作内容
根据工人管理系统模拟生产过程,实现对原材料、产品检测、库存的管理 (4)揭示该数据库的资源需求和设计约束
根据工人的各个生产所需的阶段,来建立不同的表,并将这些表连接起来,画出实体模型E-R 图,确定所有字段的名称、类型、宽度、小数位数及完整性约束,并将实体模型转化为关系模型,并设计关键字,以及设计适当的触发器
2.2 需求分析
(1) 分析该业务流程的内在联系
分析业务流程后得出:工厂与车间为一对多关系, 车间与工人为一对多关系, 车间与产品为一对多关系,仓库与产品为一对多关系, 仓库与零件为一对多关系, 车间与零件为多对多关系, 产品和零件为多对多关系, 工厂与仓库为一对多关系 (2) 对象处理如下:
对象处理:
工厂信息:厂名、厂长名。 车间信息:车间号、车间主任姓名、地址和电话。 职工信息:职工号、姓名、年龄、性别和工种。 产品信息:产品号、产品名称和价格。 零件信息:零件号、重量和价格。 仓库信息:仓库号、仓库主任姓名和电话。
(3) 实现功能与分析如下:
实现功能:实现功能其中需要注意的是,安全性需要根据其需要来给予其一定程度的安全性,再通过用户授权机制,通过用户登陆来识别用户级别,再根据这个级别来分配用户权限,从而实现更高层次的安全保密功能。完整性要求描述各信息间的关联关系和制约关系,需要根据各个值的实际情况来分析数据的数据范围及注意其是否为NULL (空),根据实际需要来满足要求。
分析:此系统首先画出了其E-R 图,并用word 文档插入表格并写入各个表的信息,在对work(工厂信息) 进行给该和查询,包括:创建数据库信息,查询各表信息,更改element(零件表) 信息,workman(工人表) 信息,建立一个名为manage 存储过程,实现修改element(零件表) 信息,workman(工人表) 信息。 对于安全性操作,建立了一个名为chenquanyu 的登录名,名为cqy 的用户,并赋予其表element(零件表) ,product(产品表) 和storage(仓库表) 的privilege(所以权限) 操作,对product (产品表)创建一个名为IS_product的视图,对workman(工人信息表) 创建一个名为IS_work的视图。并对product(pno)(产品号)和element(eno)创建一个索引,并删除其索引。创建一个名为tri_update_delete_product的触发器,来触发更新产品价格,并触发删除产品号为3的信息。最后创建一个磁盘备份,名字为work_full,地址为'd:beifen\work.bak',并实现完全备份和日记备份。
三、 数据库环境说明
提示:
(1)说明所采用的数据库系统,设计工具,编程工具等 (2)详细配置
四、 数据库的命名规则
4.1 数据库对象命名规则
4.2 数据项编码规则
五、 逻辑设计
一个m :n 联系转换为一个关系模式。与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合。
一个1:n 联系可以转换为一个独立的关系模式,也可以与n 端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为n 端实体的码。
一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。三个或三个以上实体间的一个多元联系可以转换为一个关系模式。与该多元联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合
逻辑结构设计的任务是将概念结构设计的E-R 图,转化为与选用的 DBMS 所支持的数据模型相符的逻辑结构,形成逻辑模型。 给表信息包含如下: 工厂(厂名, 厂长名)
车间(车间号, 车间主任姓名, 地址, 电话) 工人(职工号, 姓名, 年龄, 性别, 工种) 产品(产品号, 产品名称, 价格) 零件(零件号, 重量, 价格)
仓库(仓库号, 仓库主任姓名, 电话)
生产(车间号, 零件号, 生产日期) 组装(产品号, 零件号, 组装数)
存入(仓库号, 产品号, 零件号, 存储量)
5.1创建数据库系统的关系模型如下
六、 物理设计
6.1表汇总
6.2工厂表如下:
6. 车间与零件信息表: workshop_element
6.3视图的设计
各表关系图如下:
图6.3.1
创建视图过程如下
(1)给产品表创建一个拥有paname(产品名称) ,price(产品价格) ,以及外键的sno(仓库号) 的视图 create view IS_product as
select sno , pname , pprice from product 效果图如下:
图6.3.1
(2)给工人信息表创建一个包含有workman(生产表) 的所有信息的视图 create view IS_workman as
select *
from workman 效果图如下
:
图6.3.2
6.4存储过程、函数及触发器的设计
6.4.1存储过程代码如下:
create procedure manage --创建一个名字为manage 的存储过程 (@eno char (10), --定义一些参数 @wname varchar (10), @sdname char (10), @sno char (10) ) as
declare @eweight1 float =80.4 --申明一个变量@eweight1
if exists(select eweight from element where eweight
set eweight =80.4 --将element(零件) 表中的eweight 都定义为80.4
select *
from element select eprice
from element where eno =@eno
update workman
set wage =10 where wname = @wname
select *
from workman
update storage
set sdname =@sdname where sno =@sno select *
from storage print ' 修改后的零件表'
exec manage
@eno='e03' , --当eno 中为e03时,再查询此时此刻的pprice(价格) @wname=' 贺江平' , @sdname=' 张攀攀' , @sno='B2'
首先创建了一个名字为manage 的存储过程,定义一些可以用到得相关参数,如@eno,@wname,@sdname,@sno,通过这些参数传递确定的数据,利用SQL 语句结合在存储过程从而实现想要更改,删除,插入等相关的操作.
存储过程执行后的效果图为:
图6.4.1
6.4.2索引的建立
建立索引使查询的时候按顺序排列
create unique index propno on product (pno ) --为product 表的pno(产品号) 建立索引 create unique index eeno on element (eno ) --为element 表的eno(零件号) 建立索引
6.4.3触发器的建立与实现操作
为product 表创建一个基于update 操作和delete 操作的复合型触发器,当修改了该表的pprice(价格) 或者删除了pno(产品号) 时,触发器被激活生效,显示相关的操作信息
(1)创建触发器
create trigger tri_update_delete_product --创建触发器 on product
for update , delete as
if update (pprice ) --更新价格 begin
select inserted . pno , deleted . pprice as 原价格, inserted . pprice as 新价格 from deleted , inserted
where deleted . pno =inserted . pno end
else if columns_updated()=0 begin
select deleted . pno as 被删除的产品号, deleted . pname , deleted . pprice as 原价格 from deleted end
(2)触发触发器
1.在查询命令窗口中输入以下update 语句,修改产品号为’01’的价格,激发触发器 update product
set pprice =pprice +1 where pno ='01' 视图如下:
2.在查询命令窗口中输入以下delete 语句,删除产品为号为’03’的记录,激发触发器 delete product where pno ='03' 视图如下:
(3)删除新创建的触发器
drop trigger tri_update_delete_product 视图如下:
七、 安全性设计
SQL 包括了windows 认证和sql server 混合认证, 其中sql server 混合认证提供了用户登录方式,而用户登录后想更改操作的话,必须分配给用户名权限,才能对数据库的表进行相关操作。 以下是用SQL 语句实现的用户名登录,和受权操作: exec sp_grantdbaccess 'chenquanyu' , 'cqy'
//允许新建登录名和用户,其中chenquanyu 是登录名,cqy 是用户 exec sp_addlogin 'chenquanyu' , '123456' , 'work' //用户名登录, 密码为123456,默认数据库为work
exec sp_addsrvrolemember 'chenquanyu' , 'sysadmin' //授予用户名chenquanyu 一些数据库操作的权限 GRANT ALL privileges on product to cqy
GRANT ALL privileges on element to cqy
grant update on storage to cqy
//将product 产品表和零件表的所有权限授予给cqy 用户,仓库信息表的更新权限授予给cqy 用户
使用查询分析器管理备份设备和备份数据库
//创建一个磁盘备份设备,名字为work_full,地址为'd:beifen\work.bak' exec sp_addumpdevice 'disk' , 'work_full', 'd:\beifen\work.bak'
backup database work to work_full with init --完全备份 备份执行如下:
backup log work to work_full with noinit --日记备份,使用备份语句backup 来备份数据库 日记备份执行如下:
7.1防止用户直接操作数据库的方法
不授予用户操作的权限。
用户只能用帐号登陆到应用软件,通过应用软件访问数据库,而没有其他途径操作数据库。
7.2用户帐号密码的加密方法
用户账户密码加密是在程序里实现的,将用户密码通过某种算法加密转换后再存入数据库。
对用户帐号的密码进行加密处理,确保在任何地方都不会出现密码的明文。用户帐号采用MD5进行数据加密后再录入数据库,以防止任何地方密码的安全性要求。
7.3角色与权限
确定每个角色对数据库表的操作权限,如创建、检索、更新、删除等。每个角色拥有刚好能够完成任务的权限,不多也不少。在应用时再为用户分配角色,则每个用户的权限等于他所兼角色的权限之和。
八、 数据库管理与维护说明
提示:在设计数据库的时候,及时给出管理与维护本数据库的方法,有助于将来撰写出正确完备的用户手册。
在运行数据库的同时先要在脑海里想好需求分析,然后再根据要求画出E-R 图,然后再根据逻辑结构在word 文档下根据表的信息,依次完成各信息表,然后根据表与表对应的,1:1,1:n 或n:m关系确定好表的主外键,注:多对多的表还要另外创建一表来表示两表之间的关系。完成表的建立后,接下来的操作就是往各个表中插入相关实际信息,以及利用SQL 语句来实现表的插入,插入完毕后,可运用建立一个存储过程来完成表的更新,删除,插入等操作,操作完毕后可,用SQL 语句建立视图,好让操作员更能体会表与表之间的关系,而且看不出关键隐私代码,这样就能很好的维护数据库的管理和专利。在设置安全性的时候,注意用户必须要授权才能对各表进行操作, 备份需要用语句实现。
九、 总结
本次数据库课程设计让我深刻体会到了,书本前后的衔接性,这次课程设计涉及到了书本几乎
全部知识点,而在本次课程设计之前,我一直都没搞懂很多知识点,而且运用起来很生疏,尽管刚刚做得时候困难重重,思路非常不明确。但是经过我请教老师和同学之后,我从学习中逐渐找到了清晰的思路,并把知识点连接了起来,从自己亲自实践之后才能发现,只有自己动手过才能深刻理解书本知识,而不是单独的死记硬背。在本次课程设计当中,我多次遇到错误,而每次当自己埋头思考和向同学老师请教的过程中,问题总能解决,我在学习当中磨练了自己的独立思考能力和动手能力,这也是我这次课程设计的一个很大的收获。
我也从本次课程设计中深深的体会到了,学习过程中不能有一点马虎,每个完美的课程设计都是严谨的作风和清晰的思路创造出来的,所以以后无论学什么,态度是最重要的,态度端正,学习认真严谨,这样才能学好很多东西,以上是我本次课程设计的总的收获
十、 附录
create database work //创建work (工厂)数据库
1. 创建工厂信息表 use work go
create table factory (
fno varchar(10) NOT NULL primary key, fdname varchar(10) )
2. 车间信息表 use work go
create table workshop (
workshop_no char(10) NOT NULL primary key, wdname varchar(10), waddress varchar(10), wtel varchar(20),
fno varchar(10) NOT NULL,
foreign key (fno) references factory(fno) )
3. 工人信息表 use work go
create table workman (
wno char(10) NOT NULL primary key, wname varchar(10), wage int,
wtype varchar(10),
workshop_no char(10) NOT NULL,
foreign key (workshop_no) references workshop(workshop_no) )
4. 产品信息表 use work go
create table product (
pno varchar(10) NOT NULL primary key, pname varchar(10),
workshop_no char(10) NOT NULL, sno char(10) NOT NULL,
foreign key (workshop_no) references workshop(workshop_no), foreign key (sno) references storage(sno) )
5. 零件信息表 use work go
create table element (
eno char(10) NOT NULL primary key, eweight float, eprice float,
sno char(10) NOT NULL,
foreign key (sno) references storage(sno) )
6. 仓库信息表 use work go
create table storage (
sno char(10) NOT NULL primary key, sdname varchar(10), stel varchar(20),
fno varchar(10) NOT NULL,
foreign key (fno) references factory(fno) )
7. 车间与零件表 use work go
create table workshop_element (
workshop_no char(10) NOT NULL , eno char(10) NOT NULL ,
primary key(workshop_no,eno),
foreign key (workshop_no) references workshop(workshop_no), foreign key (eno) references element(eno) )
8. 产品与零件表 use work go
create table product_element
pno varchar(10) NOT NULL , eno char(10) NOT NULL , primary key(pno,eno),
foreign key (pno) references product(pno), foreign key (eno) references element(eno) )
插入数据给各个表: 1. insert into factory values('法拉利',' 陈泉宇')
select * /*查询factory 表的所用信息*/ from factory
2. 插入数据给workshop 表 insert into workshop
values ('A','胡灵敏',' 无锡区','110',' 法拉利')
insert into factory //插入数据给insert 表 values('法拉利',' 陈泉宇')
3. 插入数据给workman 表 insert into workman
values('A01','贺江平','20',' 软件工程师','A') insert into workman
values('A02','彭成辉','20',' 劳力活','A') insert into workman
values('A03','张卉卉','19',' 顾问','A') insert into workman
values('A04','尹京伟','20',' 总经理','A') insert into workman
values('A05','刘清波','20',' 总监','A')
4. 插入数据给product 表 insert into product
values('01','法拉利A10','100000','A','B') insert into product
values('02','法拉利A20','200000','A','B') insert into product
values('03','法拉利A30','300000','A','B') insert into product
values('04','法拉利A40','400000','A','B') insert into product
values('05','法拉利A40','400000','A','B')
5. 插入数据给element 表 insert into element
values('e01','80.8','100','B') insert into element
values('e02','80.2','200','B') insert into element
values('e03','80.3','300','B') insert into element
values('e04','80.4','400','B') insert into element
values('e05','80.5','500','B')
6. 插入数据给workshop_element表 insert into workshop_element values('A','e01')
7. 插入数据给product_element表 insert into product_element values('01','e01')
8. 插入数据给storage 表 insert into storage
values('B','张攀','120',' 法拉利') insert into storage
values('B2','张攀2','130',' 法拉利')
//创建存储过程manage (管理)
create procedure manage --创建一个名字为manage 的存储过程 (@eno char (10), --定义一些参数 @wname varchar (10), @sdname char (10), @sno char (10) ) as
declare @eweight1 float =80.4 --申明一个变量@eweight1
if exists(select eweight from element where eweight
set eweight =80.4 --将element(零件) 表中的eweight 都定义为80.4
select * /*查询零件表的所有信息*/ from element select eprice
where eno =@eno
update workman
set wage =10 where wname = @wname /*把一个工人姓名为贺江平的人的年龄改成10岁*/
select *
from workman /*查询工人信息表所有信息*/
update storage /*更新仓库信息表*/
set sdname =@sdname where sno =@sno /*更改仓库主任的张攀为张攀攀*/ select *
from storage print ' 修改后的零件表'
exec manage
@eno='e03' , --当eno 中为e03时,再查询此时此刻的pprice(价格) @wname=' 贺江平' , @sdname=' 张攀攀' , @sno='B2'
关于安全性的操作
exec sp_grantdbaccess 'chenquanyu' , 'cqy'
//允许新建登录名和用户,其中chenquanyu 是登录名,cqy 是用户 exec sp_addlogin 'chenquanyu' , '123456' , 'work' //用户名登录, 密码为123456,默认数据库为work
exec sp_addsrvrolemember 'chenquanyu' , 'sysadmin' //授予用户名chenquanyu 一些数据库操作的权限 GRANT ALL privileges on product
to cqy /*把产品表操作的所有权限给用户cqy*/
GRANT ALL privileges on element
to cqy /*把零件表操作的所有权限给用户cqy*/
grant update on storage
to cqy /*把仓库表操作的所有权限给用户cqy*/
--创建视图
create view IS_product /*创建一个名为IS_product的视图,有sno,pname,pprice 属性*/ as
select sno,pname,pprice from product
create view IS_workman /*创建一个名为IS_work的视图,有worman(工人表) 所有属性*/ as
select *
--创建索引
create unique index propno on product (pno ) --为product 表的pno(产品号) 建立索引 create unique index eeno on element (eno ) --为element 表的eno(零件号) 建立索引
create trigger tri_update_delete_product --创建触发器
on product
for update,delete
as
if update(pprice) --更新价格
begin
select inserted.pno,deleted.pprice as 原价格,inserted.pprice as 新价格
from deleted,inserted
where deleted.pno=inserted.pno
end
else if columns_updated()=0
begin
select deleted.pno as 被删除的产品号,deleted.pname,deleted.pprice as 原价格
from deleted
end
update product
set pprice=pprice+1 /*将产品表的价格信息加1*/
where pno='01'
delete product /*删除产品表中产品号为3的信息*/
where pno='03'
drop trigger tri_update_delete_product /*删除触发器tri_update_delete_product */
//创建一个磁盘备份设备,名字为work_full,地址为'd:beifen\work.bak'
exec sp_addumpdevice 'disk' , 'work_full', 'd:\beifen\work.bak'
backup database work to work_full with init --完全备份
backup log work to work_full with noinit --日记备份,使用备份语句backup 来备份数据库