长 沙 学 院
课程设计指导书
课程设计名称 数据库系统原理课程设计
系 (部) 计算机科学与技术 (盖章)
专 业 计算机科学与技术
班 级 计四
2010 年 06 月 17 日
长沙学院课程设计鉴定表
姓名 阳锟 学号 2008021412 专业 计科 班级 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) 物理设计
6) 数据库安全及维护设计
7) 数据库上机实现
8) 答辩
计划时间 指导老师 学生
朱永娇 阳锟
朱永娇 阳锟
朱永娇 阳锟
第 15 周~16 周
朱永娇 阳锟
注意事项
提交文档
长沙学院课程设计任务书 (每学生 1 份)
长沙学院课程设计论文 (每学生 1 份)
长沙学院课程设计鉴定表 (每学生 1 份)
指导教师签名: 日期:
教研室主任签名: 日期:
系主任签名: 日期:
摘 要
在计算机日益普及的今天,对个人而言若采用一套行之有效的工厂管理系统来管理生产,
会方便许多。对工厂管理部门而言,以前单一的手工检索已不能满足人们的要求,往往是投
入了大量的人力和财力却得不到高效的管理效率。为了便于工厂产品和职工的管理,需要有
效的工厂管理软件,减轻工作人员的工作量,方便工作人员对它的操作,提高管理的质量和
水平,做到高效、智能化管理,达到提高产品生产信息管理效率的目的。采用数据库技术生
成的工厂管理系统将会极大地方便了工作人员的劳动,使工作人员从繁忙、复杂的工作进入
到一个简单、高效的工作中。基于这个问题,开发了工厂数据库管理系统。本文通过作者设
计和开发一个中小型工厂管理系统的实践,阐述了工厂数据库管理软件中所应具有的基本功
能、设计、实现。分别从设备管理和用户管理等角度进行处理,并对需求分析、概念设计、
逻辑设计、物理设计、数据库实施和维护进行了阐述,实行设备管理的计算机自动化。
关键字:工厂数据库 职工管理 生产管理
目录
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
component 零件基本信息 Cno, weigt, Price
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 varchar(20) 否 车间主任姓名
Raddr varchar(20) 否 车间地址
Rcall int 否 电话
零件表 表
列名 数据类型 能否空值 默认值 键/索引 说明
Cno varchar(10)否 主键、索引 零件号
weight int 否 重量
Price numeric(5,1) 否 价格
工人表 表
列名 数据类型 能否空值 默认值 键/索引 说明
Wno varchar(10) 否 主键、索引 职工号
Wnam
e
varchar(20) 否 姓名
Wage int 否 年龄
Wsex varchar(2) 否 性别
Wtype varchar(20) 否 工种
产品表 表
列名 数据类型 能否空值 默认值 键/索引 说明
Pno varchar(10) 否 主键、索引 产品号
Pname varchar(20) 否 产品名称
Price numeric(5,1) 否 价格
-4-
仓库表 表
列名 数据类型 能否空值 默认值 键/索引 说明
Sno varchar(10) 否 主键、索引 仓库号
Sname varchar(20) 否 仓库主任姓名
Scall 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 Int 否 零件存放量
Strnum2 int 否 产品存放量
建立索引:
索引中记录了表中的关键值,提供了指向表中行的指针。它既可以在定义表时创建,也
可以在定义表之后的任何时候创建。索引可以创建在一个列或多个列的组合上。
(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'
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)
数据入库
(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=1461
exec
com_str1
@Cno=c1002,
@Sno=101,
@Strnum2=1852
exec
com_str1
@Cno=c1003,
@Sno=102,
@Strnum2=2541
3.系统调试和测试
工厂表
表
车间表
表
-16-
零件表
表
产品表
表
工人表
表
仓库表
表
存放表
表
存放表
表
组装表
-17-
表
生产表
表
插入零件号=c1005 结果截图
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-