1、课程设计任务书课程名称:数据库系统原理设计题目:工厂数据库管理系统已知技术参数和设计要求:需求说明及要求题目:工厂数据库管理系统一、工厂管理数据库工厂需建立一个管理数据库存储以下信息:*工厂信息包括工厂代号,工厂名,厂长名及工厂运营开销。*一个厂内有多个车间,每个车间有车间号、车间主任姓名、地址,电话及每个月的车间运营开销。*一个车间有多个工人,每个工人有职工号、姓名、年龄、性别,工种及月工资。*一个车间生产多种产品,产品有产品号、产品名、规格,制造成本和销售价格。*一个车间生产多个零件,一个零件也可能由多个车间制造。零件有零件号、零件名,制造成本和销售价格。*一个产品由多个零件组成,一个零件
2、也可装配出多种产品。*产品与零件均存入仓库中。*厂内有多个仓库,仓库有仓库号,仓库主任姓名、电话及仓库的运营成本。应完成的主要功能:(1)各种各样的管理功能,如工厂信息的管理功能,包括录入、修改、查询、输出工厂的信息;车间信息的管理功能,包括录入、修改、查询、输出车间的信息;还有工人,零件,产品,仓库等的信息管理功能。(2) 工厂的利润统计,包括月利润和年利润统计。(3) 能输出各种各样的报表,如工人工资月报表,年报表;每个车间生产的产品和零件数量的月报表;仓库存储产品和零件数量的月报表;工厂运营开销和车间运营开销的月报表等。二、开发环境数据库选用微软的 SQL SERVER。开发环境可以选择
3、:(1)Delphi; (2)Visual Basic; (3) C+ builder; (4) Visual C+。只选择其中的一种软件开发工具就可以。三、基本要求(1)完成问题陈述中所提到的所有需求功能(2)要求撰写不少于 2500 个文字的文档。(3)文档中至少要包括:ER 模型图、系统功能图、数据字典、表关系的详细说明。(4)用户界面设计:采用窗口式,色彩要柔和,界面要友好,操作要简单。(5)用户手册,描述软件系统所具有的功能及基本的使用方法。使用户能了解该软件的用途,并能确定在什么情况下、如何使用它。(6)操作手册,为操作人员提供该软件每一个运行的具体过程和相关知识,包括操作方法的细
4、节等。四、文档格式1、概述包括项目背景、编写目的、软件定义、开发环境等内容。2、需求分析问题陈述、需完成的功能摘 要在计算机日益普及的今天,对个人而言若采用一套行之有效的工厂管理系统来管理生产,会方便许多。对工厂管理部门而言,以前单一的手工检索已不能满足人们的要求,往往是投入了大量的人力和财力却得不到高效的管理效率。为了便于工厂产品和职工的管理,需要有效的工厂管理软件,减轻工作人员的工作量,方便工作人员对它的操作,提高管理的质量和水平,做到高效、智能化管理,达到提高产品生产信息管理效率的目的。采用数据库技术生成的工厂管理系统将会极大地方便了工作人员的劳动,使工作人员从繁忙、复杂的工作进入到一个
5、简单、高效的工作中。基于这个问题,开发了工厂数据库管理系统。本文通过作者设计和开发一个中小型工厂管理系统的实践,阐述了工厂数据库管理软件中所应具有的基本功能、设计、实现。分别从设备管理和用户管理等角度进行处理,并对需求分析、概念设计、逻辑设计、物理设计、数据库实施和维护进行了阐述,实行设备管理的计算机自动化。关键字:工厂数据库 职工管理 生产管理目录1. 本论文的目标与任务12. 数据库设计12.1 需求分析阶段12.2 概念设计阶段22.3 逻辑设计阶段32.4 物理设计阶段32.5 数据库安全及维护设计52.6 数据库实施阶段62.6.1 建立数据库、数据表、索引62.6.2 数据入库93
6、.系统调试和测试164.课程设计总结21参考文献221 本论文的目标与任务建立一个某工厂管理数据库存储以下信息:1、 工厂包括厂名和厂长名。2、 一个厂内有多个车间,每个车间有车间号、车间主任姓名、地址和电话。3、 一个车间有多个工人,每个工人有职工号、姓名、年龄、性别和工种。4、 一个车间生产多种产品,产品有产品号、产品名称和价格。5、 一个车间生产多种零件,一个零件也可能为多个车间制造。零件有零件号、重量和价格。6、 一个产品由多种零件组成,一种零件也可装配出多种产品。7、 产品与零件均存入仓库中。8、 厂内有多个仓库,仓库有仓库号、仓库主任姓名和电话。针对各工厂信息管理情况,设计出适合它
7、们的计算机辅助工厂数据库管理系统。实现对工厂产品和职工基本信息进行计算机辅助管理,完成有关信息的记录、修改、查询、删除等一系列任务的计算机管理与实现。系统有对产品、零件、车间和职工等信息的管理,其功能是实现对各部分数据内容进行添加、修改、查询等操作。2 数据库设计2.1 需求分析阶段(1)对象处理:工厂信息:厂名、厂长名。车间信息:车间号、车间主任姓名、地址和电话。职工信息:职工号、姓名、年龄、性别和工种。产品信息:产品号、产品名称和价格。零件信息:零件号、重量和价格。仓库信息:仓库号、仓库主任姓名和电话。(2)功能及要求:能对一定量的工厂信息进行管理,主要包括:存储管理工厂信息,修改和查询工
8、厂信息以及管理职工和工作人员信息。系统安全性先通过视图机制,不同的用户只能访问系统授权的视图,这样可提供系统数据一定程度上的安全性,再通过用户授权机制,通过用户登陆来识别用户级别,根据这个级别来分配用户权限,达到数据更高层次的安全保密功能。近而可以满足用户的基本数据安全性要求。完整性要求用于描述各种信息之间的制约关系,以及关联关系,各个数据项的取值范围以及各个数据项是否可以不取值。根据实际需要,采取一定的手段来满足用户的完整性需求。-1-(3)数据结构表 2.1数据结构名 数据结构含义 组成fac 工厂基本信息 Fname, fn_nameroom 车间基本信息 Rno Rname Raddr
9、 Rcallworker 工人基本信息 Wno Wname Wage Wsex Wtypeproduct 产品基本信息 Pno Pname Pricecomponent 零件基本信息 Cno weigt Pricestore 仓库基本信息 Sno Sname Scall2.2 概念设计阶段(1)实体通过对上面的系统总体分析,可以得到大概的实体-关系模型(E-R 模型) ,如下:工厂:厂名,厂长名工人:职工号,姓名,性别,年龄,工种 车间:车间号,车间主任姓名,地址,电话产品:产品号,价格,产品名 零件:零件号,价格,重量仓库:仓库号,仓库主任姓名,电话(2)由各子 E-R 合并得到的基本 E-
10、R 如下图所示:图 2.1-2-2.3 逻辑结构设计根据上面的数据库 ER 图,现在需要将上面的数据库概念结构转化为数据库系统所支持的实际数据模型,也就是数据库的逻辑结构。在上面的实体以及实体之间关系的基础上,形成数据库中的表格以及各个表格之间的关系。实体型转换为关系模式。实体的属性就是关系的属性,实体的码就是关系的码。对于实体间的联系则有以下不同的情况:一个 m:n 联系转换为一个关系模式。与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合。一个 1:n 联系可以转换为一个独立的关系模式,也可以与 n 端对应的关系模式合并。如果转换为一个独立的关系模式,
11、则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为 n 端实体的码。 一个 1:1 联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。三个或三个以上实体间的一个多元联系可以转换为一个关系模式。与该多元联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合 逻辑结构设计的任务是将概念结构设计的 E-R 图,转化为与选用的 DBMS 所支持的数据模型相符的逻辑结构,形成逻辑模型。工厂(厂名, 厂长名)车间(车间号,车间主任姓名,地址 ,电话)工人(职工号,姓名,年龄,性别, 工种)产品(产品号,产品名称,价格)零件(零件号
12、,重量,价格)仓库(仓库号,仓库主任姓名,电话 )生产(车间号,零件号,生产日期 )组装(产品号,零件号,组装数)存入(仓库号, 产品号,零件号 ,存储量)2.4 物理结构设计操作环境 windows 2KS ,SQL 2000 数据库系统.确定数据库及表的名称及其组成:建立数据库 create database factory,数据库名称 factory(工厂数据库)数据说明处理: store(仓库)fac(工厂) ,room (车间)worker (工人) ,-3-product(产品) ,component(零件) ,room_com(零件与车间的联系)pro_com(零件与产品的联系)
13、 ,com_str (零件与仓库的联系)pro_str(产品与仓库的联系) ;基本表的组成: 表 2.1 基本表 数据结构含义 组成fac 工厂基本信息 Fname, fn_nameroom 车间基本信息 Rno ,Rname, Raddr, Rcallworker 工人基本信息 Wno,Wname,Wage,Wsex,Wtypeproduct 产品基本信息 Pno, Pname, Pricecomponent 零件基本信息 Cno, weigt, Pricestore 仓库基本信息 Sno, Sname, Scallroom_com 零件与车间的联系 Rno, Cno,Stimepro_co
14、m 零件与产品的联系 Pno, Cno, numbercom_str 零件与仓库的联系 Cno, Sno, Strnum1pro_str 产品与仓库的联系 Pno, Sno, Strnum2工厂表 表 2.2列名 数据类型 能否空值 默认值 键/索引 说明fname varchar(20) 否 主键、索引 厂名fn_name varchar(20) 否 厂长名车间表 表 2.3列名 数据类型 能否空值 默认值 键/索引 说明Rno varchar(10)否 主键、索引 车间号Rname 否 车间主任姓名varchar(20)Raddr varchar(20)否 车间地址Rcall int 否
15、电话零件表 表 2.4列名 数据类型 能否空值 默认值 键/索引 说明Cno varchar(10)否 主键、索引 零件号weight int 否 重量Price numeric(5,1) 否 价格工人表 表 2.5列名 数据类型 能否空值 默认值 键/索引 说明Wno varchar(10)否 主键、索引 职工号Wname varchar(20)否 姓名Wage int 否 年龄Wsex varchar(2)否 性别Wtype varchar(20)否 工种 产品表 表 2.6列名 数据类型 能否空值 默认值 键/索引 说明Pno varchar(10)否 主键、索引 产品号Pname va
16、rchar(20)否 产品名称Price numeric(5,1) 否 价格-4-仓库表 表 2.7列名 数据类型 能否空值 默认值 键/索引 说明Sno varchar(10)否 主键、索引 仓库号Sname varchar(20否 仓库主任姓名)Scall int 否 仓库电话生产表 表 2.8列名 数据类型 能否空值 默认值 键/索引 说明Rno varchar(10)否 主键 车间号Cno varchar(10)否 主键 零件号Stime datetime 否 生产日期组装表 表 2.9列名 数据类型 能否空值 默认值 键/索引 说明Pno varchar(10)否 主键 产品号Cno
17、 varchar(10)否 主键 零件号number int 否 组装数存放表 表 2.10列名 数据类型 能否空值 默认值 键/索引 说明Sno varchar(10)否 主键 仓库号Cno varchar(10)否 主键 零件号Pno varchar(10)否 主键 产品号Strnum1 Int 否 零件存放量Strnum2 int 否 产品存放量建立索引:索引中记录了表中的关键值,提供了指向表中行的指针。它既可以在定义表时创建,也可以在定义表之后的任何时候创建。索引可以创建在一个列或多个列的组合上。(1) 、在车间信息表车间号列上创建索引create index roomRno on r
18、oom(Rno)(2) 、在车间信息表的车间主任姓名列上创建索引create index roomRname on room(Rname)为数据库中各基本表建立的索引如下:由于有的基本表经常在查询条件和连接操作的连接条件中出现,且它们的值唯一,在两个属性上建立唯一性索引;2.5 数据库安全及维护设计(1)在数据库 fac 中添加新用户 xcm.use factoryexec sp_grantdbaccess yangkun,xcm(2)创建登录名,添加角色exec sp_addlogin yangkun ,1234,factoryexec sp_addsrvrolemember yangkun
19、 ,sysadmin-5-(3)授权与基本表grant select,updateon productto xcm;grant all privileges on workerto xcm;grant all privileges on componentto xcm;grant all privileges on storeto xcm;grant all privileges on roomto xcm;(4)创建视图create view IS_storeasselect Sno,Sname,Scallfrom storecreate view IS_workerasselect Wno
20、,Wname,Wsexfrom workerwhere Wsex=女 create view IS_productasselect Pno,Pname,Pricefrom productwhere Pno=12.6 数据库实施阶段2.6.1 建立数据库、数据表、索引-6-(1)建立数据库create database factoryon primary(name=factory_data,filename=d:cxmfactory.mdf,size=50MB,maxsize=70MB,filegrowth=1MB)log on(name=factory_log,filename=d:cxmfa
21、ctory.ldf,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)
22、;创建工人表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
23、0,check(Price0),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(Price0),weight int);创建仓库表create table store(Sno varchar(10)primary key,Sname varchar(20),Scall int,fname varchar(20)not null,foreign k
24、ey(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,n
25、umber int,primary key(Pno,Cno),foreign key(Pno)references product(Pno),foreign key(Cno)references component(Cno);-8-创建存放表 1create 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(
26、Sno);创建存放表 2create 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 prod
27、uct(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)asinsert into workervalues(Wno,Wname,Wage,Wsex,Wtype,Rno);-
28、9-create proc room(Rno varchar(10),Rname varchar(20),Rcall int,Raddr char(8),fname varchar(20)asinsert into roomvalues(Rno, Rname,Rcall,Raddr,fname);create proc product1(Pno varchar(10),Pname varchar(20),Price numeric(5,1),Rno varchar(10)asinsert into productvalues(Pno,Pname,Price,Rno);create proc c
29、omponent1(Cno varchar(10),Price float,weight float,)asinsert into componentvalues(Cno,Price,weight);create proc store1(Sno varchar(10),Sname varchar(20),Scall int,fname varchar(20)asinsert -10-into storevalues(Sno,Sname,Scall,fname);create proc fac1(fname varchar(20),fn_name varchar(20)asinsert into
30、 facvalues(fname,fn_name );create proc room_com1(Rno varchar(10),Cno varchar(10),stime datetime)asinsert into room_comvalues(Rno,Cno,stime);create proc pro_com1(Cno varchar(10),Pno varchar(10),number int)asinsert into pro_comvalues(Cno,Pno,number);create proc pro_str1(Pno varchar(10),Sno varchar(10)
31、,Strnum1 int)asinsert into pro_strvalues(Pno,Sno,Strnum1);-11-create proc com_str1(Cno varchar(10),Sno varchar(10),Strnum2 int)asinsert into com_strvalues(Cno,Sno,Strnum2);(2)存储数据execfac1fname=奔驰 ,fn_name=张磊execroom1Rno=1,Rname=刘基,Rcall=4254357,Raddr=长沙 ,fname=奔驰execroom1Rno=2,Rname=刘择机,Rcall=425004
32、6,Raddr=株洲 ,fname=奔驰execworker1Wno=102,Wname=刘雄峰 ,Wage=40 ,Wsex=男 ,Wtype=搬运工,Rno=1 execworker1-12-Wno=103,Wname=刘芸 ,Wage=21 ,Wsex=女 ,Wtype=经理,Rno=2 execworker1Wno=101,Wname=郑凡 ,Wage=21 ,Wsex=女 ,Wtype=前台接待,Rno=1 execworker1Wno=104,Wname=黄晓明 ,Wage=27 ,Wsex=男 ,Wtype=技术人员,Rno=2 execproduct1Pno=201 ,Pnam
33、e=轮胎 ,Price=500,Rno=1 execproduct1Pno=202 ,Pname=引擎 ,Price=9584.1,Rno=2 execproduct1Pno=203 ,Pname=挡风玻璃 ,-13-Price=1584.1,Rno=1 execproduct1Pno=204 ,Pname=奔驰摩托 ,Price=9999.9,Rno=1execproduct1Pno=205 ,Pname=奔驰货车 ,Price=9999.0,Rno=2execcomponent1Cno=c1002 ,Price=6520 ,weight=200 execcomponent1Cno=c100
34、1 ,Price=520 ,weight=10 execcomponent1Cno=c1003 ,Price=925 ,weight=150 execcomponent1Cno=c1004 ,Price=654 ,weight=100 execstore1-14-Sno=101 ,Sname=刘羽琦 ,Scall=6991431 ,fname=奔驰execstore1Sno=102 ,Sname=吉鹏 ,Scall=6991254 ,fname=奔驰execroom_com1Rno=1 ,Cno=c1002,stime=2009-05-26execroom_com1Rno=2 ,Cno=c10
35、03,stime=2009-06-01execpro_com1Cno=c1002,Pno=204,number=45execpro_com1Cno=c1004,Pno=201,number=89execpro_com1Cno=c1001,Pno=202,number=124exec-15-pro_str1Pno=201 ,Sno=101 ,Strnum1=345execpro_str1Pno=203 ,Sno=102 ,Strnum1=1254execcom_str1Cno=c1001,Sno=102,Strnum2=458execcom_str1Cno=c1004,Sno=101,Strnu
36、m2=1461execcom_str1Cno=c1002,Sno=101,Strnum2=1852execcom_str1Cno=c1003,Sno=102,Strnum2=25413.系统调试和测试工厂表 表 3.1 车间表 表 3.2 -16- 零件表 表 3.3 产品表 表 3.4 工人表 表 3.5 仓库表 表 3.6存放表 表 3.7存放表 表 3.8组装表 -17- 表 3.9生产表 表 3.10插入零件号=c1005 结果截图insert into component(Cno,price,weight)values(c1005,98,695)表 3.11查询产品信息select
37、Pno,Pname,Pricefrom product 表 3.12查在长沙生产地产品名称和产品价格select Pname,Pricefrom product,roomwhere product.Rno=room.Rno and room.Raddr=长沙表 3.13-18-把产品号为 203 的产品改成车头update productset Pname=车头where Pno=203表 3.14查询价格大于 2000.0 元产品的信息select *from productwhere Price2000.0表 3.15删除零件号为 c1005 的零件信息deletefrom compone
38、ntwhere Cno=c1005表 3.16把重量大于 100 的零件的价格改成 65689.1update componentset Price=5689.1where weight100表 3.17-19-创建用户use factoryexec sp_grantdbaccess yangkun,xcm 图 3.1创建的视图 图 3.2 -20- 图 3.3图 3.64.课程设计总结这次课程设计加深了我对数据库系统概论相关知识和 SQL SERVER 相关功能的理解。例如对建立基本表、视图、索引等,都比以前更加的熟练。并在解决遇到的各种问题的过程中,学到了很多新的知识。比如在导入导出数据时
39、,由于外键约束的存在,经常会出现错误,这就要注意各个表导入的顺序问题。一般是先导入主键表,后导入外键表,这样可以避免很多的错误。另外我还充分体会了从事软件开发工作需要特别严谨认真的态度和作风,一点都马虎不得。每一个细微的细节都必须十分的注意,如果不认真思考决策,就会出现或大或小的错误,如果早期的错误隐藏下来,对后面的工作影响就会很大,甚至有时要推倒很多前面做的工作重来。有时候,我自己觉得我写的程序非常的正确,但是就是编译通不过,在查找错误的过程中,面临着否认自己的过程,非常的痛苦,而且由于自己的经验及各方面的能力的不足,所以进展的速度非常的缓慢,往往几天的时间还没有一点进展。这时候,我一般是先自己通过书本,手册和资料找解决办法,实在没辙了才向专家请教。尽管向专家请教解决问题比较快,自己钻研花的时间较多,但我强迫自己独立的思考对我的学习提高帮助非常大。由于我的知识浅薄,经验不足及阅历颇浅,在设计的过程中也存在一些问题。比如需求分析阶段的工作完成的不是很充分,在后面的设计过程中,前后时常会出现矛盾,不一致现象,因此要反复的修改前面的结果,导致整个工作进行的不是很顺利。另外比如功能过少等问题,我会在工作的使用过程中,根据工作的具体要求不断的修改,完善,争取使该系统慢慢趋向完美。-21-参考文献:1 萨师煊,王珊,数据库系统概论(第四版). 北京:高等教育出版社,2008-22-