课程设计指导书
课程设计名称 数据库系统原理课程设计 系 (部) 计算机科学与技术 (盖章) 专 业 计算机科学与技术 班 级 计四
2010年 06 月 17 日
长沙学院课程设计鉴定表
姓名 阳锟 学号 专业 计科 班级 指导教师 4班 朱永娇 设计题目 工厂数据库管理系统 指导教师意见: 评定等级: 教师签名: 日期: 答辩小组意见: 评定等级: 答辩小组长签名: 日期: 教研室意见: 教研室主任签名: 日期: 系(部)意见: 系主任签名: 日期: 说明 课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类; 课程设计任务书
课程名称:数据库系统原理
设计题目:工厂数据库管理系统 已知技术参数和设计要求: 需求说明及要求
题目:工厂数据库管理系统(难度系数) 某工厂需建立一个管理数据库存储以下信息: 1、工厂包括厂名和厂长名。
2、一个厂内有多个车间,每个车间有车间号、车间主任姓名、地址和电话。 3、一个车间有多个工人,每个工人有职工号、姓名、年龄、性别和工种。 4、一个车间生产多种产品,产品有产品号、产品名称和价格。
5、一个车间生产多种零件,一个零件也可能为多个车间制造。零件有零件号、重量和价
格。
6、一个产品由多种零件组成,一种零件也可装配出多种产品。 7、产品与零件均存入仓库中。
8、厂内有多个仓库,仓库有仓库号、仓库主任姓名和电话。 各阶段具体要求: 1、需求分析阶段
定义数据项的含义和取值 2、概念结构设计阶段 画出实体模型E-R图 3、逻辑结构设计阶段
将实体模型转化为关系模型
给出每个关系的主关键字和函数依赖集 分析你所设计的关系数据库模式是否属于3NF 4、物理设计阶段
确定所有字段的名称、类型、宽度、小数位数及完整性约束 确定数据库及表的名称及其组成 确定索引文件和索引关键字 5、数据库安全及维护设计阶段
设计一个适合的数据库安全策略(用户身份认证、访问权限、视图) 6、实施阶段
要求所有操作必须在查询分析器中用SQL语句或系统存储过程完成。 设计工作量:
(1)软件设计:完成问题陈述中所提到的所有需求功能。
(2)论文:要求撰写不少于3000个文字的文档,详细说明各阶段具体要求。 工作计划:
安排两周时间进行课程设计,软件开发步骤如下,第一周完成1~4,第二周完成5~8,论文同步进行; 1) 分组,定题目 2) 需求分析
3) 概念结构设计 4) 逻辑结构设计 5) 物理设计
指导老师 朱永娇 朱永娇 朱永娇 朱永娇 注意事项
提交文档
长沙学院课程设计任务书 长沙学院课程设计论文 长沙学院课程设计鉴定表 指导教师签名: 教研室主任签名: 系主任签名:
(每学生1份) (每学生1份) (每学生1份)
日期: 日期: 日期:
学生 阳锟 阳锟 阳锟 阳锟 6) 数据库安全及维护设计 7) 数据库上机实现 8) 答辩
计划时间 第15周~16周 摘 要
在计算机日益普及的今天,对个人而言若采用一套行之有效的工厂管理系统来管理生产,会方便许多。对工厂管理部门而言,以前单一的手工检索已不能满足人们的要求,往往是投入了大量的人力和财力却得不到高效的管理效率。为了便于工厂产品和职工的管理,需要有效的工厂管理软件,减轻工作人员的工作量,方便工作人员对它的操作,提高管理的质量和水平,做到高效、智能化管理,达到提高产品生产信息管理效率的目的。采用数据库技术生成的工厂管理系统将会极大地方便了工作人员的劳动,使工作人员从繁忙、复杂的工作进入到一个简单、高效的工作中。基于这个问题,开发了工厂数据库管理系统。本文通过作者设计和开发一个中小型工厂管理系统的实践,阐述了工厂数据库管理软件中所应具有的基本功能、设计、实现。分别从设备管理和用户管理等角度进行处理,并对需求分析、概念设计、逻辑设计、物理设计、数据库实施和维护进行了阐述,实行设备管理的计算机自动化。
关键字:工厂数据库 职工管理 生产管理
目录
1. 本论文的目标与任务············································1 2. 数据库设计····················································1 需求分析阶段··············································1 概念设计阶段··············································2 逻辑设计阶段··············································3 物理设计阶段··············································3 数据库安全及维护设计······································5 数据库实施阶段············································6 建立数据库、数据表、索引····························6 数据入库············································9 3.系统调试和测试················································16 4.课程设计总结···················································21 参考文献························································22
1本论文的目标与任务
建立一个某工厂管理数据库存储以下信息: 1、 2、
工厂包括厂名和厂长名。
一个厂内有多个车间,每个车间有车间号、车间主任姓名、地址和电
话。 3、 4、 5、
一个车间有多个工人,每个工人有职工号、姓名、年龄、性别和工种。 一个车间生产多种产品,产品有产品号、产品名称和价格。 一个车间生产多种零件,一个零件也可能为多个车间制造。零件有零
件号、重量和价格。 6、 7、 8、
一个产品由多种零件组成,一种零件也可装配出多种产品。 产品与零件均存入仓库中。
厂内有多个仓库,仓库有仓库号、仓库主任姓名和电话。
针对各工厂信息管理情况,设计出适合它们的计算机辅助工厂数据库管理系统。实现对工厂产品和职工基本信息进行计算机辅助管理,完成有关信息的记录、修改、查询、删除等一系列任务的计算机管理与实现。 系统有对产品、零件、车间和职工等信息的管理,其功能是实现对各部分数据内容进行添加、修改、查询等操作。
2数据库设计
需求分析阶段 (1)对象处理:
工厂信息:厂名、厂长名。
车间信息:车间号、车间主任姓名、地址和电话。 职工信息:职工号、姓名、年龄、性别和工种。
产品信息:产品号、产品名称和价格。 零件信息:零件号、重量和价格。 仓库信息:仓库号、仓库主任姓名和电话。 (2)功能及要求:
能对一定量的工厂信息进行管理,主要包括:存储管理工厂信息,修改和查询工厂信息以及管理职工和工作人员信息。
系统安全性先通过视图机制,不同的用户只能访问系统授权的视图,这样可提供系统数据一定程度上的安全性,再通过用户授权机制,通过用户登陆来识别用户级别,根据这个级别来分配用户权限,达到数据更高层次的安全保密功能。近而可以满足用户的基本数据安全性要求。
完整性要求用于描述各种信息之间的制约关系,以及关联关系,各个数据项的取值范围以及各个数据项是否可以不取值。根据实际需要,采取一定的手段来满足用户的完整性需求。 -1- (3)数据结构
表
数据结构名 数据结构含义 组成 fac 工厂基本信Fname, fn_name 息 room 车间基本信Rno Rname Raddr Rcall 息 worker 工人基本信Wno Wname Wage Wsex Wtype 息 product 产品基本信Pno Pname Price 息 component 零件基本信Cno weigt Price 息 store 仓库基本信Sno Sname Scall 息 概念设计阶段 (1)实体
通过对上面的系统总体分析,可以得到大概的实体-关系模型(E-R模型),如下:
工厂:{厂名,厂长名}
工人:{职工号,姓名,性别,年龄,工种 } 车间:{车间号,车间主任姓名,地址,电话} 产品:{产品号,价格,产品名 } 零件:{零件号,价格,重量} 仓库:{仓库号,仓库主任姓名,电话}
(2)由各子E-R合并得到的基本E-R如下图所示:
图 -2-
逻辑结构设计
根据上面的数据库ER图,现在需要将上面的数据库概念结构转化为数据库系统所支持的实际数据模型,也就是数据库的逻辑结构。在上面的实体
以及实体之间关系的基础上,形成数据库中的表格以及各个表格之间的关系。
实体型转换为关系模式。实体的属性就是关系的属性,实体的码就是关系的码。对于实体间的联系则有以下不同的情况:
一个m:n联系转换为一个关系模式。与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合。 一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为n端实体的码。
一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。三个或三个以上实体间的一个多元联系可以转换为一个关系模式。与该多元联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合
逻辑结构设计的任务是将概念结构设计的E-R图,转化为与选用的 DBMS所支持的数据模型相符的逻辑结构,形成逻辑模型。 工厂(厂名, 厂长名)
车间(车间号,车间主任姓名,地址,电话) 工人(职工号,姓名,年龄,性别,工种) 产品(产品号,产品名称,价格) 零件(零件号,重量,价格) 仓库(仓库号,仓库主任姓名,电话) 生产(车间号,零件号,生产日期)
组装(产品号,零件号,组装数) 存入(仓库号, 产品号,零件号,存储量) 物理结构设计
操作环境 windows 2KS ,SQL 2000数据库系统. 确定数据库及表的名称及其组成:
建立数据库create database factory,数据库名称factory(工厂数据库) 数据说明处理:
store(仓库)fac(工厂),room(车间)worker(工人), -3-
product(产品),component(零件),room_com(零件与车间的联系)
pro_com(零件与产品的联系),com_str(零件与仓库的联系) pro_str(产品与仓库的联系);
基本表的组成: 表
基本表 数据结构含义 组成 fac 工厂基本信Fname, fn_name 息 room 车间基本信Rno ,Rname, Raddr, Rcall 息 worker 工人基本信Wno,Wname,Wage,Wsex,Wtype 息 product 产品基本信Pno, Pname, Price 息 零件基本信Cno, weigt, Price component store 息 仓库基本信Sno, Sname, Scall 息 room_com 零件与车间Rno, Cno,Stime 的联系 pro_com 零件与产品Pno, Cno, number 的联系 com_str 零件与仓库Cno, Sno, Strnum1 的联系 pro_str 产品与仓库Pno, Sno, Strnum2 的联系 工厂表 表 列名 fname 数据类型 能否空值 默认值 键/索引 说明 varchar(20) 否 主键、索引 厂名 厂长名 fn_name varchar(20) 否 车间表 表 列名 数据类型 能否空值 默认值 键/索引 否 说明 Rno varchar(10) Rname Rad varchar(20) varchar主键、索引 车间号 否 车间主任姓名 否 车间地dr Rcall (20) int 否 址 电话 零件表 表 列名 数据类型 能否空值 默认键/索引 值 Cno varchar(10) weight Price 工人表 表
列名 数据类型 能否空值 默认键/索引 值 Wno varchar(10) Wna varcharme (20) Wag int e Wse varchar否 性别 否 年龄 否 否 主键、索引 职工号 姓名 说明 numeric(5,1) 否 价格 int 否 否 主键、索引 零件号 重量 说明 x (2) Wty varchar否 工种 pe (20) 产品表 表 列名 数据类型 能否空值 默认键/索引 值 Pno varchar否 (10) Pname Price -4- 仓库表 表 列名 数据类型 能否空值 默认值 键/索引 否 主键、索引 说明 仓库号 否 仓库主任姓名 说明 主键、索引 产品号 varchar否 (20) numeric(5,1) 产品名称 否 价格 Sno varchar(10) Sname Scall varchar(20) int 否 仓库电话 生产表 表
列名 数据类型 能否空值 默认值 键/索引 否 主键 说明 车间号 Rno varchar(10) Cno varchar(10) Stime 否 主键 零件号 datetime 否 生产日期 组装表 表 列名 数据类型 能否空值 默认值 键/索引 否 主键 说明 产品号 Pno varchar(10) Cno varchar(10) number int 否 主键 零件号 否 组装数 存放表 表 列名 Sno 数据类型 能否空值 默认值 varchar(10) Cno varchar(10) Pno varchar否 主键 产品号 否 主键 零件号 否 键/索引 说明 主键 仓库号 (10) Strnum1 Strnum2 建立索引:
索引中记录了表中的关键值,提供了指向表中行的指针。它既可以在定义表时创建,也可以在定义表之后的任何时候创建。索引可以创建在一个列或多个列的组合上。
(1)、在车间信息表车间号列上创建索引 create index roomRno on room(Rno)
(2)、在车间信息表的车间主任姓名列上创建索引 create index roomRname on room(Rname) 为数据库中各基本表建立的索引如下:
由于有的基本表经常在查询条件和连接操作的连接条件中出现,且它们的值唯一,在两个属性上建立唯一性索引; 数据库安全及维护设计
(1)在数据库fac中添加新用户xcm. use factory
exec sp_grantdbaccess 'yangkun','xcm' (2)创建登录名,添加角色
exec sp_addlogin' yangkun ','1234','factory'
int 否 Int 否 零件存放量 产品存放量 exec sp_addsrvrolemember ' yangkun ','sysadmin' -5- (3)授权与基本表 grant select,update on product to xcm;
grant all privileges on worker to xcm;
grant all privileges on component to xcm;
grant all privileges on store to xcm;
grant all privileges on room to xcm; (4)创建视图 create view IS_store as
select Sno,Sname,Scall
from store
create view IS_worker as
select Wno,Wname,Wsex from worker where Wsex='女' create view IS_product as
select Pno,Pname,Price from product where Pno=1 数据库实施阶段
建立数据库、数据表、索引
-6- (1)建立数据库 create database factory on primary (
name=factory_data, filename='d:\\cxm\\', size=50MB, maxsize=70MB, filegrowth=1MB)
log on(
name=factory_log, filename='d:\\cxm\\', size=10MB, maxsize=15MB, filegrowth=1MB) (2)创建基本表 创建工厂表 create table fac
(fname varchar(20) primary key, fn_name varchar(20) not null, ); 创建车间表 create table room
(Rno varchar(10)primary key, Rname varchar(20), Rcall int, Raddr varchar(20), fname varchar(20)not null,
foreign key(fname)references fac(fname) ); 创建工人表
create table worker
(Wno varchar(10) primary key, Wname varchar(20), Wage int,
Wsex varchar(2) check(Wsex in (‘男’ , ‘女’)), Wtype varchar(20), Rno varchar(10)not null,
foreign key(Rno)references room(Rno) ); -7- 创建产品表
create table product (Pno varchar(10)primary key, Pname varchar(20),
Price numeric(5,1) default 0, check(Price>0),
Rno varchar(10)not null,
foreign key(Rno)references room(Rno) ); 创建零件表
create table component (Cno varchar(10)primary key, Price numeric(5,1)default 0,
check(Price>0), weight int ); 创建仓库表 create table store
(Sno varchar(10)primary key, Sname varchar(20), Scall int,
fname varchar(20)not null,
foreign key(fname)references fac(fname) ); 创建生产表
create table room_com (Rno varchar(10) not null, Cno varchar(10) not null, Stime datetime, primary key(Rno,Cno),
foreign key(Rno)references room(Rno), foreign key(Cno)references component(Cno) ); 创建组装表
create table pro_com
(Cno varchar(10) not null, Pno varchar(10) not null, number int,
primary key(Pno,Cno),
foreign key(Pno)references product(Pno), foreign key(Cno)references component(Cno)); -8- 创建存放表1
create table pro_str (Pno varchar(10) not null, Sno varchar(10) not null, Strnum1 int,
primary key(Pno,Sno),
foreign key(Pno)references product(Pno), foreign key(Sno)references store(Sno) );
创建存放表2
create table com_str (Cno varchar(10) not null, Sno varchar(10) not null, Strnum2 int,
primary key(Cno,Sno),
foreign key(Cno)references component(Cno), foreign key(Sno)references store(Sno) );
(3)创建索引
create index roomRno on room(Rno) create index roomRname on room(Rname) create index proPno on product(Pno) create index facfneme on fac(fname) create index comCno on component(Cno) create index strSno on store(Sno)
2.6.2数据入库
(1)存储过程 create proc worker( @Wno varchar(10), @Wname varchar(20), @Wage int, @Wsex varchar(2), @Wtype varchar(20), @Rno varchar(10) ) as insert into worker
values(@Wno,@Wname,@Wage, @Wsex,@Wtype,@Rno);
-9- create proc room (@Rno varchar(10), @Rname varchar(20), @Rcall int, @Raddr char(8), @fname varchar(20) ) as insert into room
values(@Rno,@ Rname,@Rcall, @Raddr,@fname);
create proc product1 (@Pno varchar(10), @Pname varchar(20), @Price numeric(5,1), @Rno varchar(10) ) as
insert into product
values(@Pno,@Pname,@Price,@Rno); create proc component1 (@Cno varchar(10), @Price float, @weight float, ) as insert into component
values(@Cno,@Price,@weight); create proc store1 (@Sno varchar(10), @Sname varchar(20), @Scall int, @fname varchar(20) ) as insert
-10- into store
values(@Sno,@Sname,@Scall,@fname); create proc fac1 (@fname varchar(20), @fn_name varchar(20) ) as insert into fac
values(@fname,@fn_name ); create proc room_com1(@Rno varchar(10), @Cno varchar(10), @stime datetime ) as insert into room_com
values(@Rno,@Cno,@stime); create proc pro_com1 (@Cno varchar(10), @Pno varchar(10), @number int
) as insert into pro_com
values(@Cno,@Pno,@number); create proc pro_str1 (@Pno varchar(10), @Sno varchar(10), @Strnum1 int ) as insert into pro_str
values(@Pno,@Sno,@Strnum1);
-11- create proc com_str1 (@Cno varchar(10), @Sno varchar(10), @Strnum2 int ) as insert
into com_str
values(@Cno,@Sno,@Strnum2); (2)存储数据 exec fac1
@fname='奔驰 ', @fn_name='张磊' exec room1@Rno=1, @Rname='刘基', @Rcall=4254357, @Raddr='长沙', @fname='奔驰' exec room1 @Rno=2,
@Rname='刘择机', @Rcall=4250046, @Raddr='株洲', @fname='奔驰' exec
worker1 @Wno=102, @Wname='刘雄峰' , @Wage=40 , @Wsex='男' , @Wtype='搬运工', @Rno=1 exec worker1
-12- @Wno=103, @Wname='刘芸' , @Wage=21 , @Wsex='女' , @Wtype='经理', @Rno=2 exec worker1 @Wno=101, @Wname='郑凡' , @Wage=21 , @Wsex='女' ,
@Wtype='前台接待', @Rno=1 exec worker1 @Wno=104, @Wname='黄晓明' , @Wage=27 , @Wsex='男' , @Wtype='技术人员', @Rno=2 exec product1 @Pno=201 , @Pname='轮胎' , @Price='500', @Rno=1 exec product1 @Pno=202 , @Pname='引擎' , @Price='', @Rno=2
exec product1 @Pno=203 ,
@Pname='挡风玻璃' ,
-13- @Price='', @Rno=1 exec product1 @Pno=204 ,
@Pname='奔驰摩托' , @Price='', @Rno=1 exec product1 @Pno=205 ,
@Pname='奔驰货车' , @Price='', @Rno=2 exec component1 @Cno=c1002 ,
@Price='6520' , @weight='200' exec component1 @Cno=c1001 , @Price='520' , @weight='10' exec component1 @Cno=c1003 , @Price='925' , @weight='150' exec component1 @Cno=c1004 , @Price='654' , @weight='100' exec store1
-14- @Sno=101 , @Sname='刘羽琦' ,
@Scall=6991431 , @fname='奔驰' exec store1 @Sno=102 , @Sname='吉鹏' , @Scall=6991254 , @fname='奔驰' exec room_com1 @Rno=1 , @Cno=c1002, @stime='2009-05-26' exec room_com1 @Rno=2 , @Cno=c1003, @stime='2009-06-01' exec pro_com1 @Cno=c1002, @Pno=204,
@number=45 exec pro_com1 @Cno=c1004, @Pno=201, @number=89 exec pro_com1 @Cno=c1001, @Pno=202, @number=124 exec
-15- pro_str1 @Pno=201 , @Sno=101 , @Strnum1=345 exec pro_str1 @Pno=203 , @Sno=102 , @Strnum1=1254
exec com_str1 @Cno=c1001, @Sno=102, @Strnum2=458 exec com_str1 @Cno=c1004, @Sno=101, @Strnum2=1461exec com_str1 @Cno=c1002, @Sno=101, @Strnum2=1852 exec com_str1 @Cno=c1003, @Sno=102, @Strnum2=2541
3.系统调试和测试
工厂表
表
车间表
表
零件表
表
产品表
表
工人表
表
仓库表
表
存放表
表
存放表
表
组装表
-17- 表
生产表
表
插入零件号=c1005结果截图
-16-
insert
into component(Cno,price,weight) values('c1005',98,695) 表 查询产品信息
select Pno,Pname,Price from product
表 查在长沙生产地产品名称和产品价格 select Pname,Price from product,room where = and ='长沙' 表
-18- 把产品号为203的产品改成车头 update product set Pname='车头' where Pno=203
表 查询价格大于元产品的信息 select * from product
where Price>
表 删除零件号为c1005的零件信息 delete from component where Cno='c1005'
表 把重量大于100的零件的价格改成 update component set Price= where weight>100
表 -19- 创建用户 use factory
exec sp_grantdbaccess 'yangkun','xcm' 图
创建的视图 图
-20- 图 图
4.课程设计总结
这次课程设计加深了我对数据库系统概论相关知识和SQL SERVER相关功能的理解。例如对建立基本表、视图、索引等,都比以前更加的熟练。并在解决遇到的各种问题的过程中,学到了很多新的知识。比如在导入\\导出数据时,由于外键约束的存在,经常会出现错误,这就要注意各个表导入的顺序问题。一般是先导入主键表,后导入外键表,这样可以避免很多的错误。
另外我还充分体会了从事软件开发工作需要特别严谨认真的态度和作风,一点都马虎不得。每一个细微的细节都必须十分的注意,如果不认真思考决策,就会出现或大或小的错误,如果早期的错误隐藏下来,对后面的工作影响就会很大,甚至有时要推倒很多前面做的工作重来。有时候,我自己觉得我写的程序非常的正确,但是就是编译通不过,在查找错误的过程中,面临着否认自己的过程,非常的痛苦,而且由于自己的经验及各方面的能力的不足,所以进展的速度非常的缓慢,往往几天的时间还没有一点进展。这时候,我一般是先自己通过书本,手册和资料找解决办法,实在没辙了才向专家请教。尽管向专家请教解决问题比较快,自己钻研花的时间较多,但我强迫自己独立的思考对我的学习提高帮助非常大。
由于我的知识浅薄,经验不足及阅历颇浅,在设计的过程中也存在一些问题。比如需求分析阶段的工作完成的不是很充分,在后面的设计过程中,前后时常会出现矛盾,不一致现象,因此要反复的修改前面的结果,导致整个工作进行的不是很顺利。另外比如功能过少等
问题,我会在工作的使用过程中,根据工作的具体要求不断的修改,完善,争取使该系统慢慢趋向完美。 -21- 参考文献:
[1] 萨师煊,王珊,数据库系统概论(第四版). 北京:高等教育出版社,2008
-22-
因篇幅问题不能全部显示,请点此查看更多更全内容