书店销售系统数据库分析与设计.docx
《书店销售系统数据库分析与设计.docx》由会员分享,可在线阅读,更多相关《书店销售系统数据库分析与设计.docx(32页珍藏版)》请在冰点文库上搜索。
书店销售系统数据库分析与设计
/
东方学院
!
实验(实训)报告
项目名称书店销售系统数据库分析与设计
所属课程名称数据库原理及应用
项目类型设计、综合型
实验(实训)日期—
@
班级12信息1班
学号030510
222527
3943
姓名李珺茹郑章章徐莹莹
巫日峥冯星傅媛
徐斌林良泽
…
分工表
1、需求分析(郑章章、李珺茹)
书店的部门组成、各部门的业务说明、基本信息管理
安全性要求与完整性要求
2.概念结构设计(徐斌、林良泽)
3逻辑结构设计(徐莹莹)
E-R图向关系模型的转换、数据模型的优化
4.物理结构设计(巫日峥)
数据库物理设计原理、相关表的物理结构
5.数据库实施(冯星)
数据库建立代码、初始数据的输入、视图的建立、触发器的建立
#
6、数据库的试运行(傅媛)
7、数据库的维护
、
一、设计目的及要求2
、目的2
、背景2
概述2
可行性分析2
?
二、课程设计内容说明3
1、需求分析3
书店的部门组成3
各部门的业务说明3
基本信息管理4
安全性要求与完整性要求5
2.概念结构设计5
3逻辑结构设计()9
;
E-R图向关系模型的转换9
数据模型的优化10
4.物理结构设计10
数据库物理设计原理10
相关表的物理结构11
5.数据库实施14
数据库建立代码14
初始数据的输入16
|
视图的建立19
触发器的建立20
6、数据库的试运行22
7、数据库的维护22
三、结论及体会22
一、设计目的及要求
、目的
在科学飞速发展的今天,人们的视野越来越广,数据量急剧增加。
过去人们把数据存放在文件柜里,现在人们借助计算机和数据库技术科学地保存和管理大量的复杂数据,以便能方便而充分地利用这些宝贵的信息资源。
~
本系统的设计目标就是要为中小型书店提供一套运行稳定、安全可靠、操作简便的管理系统。
帮助书店销售业务处理日常工作业务,规范管理各项工作和操作流程。
从根本上改变以前那种旧的管理模式,真正提高管理和服务的水平。
、背景
随着社会信息量的迅速增长,计算机处理的数据量不断增加,在我国,管理信息系统是计算机应用最广泛的领域之一。
随着我国经济建设突飞猛进,管理科学化与管理手段的现代化已经提到非常重要的地位,企、事业单位为了提高自身的管理水平和竞争能力,纷纷投入人力物力,开发适合本单位需求的管理信息系统。
中国的信息化沿着企业信息化和政府信息化这两根链条正在飞速的发展,在全国的各级教育单位中,都在进行管理方式的改革,由以前的人工管理方式在向现在的人工加计算机技术的过渡中,在现在的这种模式中可以很大的提高工作人员的工作效率,提高了正确性。
概述
这次所选的设计题目是书店销售管理系统。
数据库环境选择SQLserver2005中文版。
可行性分析
管理上可行性
\
书店管理其实是不能说是简单,但是很琐碎。
每天的销售还有最后的书本数量的核对会耗费大量的人力和时间。
而进行计算机信息技术上的自动化管理不仅提高了管理的准确性而且省时省力。
经济上可行性
只要这个书店管理系统就好,不需要额外的支出。
技术上可行性
在大学我们已经学习了有关数据库,c语言等一系列计算机技术,在相对宽裕的时间内是可以编写出程序的。
二、课程设计内容说明
1、需求分析
书店的部门组成
<
对于书店来说,目的是销售图书,所以包含销售部门;同时为书店进书的部门称为进货部门。
各部门的业务说明
销售部门
对图书销售情况进行结算,对客户资源进行管理。
如,对某一段时间的图书销售情况进行统计;对订书的顾客信息进行记录,统计等。
因此,需要销售人员,图书,购书实体:
顾客,以及联系:
销售,购买。
进货部门
记录图书供应商的信息,以便获得最新的图书进货信息。
通过供应商,为书店购进新的图书。
需要实体供货商,联系:
进货。
基本信息管理
-
该模块实现图书情况的分类,包括书号,书名,作者,售价等。
便利店员查找书籍,为顾客提供更好的建议。
销售情况管理
该模块对每本出售的书本进行统计,记录每本书售出的日期,购买人,经办人和销售的金额。
在这里店员可以很方便的加入销售记录,修改记录。
便于每天书店清账。
而且在这里总金额的计算公式是事先设定好的,这样避免了人为的计算错误。
销售、进货、书本信息管理
销售、进货和书本库存三者结合起来管理整个书店的图书数量。
库存实现对书店剩余书本的管理,知道什么书还剩几本。
而进货清楚让人知道进了什么书,售价是什么还有哪个供应商提供的。
而且在这里总金额的计算公式是事先设定好的,这样避免了人为的计算错误。
书店会员管理
实现系统相关会员信息的注册及身份,同时也提供对应会员的资料更新。
该模块还可以收集会员相关的消费额度,提供不同的折扣力度。
书店职员管理
—
实现书店职员的相关的管理,收集每个员工的相关信息,更好的了解员工还有实现不同职位不同的工资管理。
安全性要求与完整性要求
安全性要求:
系统应设置访问用户都预先约定好一个计算过程或者函数,鉴别用户身份时,系统提供一个随机数,用户根据自己预先约定的计算过程或者函数进行计算,系统根据用户计算结果是否正确进一步鉴别用户身份;
系统应对不同的访问级别,限制访问用户可查询和处理数据的类别和内容;
系统应对不同用户设置不同的权限,区分不同的用户,如区分会员,职员。
完整性要求:
'
各种信息记录的完整性,信息记录内容不为空,主码值唯一;
列值非空,列值唯一,列值满足一个布尔表达式;
用户的操作违背了完整性约束条件时,采取一定的动作,如拒绝执行该操作;
各种数据间相互联系的正确性;
相同的数据在不同的记录中的一致性。
2.概念结构设计
部分E-R图
图书本基本信息E-R图
图供应商信息E-R图
图职工信息E-R图
图会员信息E-R图
图销售信息E-R图
图进货信息E-R图
总体E-R图
3逻辑结构设计
E-R图向关系模型的转换
逻辑设计的目的是把概念设计阶段设计的全局E-R模式转换层与选用的具体机器上DBMS锁支持的数据模型相符合的逻辑结构。
逻辑设计的步骤主要步骤有以下五步:
(1)初始模式的形成
(2)自模式设计
(3)应用程序设计梗概
(4)模式评价
?
(5)修正模式
E-R图向关系模型转换,首先要进行数据的规范化。
所谓规范化是指在一个数据结构中没有重复出现的项组。
规范化是在关系数据库中减少数据冗余的过程。
实体
书本(书号,书名,作者,价格,出版社,出版日期,类别,库存数量)
属于BCNF
供应商(供应商代号,供应商名字,联系人,电话,地址)属于BCNF
员工(工号,ID,姓名,电话,住址,职位,性别,年龄)属于BCNF
会员(会员号,姓名,年龄,电话,累积消费,折扣力度,入会时间,性别)
;
属于BCNF
关系
进货(书号,时间,供应商代号,工号,书名,进货单号,金额,数量,总价)
属于BCNF
销售(书号,销售单号,书价,购买者,工号,折扣,时间,数量)
属于3NF
数据模型的优化
#
关系模式会员号,姓名,书名,供应商号,职工号不存在非主属性对主属性的部分函数依赖,也不存在传递函数依赖,已经达到了3NF,但是销售关系模式、进货关系模式、库存信息关系模式中存在着一些数据冗余,现将四个关系模型进行合并,消除冗余,优化为:
进货(书号,时间,供应商代号,工号,书名,进货单号,金额,数量)
4.物理结构设计
数据库物理设计原理
数据库物理设计阶段的任务是根据具体计算机系统(DBMS和硬件等)的特点,为给定的数据库系统确定合理的存储结构和存取方法。
所谓的“合理”主要有两个含义:
一个是要使设计出的物理数据库占用较少的存储空间,另一个对数据库的操作具有尽可能高的速度。
主要体现在后者。
建立索引:
根据本系统的特点,采用B+树索引存取方法建立索引
对图书,会员,职员,供应商,进货,销售和库存建立索引
]
①对图书,会员,职员,销售建立组合索引
②对进货,销售,图书建立组合索引
③对图书,供应商,进货建立组合索引
对其进行的操作:
①查找
查找以典型的方式进行,类似于二叉查找树。
起始于根节点,自顶向下遍历树,选择其分离值在要查找值的任意一边的子指针。
在节点内部典型的使用二分查找来确定这个位置。
②插入
节点要处于违规状态,它必须包含在可接受范围之外数目的元素。
首先,查找要插入其中的节点的位置。
接着把值插入这个节点中。
如果没有节点处于违规状态则处理结束。
如果某个节点有过多元素,则把它分裂为两个节点,每个都有最小数目的元素。
在树上递归向上继续这个处理直到到达根节点,如果根节点被分裂,则建立一个新根节点。
为了使它工作,元素的最小和最大数目典型的必须选择为使最小数不大于最大数的一半。
、
③删除
首先,查找要删除的值。
接着从包含它的节点中删除这个值。
如果没有节点处于违规状态则处理结束。
如果节点处于违规状态则有两种可能情况:
它的兄弟节点,就是同一个父节点的子节点,可以把一个或多个它的子节点转移到当前节点,而把它返回为合法状态。
如果是这样,在更改父节点和两个兄弟节点的分离值之后处理结束。
它的兄弟节点由于处在低边界上而没有额外的子节点。
在这种情况下把两个兄弟节点合并到一个单一的节点中,而且我们递归到父节点上,因为它被删除了一个子节点。
持续这个处理直到当前节点是合法状态或者到达根节点,在其上根节点的子节点被合并而且合并后的节点成为新的根节点。
存储结构
确定数据库的存储结构主要指确定数据的存放位置和存储结构,包括确定关系、索引、日志、备份等的存储安排及存储结构,以及确定系统存储参数的配置。
将日志文件和数据库对象(表、索引等)分别放在不同的磁盘,可以改进系统的性能,提高系统的安全性。
所以,系统应将日志文件和数据文件存放在不同磁盘上。
相关表的物理结构
字段名称
数据类型
…
主键或外键
是否允许为空
备注
书号
char(5)
主键,外键
不允许
)
书名
varchar(30)
不允许
作者
char(10)
.
允许
价格
decimal(5,2)
不允许
出版日期
¥
smalldatetime
允许
出版社
varchar(6)
不允许
"
库存数量
int
不允许
数量>=0
类别
char(5)
?
不允许
表书本物理结构
字段名称
数据类型
主键或外键
】
是否允许为空
备注
供应商代号
varchar(6)
主键
不允许
供应商名称
)
varchar(20)
不允许
联系人
char(10)
不允许
.
电话
varchar(13)
不允许
地址
varchar(30)
?
允许
表供应商物理结构
字段名字
数据类型
主键或外键
;
是否允许为空
备注
工号
varchar(6)
主键
不允许
姓名
>
char(10)
不允许
性别
varchar
(2)
不允许
(
男/女
年龄
varchar(12)
允许
职位
char(5)
!
不允许
电话
char(13)
不允许
/
ID
varchar(18)
不允许
住址
varchar(30)
~
允许
表职员物理结构
字段名字
数据类型
主键或外键
是否允许为空
<
备注
会员号
varchar(6)
主键
不允许
姓名
Char(10)
·
不允许
性别
varchar(12)
不允许
男/女
。
年龄
varchar(12)
允许
入会时间
datetime
`
不允许
折扣
char(5)
不允许
累计消费
?
decimal(5,2)
允许
电话
varchar(12)
不允许
}
表会员物理结构
字段名字
数据类型
主键或外键
是否允许为空
备注
(
销售单号
char(6)
主键
不允许
书号
char(5)
外键
<
不允许
会员号
varchar(6)
外键
允许
折扣
]
decimal(5,2)
不允许
0/
书价
decimal(5,2)
不允许
;
时间
datetime
不允许
数量
int
;
不允许
数量>=1
工号
varchar(6)
外键
不允许
!
总价
decimal(5,2)
不允许
折扣*数量*书价
表销售物理结构
字段名字
;
数据类型
主键或外键
是否允许为空
备注
进货单号
char(6)
主键
不允许
·
供应商代号
varchar(6)
外键
不允许
书号
char(5)
(
外键
不允许
书名
varchar(30)
不允许
{
书价
decimal(5,2)
不允许
时间
smalldatetime
《
不允许
数量
int
不允许
数量>=1
总价
·
decimal(5,2)
不允许
书价*数量
工号
varchar(6)
外键
不允许
,
表进货物理结构
5.数据库实施
数据库建立代码
数据库的创建(sql语句代码)
createdatabasebookstroe
usebookstroe
表的创建
书本信息关系表的创建
createtable书本
(
书号char(5)notnullprimarykey,
书名varchar(30)notnull,
作者char(10),
价格decimal(5,2),
出版社varchar(6)notnull,
:
出版日期smalldatetime,
类别char(5)notnull,
库存数量intcheck(库存数量>=0),
)
供应商信息关系表的创建
createtable供应商
(
#
供应商代号varchar(6)notnullprimarykey,
供应商名字varchar(20)notnull,
联系人char(10)notnull,
电话varchar(13)notnull,
地址varchar(30),
)
员工信息关系表的创建
{
createtable员工
(
工号varchar(6)notnullprimarykey,
姓名Char(10)notnull,
性别varchar
(2)notnullcheck(性别='男'or性别='女'),
年龄varchar(12),
职位char(5)notnull,
电话varchar(13)notnull,
,
IDvarchar(18)notnull,
住址varchar(30),
)
会员信息关系表的创建
createtable会员
(
会员号varchar(6)primarykeynotnull,
\
姓名char(10)notnull,
性别varchar
(2)notnullcheck(性别='男'or性别='女'),
年龄varchar(12),
入会时间datetimenotnull,
折扣char(5)notnullcheck(折扣in('','','')),
累计消费decimal(5,2),
电话varchar(12)notnull,
)
、
销售信息关系表的创建
createtable销售
(
销售单号char(6)notnullprimarykey,
书号char(5)notnull,
会员号varchar(6),
|
折扣decimal(5,2)notnullcheck(折扣in('1','','','')),
书价decimal(5,2)notnull,
工号varchar(6)notnull,
时间datetimenotnull,
销售数量intcheck(销售数量>=1),
销售总价as折扣*销售数量*书价,
foreignkey(会员号)references会员(会员号),
foreignkey(书号)references书本(书号),
:
foreignkey(工号)references员工(工号),
)
进货信息关系表的创建
createtable进货
(
进货单号char(6)notnullprimarykey,
供应商代号varchar(6)notnull,
:
书号char(5)notnull,
书名varchar(30)notnull,
书价decimal(5,2)notnull,
时间smalldatetimenotnull,
进货数量intcheck(进货数量>=1),
工号varchar(6)notnull,
总价as书价*进货数量,
foreignkey(书号)references书本(书号),
?
foreignkey(供应商代号)references供应商(供应商代号),
foreignkey(工号)references员工(工号),
)
各个表的关系图
图数据库关系图
初始数据的输入
数据库以及表创建之后,要输入一些实际的数据。
一下是一些数据输入的代码。
—
向供应商表输入数据
insertinto供应商values('01','a1','张三','上海','12345')
insertinto供应商values('02','a2','李四','杭州','54321')
5.2.1输入数据后的供应商表
向书本信息表输入数据
/
insertinto书本values('11021','光荣日','韩寒','','01','','小说')
insertinto书本values('11022','一个人的好天气','青山七惠','','01','','小说')
5.2.2输入数据后的书本信息表
向员工信息表输入数据
insertinto员工values('001','钱小五','女','25','店员','','30000','杭州')
insertinto员工values('003','王小二','男','21','店长','','30021','杭州')
·
5.2.3输入数据后的员工信息表
向会员信息表输入数据
insertinto会员values('no43','王菲','女','19','','','','')
insertinto会员values('no98','刘朵朵','女','20','','','','')
~
5.2.4输入数据后的会员信息表
向进货关系表输入数据
insertinto进货values('b1','01','11021','光荣日','','','50','001')
insertinto进货values('b2','02','11022','一个人的好天气','','','40','001')
5.2.5输入数据后的进货关系表
]
向销售关系表输入数据
insertinto销售values('s1','11021','no98','','','003','','2')
insertinto销售values('s2','11022','no43','','','003','','3')
输入数据后的销售关系表
视图的建立
1.这个视图是总结了销售情况,当销售输入数据时视图会把卖出的书的数量加起来,那么要看某天的某本书的销售量就很方便了。
代码:
createview销售情况
asselect时间,书号,sum(销售数量)销售数量,sum(销售总价)销售总价
from销售
groupby书号,时间
5.3.1销售情况视图
2.在销售情况视图的基础上建立了书本数量的视图,当销售输入数据时视图里的销售数量会动态的改变。
代码:
createview书本数量
asselect书本.书名,进货.进货数量,销售.销售数量,书本.库存数量
from书本,进货,销售
where书本.书号=进货.书号and进货.书号=销售.书号
5.3.2书本数量视图
触发器的建立
1.输入的员工年龄不可以小于16岁
createtriggertr_员工_inserton员工
forinsertas
declare@年龄varchar(12)
select@年龄=年龄
frominserted
if@年龄<16
begin
raiserror('员工年龄应该大于',16,1)
rollbacktransaction
end
5.3.1输入数据触发触发器后
2.当向进货信息中输入新的书本信息,那么在库存中自动加入该书的书号还有数量。
createtriggerkucun
on进货
afterinsert
asbegininsertinto
书本(书号,库存数量)
select书号,进货数量
frominserted
end
5.3.2进货表出入数据后
6、数据库的试运行
当数据装入数据库以后,进入数据库的试运行阶段,数据库的试运行也称为联合调试。
数据库的试运行对于系统设计的性能检测和评价是十分重要的, 该阶段重点执行对数据库的各种操作,实际测量系统的各种性能,检测是否达到设计要求。
通过该阶段的运行与测试,可以检验数据库系统设计是否合理,运行是否安全、高效。
7、数据库的维护
数据库系统投入正式运行,意味着数据库的设计与开发阶段的基本结束,运行与维护阶段的开始。
数据库的运行和维护是个长期的工作,是数据库设计工作的延续和提高。
三、结论及体会
通过这次的数据库验证体系课,学到了很多实际应用的东西。
平时只是一味的学习理论知识,很少能有亲手实践做系统的时间,这次的课教会了我们怎样去着手做一个系统,怎样团队合作,怎样去一步一步构建一个系统等等。
通过这次做书店销售管理系统,我们知道了在传统模式下利用人工进行图书销售信息管理,存在着较多的缺点,如:
效率底,保密性差,时间一长将产生大量的文件和数据,更不便于查找,更新,维护等。