2024年4月14日发(作者:艾群)
一、课程设计的目的
掌握数据库的基础知识、基本理论、原理和实现技术。
二、设计题目:工厂数据库管理系统
已知技术参数和设计要求:
需求说明及要求
题目:工厂数据库管理系统
某工厂需建立一个管理数据库存储以下信息:
1、工厂包括厂名和厂长名。
2、一个厂内有多个车间,每个车间有车间号、车间主任姓名、地址和电话。
3、一个车间有多个工人,每个工人有职工号、姓名、年龄、性别和工种。
4、一个车间生产多种产品,产品有产品号、产品名称和价格。
5、一个车间生产多种零件,一个零件也可能为多个车间制造。零件有零件号、
重量和价格。
6、一个产品由多种零件组成,一种零件也可装配出多种产品。
7、产品与零件均存入仓库中。
8、厂内有多个仓库,仓库有仓库号、仓库主任姓名和电话。
各阶段具体要求:
1、需求分析阶段
定义数据项的含义和取值
定义目标系统的数据流
2、概念结构设计阶段
画出实体模型E-R图
3、逻辑结构设计阶段
将实体模型转化为关系模型
给出每个关系的主关键字和函数依赖集
分析你所设计的关系数据库模式是否属于3NF
4、物理设计阶段
确定所有字段的名称、类型、宽度、小数位数及完整性约束
确定数据库及表的名称及其组成
确定索引文件和索引关键字
5、数据库安全及维护设计阶段
设计一个适合的数据库安全策略(用户身份认证、访问权限、视图)
为了实现复杂的数据完整性约束,设计适当的触发器
设计一个适合的数据库备份策略
6、实施阶段
1
要求所有操作必须在查询分析器中用SQL语句或系统存储过程完成。
三、设计内容
1将概念模型转化为关系模型
从E-R图中可以看到有6个实体,所以我建立了6个实体关系表,并且把实体
键作为表的关键字,4个一对多的联系表,在建立关系模型的过程中,我是把一
这边的实体键放到多这边做为外键,4个多对多的联系,所以我建立了4个联系
表,并把相互联系的两实体的实体键,分别作为联系表的外键。在处理仓库与零
件多对多的联系和仓库与产品多对多的联系过程中有以下两种方法:
(1) 建立两个存储表,仓库零件存储表和仓库产品存储表,并把仓库号,零件
号和仓库号,产品号分别作为这两个联系表的外键,这样就保持了参照完
整性的约束条件,而且建立两个联系表清晰明了,更容易使人明白。
(2) 建立一个存储表,仓库物品存储表,它包含仓库号,物品号(零件号和产
品号),库存量3个属性,建立一个存储表更简洁,但是在建表的过程中
丢失的参照完整性。
综合考虑以上两种方法,我觉得第(1)中更好。
四、设计步骤
4.1需求分析阶段
(1)定义数据项的含义和取值
数据项名 含义
FacName 工厂名
FacMName 厂长名
CNo 车间主任编号
WorkNo 车间号
WorkAddress 车间地址
Workphone 车间电话
WorkerNo 职工号
WorkerName 职工名
WoerkerAge 职工年龄
WorkerSex 性别
WorkerType 工种
ProductNo 产品号
ProductName 产品名称
ProductPrice 产品价格
ComNo 零件号
ComWeight 零件重量
Comprice 零件价格
WareNo 仓库号
WNo 仓库主任编号
Warephone 仓库电话
类型
Char
Char
Char
Char
Char
Char
Char
Char
Int
Char
Char
Char
Char
Numeric
Char
Int
Numeric
Char
Char
Char
宽度
10
8
8
4
12
5
5
8
4
2
10
5
12
5
5
4
5
5
8
12
小数位数
1
1
2
(2)定义数据结构
数据结构
工厂
车间
职工
产品
零件
含义
工厂情况表
车间情况表
职工情况表
产品情况表
零件情况表
组成
FacName+FacMName
WorkName+CNo+
WorkNo+WorkAddress+
Workphone+FacName
WorkerNo+WorkerName+WorkerSex+
WorkerType+WorkerAge+WorkNo
ProductNo+ProductName+
ProductPrice+Snum1
ComNo+ComWeight+Comprice+Snu
m2
WareNo+WNo+Warephone+FacName 仓库
(3)定义数据流
数据流名
Factory
Workshop
WorkerQK
ProductQK
CompentsQK
WareQK
4.2概念结构设计阶段
画出实体模型E-R图
仓库情况表
含义
工厂情况表
车间情况表
职工情况表
产品情况表
零件情况表
仓库情况表
组成
FacName+FacMName
WorkNo+CName+WorkAddress+
Workphone+FacName
WorkerNo+ WorkerName+
WorkerSex+ WorkerType
ProductNo+ ProductName+
ProductPrice+WorkNo
ComNo + ComWeight+
Comprice
WareNo+WName+
Warephone+FacName
3
库存量
电话
仓库主任
编号
存入
产品名称
产品号
仓库号
仓库
零件号
重量
价格
零件
数量
价格
组装
数量
存入
产品
生产日
期
有
库存量
生产
年龄
姓名
生产
性别
工厂
有
车间
拥有
工人
工厂名
厂长名
车间号
车间主任
编号
地址
电话
职工号 工种
4.3逻辑结构设计阶段
(1)将实体模型转化为关系模型
实体转化成关系表
Factory
FacName FacMName
Workshop
WorkNo CNo WorkAddress Workphone
Worker
WorkerNo WorkerType WorkerSex WorkerName
Product
ProductNO ProductName ProductPrice WorkNo
4
FacName
WorkerAge
Compoents
ComNO ComWeight Comprice
Warehouse
WareNo WNo Warephone FacName
多对多的联系转化成实体表
W-C(生产)
WorkNo ComNo ComNum1
P-C(组装)
ProductNO ComNO ProNum ComNum2
WaC(仓库---零件)存储
WareNo ComNo Snum2
WaP(仓库---产品)存储
WareNo ProductNo Snum1
(2)每个关系的主关键字和函数依赖集
Factory(FacName,FacMName)
FacName──> FacMName
Workshop(WorkNo,CNo,WorkAddress,Workphone,FacName)
WorkNo──>WorkAddress, WorkNo──>CNo,WorkNo──>Workphone,
WorkNo──>FacName
Worker(WorkerNo,WorkerType,WorkerSex,WorkerName,WorkerAge,WorkNo)
WorkerNo──>WorkerType, WorkerNo──>WorkerSex, WorkerNo──>
WorkerName
WorkerNo──>WorkerAge, WorkerNo──>WorkNo
Product(ProductNo,ProductName,ProductPrice,WorkNo)
ProductNo──> ProductName, ProductNo──> ProductPrice, ProductNo──
> WorkNo
Components(ComNO,ComWeight,Comprice)
ComNO──>ComWeight, ComNO──>Comprice
Warehouse(WareNo,FacName,Warephone,WNo)
WareNo──> FacName, WareNo──> Warephone, WareNo──> WNo
WC(ComNo,WorkNo, ComNum1)
(ComNo,WorkNo)──>ComNum1
PC(ProductNO,ComNO,ProNum,ComNum2)
(ProductNO,ComNO)──>ProNum, (ProductNO,ComNO)──>ComNum2
5
WaC(ComNo,WareNo,Sum2)
(ComNo,WareNo)──>Sum2
WaP(WareNo,ProductNo,Sum1)
(WareNo,ProductNo)──>Sum1
以上的10个关系模式没有非主属性对主关键字的部分依赖和传递依赖,也不存
在属于主属性对主关键字的部分依赖和传递依赖,所以以上的10个关系模式都
属于3NF
4.4物理设计阶段
(1)确定所有字段的名称、类型、宽度、小数位数及完整性约束
数据项名 含义 类型 宽度 小数位 完整性要求
数
FacName 工厂名 Varchar 30 Primary key
FacMName 厂长名 Char 8 Not Null
CNo 车间主任编 Varchar 8 参照职工号
号
WorkNo 车间号 Varchar 10 Primary key
WorkAddress 车间地址 Varchar 20
Workphone 车间电话 Varchar 12
WorkerNo 职工号 Char 5 Primary key
WorkerName 职工名 Char 8
WoerkerAge 职工年龄 Int 4
WorkerSex 性别 Char 2 (男,女)
WorkerType 工种 Char 10
ProductNo 产品号 Char 5 Primary key
ProductName 产品名称 Char 12
ProductPrice 产品价格 numeric 5 1 >=0
ComNo 零件号 Char 5 Primary key
ComWeight 零件重量 Int 4 >=0
Comprice 零件价格 numeric 5 1 >=0
Number 数量 int 4 >=0
WareNo 仓库号 Varchar 10 Primary key
WNo 仓库主任编 Varchar 8 参照职工号
号
Warephone 仓库电话 Varchar 12
Snum1 仓库存储产 Int 4 >=0
品数量
Snum2 仓库存储零Int 4 >=0
件数量
6
(2)确定数据库及表的名称及其组成
关系名 Table 数据结构含义
工厂 Factory 工厂基本信息
车间 Worksho车间基本信息
p
职工 Worker 工人基本信息
产品
零件
Product 产品基本信息
Compen零件基本信息
ts
仓库 Warehou仓库基本信息 WareNo,WName,
s Warephone,FacName
生产 WC 零件与车间的联系 WorkNo ,ComNo , comNum1
组装 PC 零件与产品的联系 ProductNO,ComNo,comNum2
仓库-零WAC 零件与仓库的联系 WareNo,ComNo,Snum2
件
仓库-产WAP 产品与仓库的联系 WareNo,ProductNo,Snum1
品
工厂表
列名 数据类型 能否空值 默认值 键/索引 说明
FacName varchar(30) 否 主键、索引 厂名
FMName varchar(8) 否 厂长名
车间表
列名 数据类型 能否空值 默认值 键/索引 说明
WorkNO varchar(10) 否 主键、索引 车间号
CNo varchar(8) 否 车间主任
编号
WorkAddress varchar(20) 否 车间地址
Workphone Varchar(12) 否 电话
FcaName Varchar(30) 否 工厂名
零件表
列名 数据类型 能否空值 默认值 键/索引 说明
ComNo varchar(10) 否 主键、索引 零件号
ComWe int 否 重量
ight
ComPrnumeric(5,1) 否 价格
ice
7
组成字段
FacName,FMName
WorkNo,WorkAddress,Workphone,CNo,FacNa
me
WorkerNo,WorkerName,WorkerSex,WorkerTyp
e, WorkAge,WorkNo
ProductNo,ProductName, ProductPrice,
WorkNo
ComNo,ComWeight, Comprice
职工表
列名 数据类型 能否空值 默认值 键/索引 说明
Worker varchar(10) 否 主键、索引 职工号
NO
Worker varchar(8) 否 姓名
Name
Worker int 否 年龄
Age
Worker varchar(2) 否 性别
Sex
Worker varchar(20) 否 工种
Type
WorkNO Varchar(10) 否 车间号
产品表
列名 数据类型 能否空默认值 键/索引 说明
值
ProductNo varchar(10) 否 主键、索引 产品号
ProductName varchar(20) 否 产品名
称
ProductPricnumeric(5,否 价格
e 1)
WorkNo Varchar(10) 否 车间号
仓库表
列名 数据类型 能否空值
WareN varchar(10) 否
o
WName varchar(8) 否
Warep
hone
FacNa
me
Varchar(12) 否
Varchar(30) 否
默认值
键/索引
主键、索引
说明
仓库号
仓库主任
姓名
仓库电
话
工厂名
生产表
列名 数据类型 能否空值
Workvarchar(10) 否
No
varchar(10) 否
ComNo
Int 否
8
默认值
键/索引
主键
主键
说明
车间号
零件号
生产零件数
comNum1
组装表
列名 数据类型 能否空值 默认值
varchar(10) 否
ProductNo
ComNo varchar(10) 否
int 否
Comnum2
proNum Int 否
产品存储表
列名 数据类型 能否空值 默认值
WareNo varchar(10) 否
varchar(10) 否
ProductNo
Snum2 int 否
零件存储表
列名 数据类型 能否空值 默认值
WareNo varchar(10) 否
varchar(10) 否
ComNo
Snum1 Int 否
创建数据库和关系表
1.创建factory数据库
键/索引
主键
主键
说明
产品号
零件号
组装零件数
组装产品数
键/索引
主键
主键
说明
仓库号
产品号
产品存放量
键/索引
主键
主键
说明
仓库号
零件号
零件存放量
2创建factory(工厂)表
9
3创建workshop(车间)表
4创建worker(职工)表
5创建product(产品)表
6创建component(零件)表
7创建warehouse(仓库)表
10
8创建WC(生产)表
9创建PC(组装)表
10创建WaP(存储表1)仓库----产品
11创建Wac(存储表2)仓库----零件
11
(3)确定索引文件和索引关键字
Table 索引文件
Factory Factory_IDX
Workshop Workshop_IDX
Worker Worker_IDX
Product Product_IDX
Compoent Compents_IDX
Warehouse Warehouse_IDX
WC WC_IDX
PC PC_IDX
WAC WAC_IDX
WAP WAP_IDX
索引关键字
FacNo
WorkNo
WorkerNo
ProductNo
ComNo
WareNo
ProTime+WorkNo+ComNo
ProductNO+ComNO
WareNo+ComNo
WareNo+ProductNo
4.5数据库安全及维护设计阶段
(1)设计一个适合的数据库安全策略(用户身份认证、访问权限、视图)
添加新用户hh
12
(2)添加角色
(3)授权
1把factory表的所有权限授给hh
2把workshop表的所有权限授给hh
3把worker表的所有权限授给hh
4把product表的所有权限授给hh
13
5把component表的所有权限授给hh
6把warehouse表的所有权限授给hh
14
(4)创建索引
1
为工厂表在工厂名FacName上建立索引
2
为车间表在车间号WorkNo上建立索引
15
3
为职工表在职工编号WorkerNo上建立索引
4
为产品表在产品号ProductNo上建立索引
5
为零件表在零件号ComNo上建立索引
16
6
为仓库表在仓库号WareNo上建立索引
(5)创建视图
(6)创建存储过程
1在工厂表上创建存储过程
2在车间表上创建存储过程
17
3在职工表上创建存储过程
4在产品表上创建存储过程
5在零件表上创建存储过程
6在仓库表上创建存储过程
18
7在生产表上创建存储过程
8在组装表上创建存储过程
9在零件存储表上创建存储过程
10在产品存储表上创建存储过程
19
执行存储过程
1向工厂表中插入数据
2向车间表中插入数据
3向职工表中插入数据
20
4向产品表中插入数据
5向零件表中插入数据
21
6向仓库表中插入数据
7向生产表中插入数据
22
8向组装表中插入数据
9向零件存储表中插入数据
23
10向产品存储表中插入数据
4.6.2查询存储过程
1功能是通过某一职工的姓名查询他的全部信息
2功能是通过某一产品的名称查询该产品的基本信息
24
3功能是通过某一零件的名称查询该零件的基本信息
4功能是通过某一产品的名称查询该产品所需要的零件种类与数量
5通过某一车间号查询改车间的所有信息
25
6通过输入某一日期查询该日生产零件的种类和零件的数目以及生产该零件的
车间号
4.6.3创建触发器
1在生产表上建立触发器,当上生产表中插入一行数据时,零件存储表中零件的
库存量就会增加,零件的库存量等于先前的零件库存量加上生产表中生产零件的
数量
触发前
26
触发后
2在产品存储表上建立触发器,当向产品存储表中插入数据,即产品的库存量增
加时,零件的库存量就会减少,某种零件的库存量等于先前的库存量减去该种产
品所需要的该零件数乘以生产产品的数量
27
五设计一个适合的数据库备份策略
创建一个磁盘备份的设备
use factory
go
Exec sp_addumpdevice 'disk','factory_full','f:'
go
完全备份
Use factory
go
backup database factory to factory_full with init
go
1完全备份工厂数据库
28
增量备份
Use factory
go
backup database factory to disk='f:hufactory_'
with noinit,differential
go
还原整个university数据库
Restore database factory from factory_full
还原差异备份
Restore database factory from factory_differ with norecovery
还原日志备份
Restore database log from factory_log with recovery
29
总结
这次课程设计加深了我对数据库系统概论相关知识和SQL SERVER相关功能
的理解。虽然课程设计已经结束了。回想着这个学期自己所学的《数据库系统概
论》、以及这次做的课程设计,感触蛮深的。
首先,在这次课程设计中,我对建立基本表、视图、索引等,都比以前更加
的熟练。并在解决遇到的各种问题的过程中,学到了很多新的知识。比如在删除
和更新数据时,由于外键约束的存在,经常会出现错误,这就要注意各个表导入
的顺序问题。一般是先导入主键表,后导入外键表,这样可以避免很多的错误。
另外我还充分体会了从事软件开发工作需要特别严谨认真的态度和作风,一
点都马虎不得。每一个细微的细节都必须十分的注意,如果不认真思考决策,就
会出现或大或小的错误,如果早期的错误隐藏下来,对后面的工作影响就会很大,
甚至有时要推倒很多前面做的工作重来。有时候,我自己觉得我写的语句正确,
但是就是编译通不过,在查找错误的过程中,面临着否认自己的过程,非常的痛
苦,而且由于自己的经验及各方面的能力的不足,所以进展的速度非常的缓慢,
往往几天的时间还没有一点进展。这时候,我一般是先自己通过书本,手册和资
料找解决办法,实在没辙了才上网查找相关信息。
由于我的知识浅薄,经验不足及阅历颇浅,在设计的过程中也存在一些问题。
比如需求分析阶段的工作完成的不是很充分,建E-R图时没有充分理解实体和联
系的区别,以致在后面处理问题时,遇到了困难,很多功能无法实现。在后面的
设计过程中,前后时常会出现矛盾,不一致现象,因此要反复的修改前面的结果,
导致整个工作进行的不是很顺利。另外比如功能过少等问题,我会在工作的使用
过程中,根据工作的具体要求不断的修改,完善,争取使该系统慢慢趋向完美。
最后,还要感谢老师对我的帮助,给我提供了许多宝贵的意见。
30
参考文献:
[1] 萨师煊,王珊,数据库系统概论(第四版). 北京:高等教育出版社,2008
[2]Jeffrey ,Jennifer Widom 数据库系统基础教程(第三版).北京机械
工业出版社,2009.8
31
2024年4月14日发(作者:艾群)
一、课程设计的目的
掌握数据库的基础知识、基本理论、原理和实现技术。
二、设计题目:工厂数据库管理系统
已知技术参数和设计要求:
需求说明及要求
题目:工厂数据库管理系统
某工厂需建立一个管理数据库存储以下信息:
1、工厂包括厂名和厂长名。
2、一个厂内有多个车间,每个车间有车间号、车间主任姓名、地址和电话。
3、一个车间有多个工人,每个工人有职工号、姓名、年龄、性别和工种。
4、一个车间生产多种产品,产品有产品号、产品名称和价格。
5、一个车间生产多种零件,一个零件也可能为多个车间制造。零件有零件号、
重量和价格。
6、一个产品由多种零件组成,一种零件也可装配出多种产品。
7、产品与零件均存入仓库中。
8、厂内有多个仓库,仓库有仓库号、仓库主任姓名和电话。
各阶段具体要求:
1、需求分析阶段
定义数据项的含义和取值
定义目标系统的数据流
2、概念结构设计阶段
画出实体模型E-R图
3、逻辑结构设计阶段
将实体模型转化为关系模型
给出每个关系的主关键字和函数依赖集
分析你所设计的关系数据库模式是否属于3NF
4、物理设计阶段
确定所有字段的名称、类型、宽度、小数位数及完整性约束
确定数据库及表的名称及其组成
确定索引文件和索引关键字
5、数据库安全及维护设计阶段
设计一个适合的数据库安全策略(用户身份认证、访问权限、视图)
为了实现复杂的数据完整性约束,设计适当的触发器
设计一个适合的数据库备份策略
6、实施阶段
1
要求所有操作必须在查询分析器中用SQL语句或系统存储过程完成。
三、设计内容
1将概念模型转化为关系模型
从E-R图中可以看到有6个实体,所以我建立了6个实体关系表,并且把实体
键作为表的关键字,4个一对多的联系表,在建立关系模型的过程中,我是把一
这边的实体键放到多这边做为外键,4个多对多的联系,所以我建立了4个联系
表,并把相互联系的两实体的实体键,分别作为联系表的外键。在处理仓库与零
件多对多的联系和仓库与产品多对多的联系过程中有以下两种方法:
(1) 建立两个存储表,仓库零件存储表和仓库产品存储表,并把仓库号,零件
号和仓库号,产品号分别作为这两个联系表的外键,这样就保持了参照完
整性的约束条件,而且建立两个联系表清晰明了,更容易使人明白。
(2) 建立一个存储表,仓库物品存储表,它包含仓库号,物品号(零件号和产
品号),库存量3个属性,建立一个存储表更简洁,但是在建表的过程中
丢失的参照完整性。
综合考虑以上两种方法,我觉得第(1)中更好。
四、设计步骤
4.1需求分析阶段
(1)定义数据项的含义和取值
数据项名 含义
FacName 工厂名
FacMName 厂长名
CNo 车间主任编号
WorkNo 车间号
WorkAddress 车间地址
Workphone 车间电话
WorkerNo 职工号
WorkerName 职工名
WoerkerAge 职工年龄
WorkerSex 性别
WorkerType 工种
ProductNo 产品号
ProductName 产品名称
ProductPrice 产品价格
ComNo 零件号
ComWeight 零件重量
Comprice 零件价格
WareNo 仓库号
WNo 仓库主任编号
Warephone 仓库电话
类型
Char
Char
Char
Char
Char
Char
Char
Char
Int
Char
Char
Char
Char
Numeric
Char
Int
Numeric
Char
Char
Char
宽度
10
8
8
4
12
5
5
8
4
2
10
5
12
5
5
4
5
5
8
12
小数位数
1
1
2
(2)定义数据结构
数据结构
工厂
车间
职工
产品
零件
含义
工厂情况表
车间情况表
职工情况表
产品情况表
零件情况表
组成
FacName+FacMName
WorkName+CNo+
WorkNo+WorkAddress+
Workphone+FacName
WorkerNo+WorkerName+WorkerSex+
WorkerType+WorkerAge+WorkNo
ProductNo+ProductName+
ProductPrice+Snum1
ComNo+ComWeight+Comprice+Snu
m2
WareNo+WNo+Warephone+FacName 仓库
(3)定义数据流
数据流名
Factory
Workshop
WorkerQK
ProductQK
CompentsQK
WareQK
4.2概念结构设计阶段
画出实体模型E-R图
仓库情况表
含义
工厂情况表
车间情况表
职工情况表
产品情况表
零件情况表
仓库情况表
组成
FacName+FacMName
WorkNo+CName+WorkAddress+
Workphone+FacName
WorkerNo+ WorkerName+
WorkerSex+ WorkerType
ProductNo+ ProductName+
ProductPrice+WorkNo
ComNo + ComWeight+
Comprice
WareNo+WName+
Warephone+FacName
3
库存量
电话
仓库主任
编号
存入
产品名称
产品号
仓库号
仓库
零件号
重量
价格
零件
数量
价格
组装
数量
存入
产品
生产日
期
有
库存量
生产
年龄
姓名
生产
性别
工厂
有
车间
拥有
工人
工厂名
厂长名
车间号
车间主任
编号
地址
电话
职工号 工种
4.3逻辑结构设计阶段
(1)将实体模型转化为关系模型
实体转化成关系表
Factory
FacName FacMName
Workshop
WorkNo CNo WorkAddress Workphone
Worker
WorkerNo WorkerType WorkerSex WorkerName
Product
ProductNO ProductName ProductPrice WorkNo
4
FacName
WorkerAge
Compoents
ComNO ComWeight Comprice
Warehouse
WareNo WNo Warephone FacName
多对多的联系转化成实体表
W-C(生产)
WorkNo ComNo ComNum1
P-C(组装)
ProductNO ComNO ProNum ComNum2
WaC(仓库---零件)存储
WareNo ComNo Snum2
WaP(仓库---产品)存储
WareNo ProductNo Snum1
(2)每个关系的主关键字和函数依赖集
Factory(FacName,FacMName)
FacName──> FacMName
Workshop(WorkNo,CNo,WorkAddress,Workphone,FacName)
WorkNo──>WorkAddress, WorkNo──>CNo,WorkNo──>Workphone,
WorkNo──>FacName
Worker(WorkerNo,WorkerType,WorkerSex,WorkerName,WorkerAge,WorkNo)
WorkerNo──>WorkerType, WorkerNo──>WorkerSex, WorkerNo──>
WorkerName
WorkerNo──>WorkerAge, WorkerNo──>WorkNo
Product(ProductNo,ProductName,ProductPrice,WorkNo)
ProductNo──> ProductName, ProductNo──> ProductPrice, ProductNo──
> WorkNo
Components(ComNO,ComWeight,Comprice)
ComNO──>ComWeight, ComNO──>Comprice
Warehouse(WareNo,FacName,Warephone,WNo)
WareNo──> FacName, WareNo──> Warephone, WareNo──> WNo
WC(ComNo,WorkNo, ComNum1)
(ComNo,WorkNo)──>ComNum1
PC(ProductNO,ComNO,ProNum,ComNum2)
(ProductNO,ComNO)──>ProNum, (ProductNO,ComNO)──>ComNum2
5
WaC(ComNo,WareNo,Sum2)
(ComNo,WareNo)──>Sum2
WaP(WareNo,ProductNo,Sum1)
(WareNo,ProductNo)──>Sum1
以上的10个关系模式没有非主属性对主关键字的部分依赖和传递依赖,也不存
在属于主属性对主关键字的部分依赖和传递依赖,所以以上的10个关系模式都
属于3NF
4.4物理设计阶段
(1)确定所有字段的名称、类型、宽度、小数位数及完整性约束
数据项名 含义 类型 宽度 小数位 完整性要求
数
FacName 工厂名 Varchar 30 Primary key
FacMName 厂长名 Char 8 Not Null
CNo 车间主任编 Varchar 8 参照职工号
号
WorkNo 车间号 Varchar 10 Primary key
WorkAddress 车间地址 Varchar 20
Workphone 车间电话 Varchar 12
WorkerNo 职工号 Char 5 Primary key
WorkerName 职工名 Char 8
WoerkerAge 职工年龄 Int 4
WorkerSex 性别 Char 2 (男,女)
WorkerType 工种 Char 10
ProductNo 产品号 Char 5 Primary key
ProductName 产品名称 Char 12
ProductPrice 产品价格 numeric 5 1 >=0
ComNo 零件号 Char 5 Primary key
ComWeight 零件重量 Int 4 >=0
Comprice 零件价格 numeric 5 1 >=0
Number 数量 int 4 >=0
WareNo 仓库号 Varchar 10 Primary key
WNo 仓库主任编 Varchar 8 参照职工号
号
Warephone 仓库电话 Varchar 12
Snum1 仓库存储产 Int 4 >=0
品数量
Snum2 仓库存储零Int 4 >=0
件数量
6
(2)确定数据库及表的名称及其组成
关系名 Table 数据结构含义
工厂 Factory 工厂基本信息
车间 Worksho车间基本信息
p
职工 Worker 工人基本信息
产品
零件
Product 产品基本信息
Compen零件基本信息
ts
仓库 Warehou仓库基本信息 WareNo,WName,
s Warephone,FacName
生产 WC 零件与车间的联系 WorkNo ,ComNo , comNum1
组装 PC 零件与产品的联系 ProductNO,ComNo,comNum2
仓库-零WAC 零件与仓库的联系 WareNo,ComNo,Snum2
件
仓库-产WAP 产品与仓库的联系 WareNo,ProductNo,Snum1
品
工厂表
列名 数据类型 能否空值 默认值 键/索引 说明
FacName varchar(30) 否 主键、索引 厂名
FMName varchar(8) 否 厂长名
车间表
列名 数据类型 能否空值 默认值 键/索引 说明
WorkNO varchar(10) 否 主键、索引 车间号
CNo varchar(8) 否 车间主任
编号
WorkAddress varchar(20) 否 车间地址
Workphone Varchar(12) 否 电话
FcaName Varchar(30) 否 工厂名
零件表
列名 数据类型 能否空值 默认值 键/索引 说明
ComNo varchar(10) 否 主键、索引 零件号
ComWe int 否 重量
ight
ComPrnumeric(5,1) 否 价格
ice
7
组成字段
FacName,FMName
WorkNo,WorkAddress,Workphone,CNo,FacNa
me
WorkerNo,WorkerName,WorkerSex,WorkerTyp
e, WorkAge,WorkNo
ProductNo,ProductName, ProductPrice,
WorkNo
ComNo,ComWeight, Comprice
职工表
列名 数据类型 能否空值 默认值 键/索引 说明
Worker varchar(10) 否 主键、索引 职工号
NO
Worker varchar(8) 否 姓名
Name
Worker int 否 年龄
Age
Worker varchar(2) 否 性别
Sex
Worker varchar(20) 否 工种
Type
WorkNO Varchar(10) 否 车间号
产品表
列名 数据类型 能否空默认值 键/索引 说明
值
ProductNo varchar(10) 否 主键、索引 产品号
ProductName varchar(20) 否 产品名
称
ProductPricnumeric(5,否 价格
e 1)
WorkNo Varchar(10) 否 车间号
仓库表
列名 数据类型 能否空值
WareN varchar(10) 否
o
WName varchar(8) 否
Warep
hone
FacNa
me
Varchar(12) 否
Varchar(30) 否
默认值
键/索引
主键、索引
说明
仓库号
仓库主任
姓名
仓库电
话
工厂名
生产表
列名 数据类型 能否空值
Workvarchar(10) 否
No
varchar(10) 否
ComNo
Int 否
8
默认值
键/索引
主键
主键
说明
车间号
零件号
生产零件数
comNum1
组装表
列名 数据类型 能否空值 默认值
varchar(10) 否
ProductNo
ComNo varchar(10) 否
int 否
Comnum2
proNum Int 否
产品存储表
列名 数据类型 能否空值 默认值
WareNo varchar(10) 否
varchar(10) 否
ProductNo
Snum2 int 否
零件存储表
列名 数据类型 能否空值 默认值
WareNo varchar(10) 否
varchar(10) 否
ComNo
Snum1 Int 否
创建数据库和关系表
1.创建factory数据库
键/索引
主键
主键
说明
产品号
零件号
组装零件数
组装产品数
键/索引
主键
主键
说明
仓库号
产品号
产品存放量
键/索引
主键
主键
说明
仓库号
零件号
零件存放量
2创建factory(工厂)表
9
3创建workshop(车间)表
4创建worker(职工)表
5创建product(产品)表
6创建component(零件)表
7创建warehouse(仓库)表
10
8创建WC(生产)表
9创建PC(组装)表
10创建WaP(存储表1)仓库----产品
11创建Wac(存储表2)仓库----零件
11
(3)确定索引文件和索引关键字
Table 索引文件
Factory Factory_IDX
Workshop Workshop_IDX
Worker Worker_IDX
Product Product_IDX
Compoent Compents_IDX
Warehouse Warehouse_IDX
WC WC_IDX
PC PC_IDX
WAC WAC_IDX
WAP WAP_IDX
索引关键字
FacNo
WorkNo
WorkerNo
ProductNo
ComNo
WareNo
ProTime+WorkNo+ComNo
ProductNO+ComNO
WareNo+ComNo
WareNo+ProductNo
4.5数据库安全及维护设计阶段
(1)设计一个适合的数据库安全策略(用户身份认证、访问权限、视图)
添加新用户hh
12
(2)添加角色
(3)授权
1把factory表的所有权限授给hh
2把workshop表的所有权限授给hh
3把worker表的所有权限授给hh
4把product表的所有权限授给hh
13
5把component表的所有权限授给hh
6把warehouse表的所有权限授给hh
14
(4)创建索引
1
为工厂表在工厂名FacName上建立索引
2
为车间表在车间号WorkNo上建立索引
15
3
为职工表在职工编号WorkerNo上建立索引
4
为产品表在产品号ProductNo上建立索引
5
为零件表在零件号ComNo上建立索引
16
6
为仓库表在仓库号WareNo上建立索引
(5)创建视图
(6)创建存储过程
1在工厂表上创建存储过程
2在车间表上创建存储过程
17
3在职工表上创建存储过程
4在产品表上创建存储过程
5在零件表上创建存储过程
6在仓库表上创建存储过程
18
7在生产表上创建存储过程
8在组装表上创建存储过程
9在零件存储表上创建存储过程
10在产品存储表上创建存储过程
19
执行存储过程
1向工厂表中插入数据
2向车间表中插入数据
3向职工表中插入数据
20
4向产品表中插入数据
5向零件表中插入数据
21
6向仓库表中插入数据
7向生产表中插入数据
22
8向组装表中插入数据
9向零件存储表中插入数据
23
10向产品存储表中插入数据
4.6.2查询存储过程
1功能是通过某一职工的姓名查询他的全部信息
2功能是通过某一产品的名称查询该产品的基本信息
24
3功能是通过某一零件的名称查询该零件的基本信息
4功能是通过某一产品的名称查询该产品所需要的零件种类与数量
5通过某一车间号查询改车间的所有信息
25
6通过输入某一日期查询该日生产零件的种类和零件的数目以及生产该零件的
车间号
4.6.3创建触发器
1在生产表上建立触发器,当上生产表中插入一行数据时,零件存储表中零件的
库存量就会增加,零件的库存量等于先前的零件库存量加上生产表中生产零件的
数量
触发前
26
触发后
2在产品存储表上建立触发器,当向产品存储表中插入数据,即产品的库存量增
加时,零件的库存量就会减少,某种零件的库存量等于先前的库存量减去该种产
品所需要的该零件数乘以生产产品的数量
27
五设计一个适合的数据库备份策略
创建一个磁盘备份的设备
use factory
go
Exec sp_addumpdevice 'disk','factory_full','f:'
go
完全备份
Use factory
go
backup database factory to factory_full with init
go
1完全备份工厂数据库
28
增量备份
Use factory
go
backup database factory to disk='f:hufactory_'
with noinit,differential
go
还原整个university数据库
Restore database factory from factory_full
还原差异备份
Restore database factory from factory_differ with norecovery
还原日志备份
Restore database log from factory_log with recovery
29
总结
这次课程设计加深了我对数据库系统概论相关知识和SQL SERVER相关功能
的理解。虽然课程设计已经结束了。回想着这个学期自己所学的《数据库系统概
论》、以及这次做的课程设计,感触蛮深的。
首先,在这次课程设计中,我对建立基本表、视图、索引等,都比以前更加
的熟练。并在解决遇到的各种问题的过程中,学到了很多新的知识。比如在删除
和更新数据时,由于外键约束的存在,经常会出现错误,这就要注意各个表导入
的顺序问题。一般是先导入主键表,后导入外键表,这样可以避免很多的错误。
另外我还充分体会了从事软件开发工作需要特别严谨认真的态度和作风,一
点都马虎不得。每一个细微的细节都必须十分的注意,如果不认真思考决策,就
会出现或大或小的错误,如果早期的错误隐藏下来,对后面的工作影响就会很大,
甚至有时要推倒很多前面做的工作重来。有时候,我自己觉得我写的语句正确,
但是就是编译通不过,在查找错误的过程中,面临着否认自己的过程,非常的痛
苦,而且由于自己的经验及各方面的能力的不足,所以进展的速度非常的缓慢,
往往几天的时间还没有一点进展。这时候,我一般是先自己通过书本,手册和资
料找解决办法,实在没辙了才上网查找相关信息。
由于我的知识浅薄,经验不足及阅历颇浅,在设计的过程中也存在一些问题。
比如需求分析阶段的工作完成的不是很充分,建E-R图时没有充分理解实体和联
系的区别,以致在后面处理问题时,遇到了困难,很多功能无法实现。在后面的
设计过程中,前后时常会出现矛盾,不一致现象,因此要反复的修改前面的结果,
导致整个工作进行的不是很顺利。另外比如功能过少等问题,我会在工作的使用
过程中,根据工作的具体要求不断的修改,完善,争取使该系统慢慢趋向完美。
最后,还要感谢老师对我的帮助,给我提供了许多宝贵的意见。
30
参考文献:
[1] 萨师煊,王珊,数据库系统概论(第四版). 北京:高等教育出版社,2008
[2]Jeffrey ,Jennifer Widom 数据库系统基础教程(第三版).北京机械
工业出版社,2009.8
31