实践报告
学号 姓名 班级
2012.6
内容要求:
1 数据库功能描述
超市管理系统是一个超市不可缺少的部分,它的内容对于超市的决策者和管理者来说都至关重要,所以超市管理系统应该能够为用户提供充足的信息和快捷的销售,查询手段。但一直以来人们使用传统人工的方式管理文件信息,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。
超市销售管理系统是为帮助企业有效提高销售管理而开发的。该数据库包括商品、职员、销售信息、仓库等模块,并提供了查询、修改、添加、删除等功能。销售管理系统能简化企业在销售管理方面的复杂性,和减少在管理上的庞大开销。随着计算机行业的飞速发展,人类已经进入;了信息时代,社会中的各个单位、部门也陆续开始使用软件化的管理模式,由于他具有方便、准确、快速、灵活的特点,使得在管理上实现了自动化、一体化、多元化的目标,迅速准确地完成各种工作,大大的提高了企业的销售管理效率。
2 数据库设计
2.1 系统需求分析
顶层图
0层
仓库管理层
销售管理层
人事管理层
(1) 商品清单
| 中文字段名 | 字段类型 | 长度 | 主键/外键 | 字段值约束 |
| 商品号 | char | 13 | P | NOT NULL |
| 名称 | char | 10 | NOT NULL | |
| 进价 | smallmoney | 10 | NOT NULL | |
| 保质期 | smalldatetime | 10 | NOT NULL | |
| 生产日期 | smalldatetime | 10 | NOT NULL | |
| 仓库号 | char | 10 | F | NOT NULL |
| 存量 | char | 10 | NOT NULL | |
| 基础售价 | smallmoney | 10 | NOT NULL |
| 中文字段名 | 字段类型 | 长度 | 主键/外键 | 字段值约束 |
| 员工号 | char | 13 | P | NOT NULL |
| 姓名 | char | 10 | NOT NULL | |
| 性别 | char | 2 | NOT NULL | |
| 职称 | char | 10 | NOT NULL | |
| 年龄 | char | 2 | ||
| 工资 | smallmoney | 10 | NOT NULL | |
| 电话 | char | 11 | NOT NULL |
说明:此表存放员工信息
(3)会员清单
| 中文字段名 | 字段类型 | 长度 | 主键/外键 | 字段值约束 |
| 会员号 | char | 13 | P | NOT NULL |
| 姓名 | char | 10 | NOT NULL | |
| 身份证号 | char | 18 | NOT NULL | |
| 积分 | int | 10 | NOT NULL | |
| 消费金额 | smallmoney | 10 | NOT NULL | |
| 余额 | smallmoney | 10 | NOT NULL |
(4)供应清单
| 中文字段名 | 字段类型 | 长度 | 主键/外键 | 字段值约束 |
| 商品号 | char | 13 | P/F | NOT NULL |
| 供应商号 | char | 20 | F | NOT NULL |
| 数量 | int | 20 | NOT NULL | |
| 单价 | smallmoney | 10 | NOT NULL | |
| 日期 | smalldatetime | 10 | NOT NULL | |
| 员工号 | char | 13 | P | NOT NULL |
(5)销售清单
| 中文字段名 | 字段类型 | 长度 | 主键/外键 | 字段值约束 |
| 收银台号 | char | 10 | P | NOT NULL |
| 商品号 | char | 13 | P/F | NOT NULL |
| 数量 | int | 10 | NOT NULL | |
| 日期 | smalldatetime | 10 | NOT NULL | |
| 会员号 | char | 13 | F | NOT NULL |
(6)摆放清单
| 中文字段名 | 字段类型 | 长度 | 主键/外键 | 字段值约束 |
| 货架号 | char | 10 | P | NOT NULL |
| 商品号 | char | 13 | P/F | NOT NULL |
| 数量 | int | 10 | NOT NULL |
(7)打折清单
| 中文字段名 | 字段类型 | 长度 | 主键/外键 | 字段值约束 |
| 折扣号 | char | 8 | P | NOT NULL |
| 商品号 | char | 13 | P/F | NOT NULL |
| 售价 | smallmoney | 10 | NOT NULL |
(8)职守清单
| 中文字段名 | 字段类型 | 长度 | 主键/外键 | 字段值约束 |
| 员工号 | char | 13 | P/F | NOT NULL |
| 收银台号 | char | 10 | P/F | NOT NULL |
| 时间段 | char | 20 | NOT NULL |
(9)供应商清单
| 中文字段名 | 字段类型 | 长度 | 主键/外键 | 字段值约束 |
| 供应商号 | char | 20 | P | NOT NULL |
| 供应商名称 | char | 20 | NOT NULL | |
| 电话 | char | 11 | NOT NULL |
说明:此表存放供应商信息
(10)货架清单
| 中文字段名 | 字段类型 | 长度 | 主键/外键 | 字段值约束 |
| 货架号 | char | 8 | P | NOT NULL |
| 地址 | char | 20 | NOT NULL | |
| 员工号 | char | 13 | F | NOT NULL |
说明:此表存放货架分布及负责人信息
(11)仓库清单
| 中文字段名 | 字段类型 | 长度 | 主键/外键 | 字段值约束 |
| 仓库号 | char | 10 | P | NOT NULL |
| 地址 | char | 20 | NOT NULL | |
| 员工号 | char | 13 | F | NOT NULL |
(12)收银台清单
| 中文字段名 | 字段类型 | 长度 | 主键/外键 | 字段值约束 |
| 收银台号 | char | 10 | P | NOT NULL |
| 台内现金 | smallmoney | 10 | NOT NULL | |
| 入台现金 | smallmoney | 10 | NOT NULL |
(13)折扣清单
| 中文字段名 | 字段类型 | 长度 | 主键/外键 | 字段值约束 |
| 折扣号 | char | 8 | P | NOT NULL |
| 折扣额度 | smallmoney | 10 | NOT NULL |
(14)部门清单
| 中文字段名 | 字段类型 | 长度 | 主键/外键 | 字段值约束 |
| 部门名称 | char | 10 | P | NOT NULL |
| 人数 | char | 10 | NOT NULL | |
| 主管 | char | 13 | F | NOT NULL |
(15)任职清单
| 中文字段名 | 字段类型 | 长度 | 主键/外键 | 字段值约束 |
| 员工号 | char | 13 | P/F | NOT NULL |
| 部门 | char | 10 | P/F | NOT NULL |
文件条目
(1)文件名:商品清单
组成:{商品号+仓库号+存量+生产日期+保质日期+基础售价+进价}
组织:按商品编号递增排列
(2)文件名:员工清单
组成:{职工号+姓名+性别+职称+年龄+工资+电话}
组织:按职工编号递增排列
(3)文件名:会员清单
组成:{会员号+姓名+身份证号+积分+消费金额+余额}
组织:按会员号递增排列
(4)文件名:仓库清单
组成:{仓库号号+地址+员工号}
组织:按仓库号递增排列
(5)文件名:销售清单
组成:{商品号+收银台号+日期+数量+会员号}
组织:按收银台号递增排列
(6)文件名:供应商清单
组成:{供应商号+供应商名称+电话}
组织:按供应商号递增排列
(7)文件名:部门清单
组成:{部门名称+人数+主管}
组织:按部门名称排序
加工说明
(1)加工名:1:查询
加工逻辑:根据要查询的库存信息,检索出库存信息明细表
输入流:库存信息查询,发出库存信息请求
输出流:库存信息清单,进货信息请求
(2)加工名:1:更新
根据进货信息或销售信息更新库存信息
输入流:已进货信息,销售信息
输出流:发出库存检索请求
(3)加工名:2:查询
根据要查询的销售信息,检索出销售信息明细表
输入流:销售信息查询
输出流:销售清单,销售单
(4)加工名:2:更新
加工逻辑:根据销售信息更细销售清单
输入流:前台销售信息,库存信息
输出流:更新库存清单
(5)加工名:3:查询
加工逻辑:根据要查询的进货信息,检索出进货信息明细表
输入流:进货信息查询,发出进货/采购清单查询
输出流:库存信息清单,已进货信息,新供货商信息,进货单信息清单,采购单,进货信息请求,进货/采购清单检索结果
(6)加工名:3:更新
加工逻辑:根据进货信息更新进货清单
输入流:进货信息请求,进货单
输出流:发出进货/采购清单查询
(7)加工名:4:查询
加工逻辑:根据输入要查询的员工信息或供货商信息,检索出相应的结果
输入流:员工信息查询,供货商信息查询,发出员工/供货商清单查询
输出流:已有供货商信息,供货商信息清单,员工信息清单,员工/供货商清单检索结果
(8)加工名:4:更新
加工逻辑:根据输入的员工信息或新供货商信息更新相应的员工清单或供货商清单
输入流:员工信息,新供货商信息清单,员工/供货商清单检索结果
2.2 数据库概念结构设计
全局E-R图
2.3 数据库逻辑结构设计
商品(商品号,名称,进价,保质期,生产日期,基础售价)
摆放(商品号,货架号,数量)
供应(商品,供应商,数量,日期,金额)
销售(商品号,收银台号,日期,数量,会员)
存贮(商品号,仓库号,数量)
打折(商品号,折扣,售价)
员工(员工号,姓名,性别,职称,年龄,工资,电话)
打理(员工号,货架,时间)
管理(员工号,仓库)
职守(员工号,收银台号,时间段)
直属(员工号,部门)
采购(员工号,供应商,日期)
3 数据库实施
3.1 数据库架构图
3.2 数据表生成脚本初始数据录入脚本
create table 商品(
商品号 char(13) constraint 商品_prim primary key,
名称 char(10),
进价 smallmoney,
基础售价 smallmoney,
保质期 smalldatetime,
生产日期 smalldatetime,
仓库号 char(10) constraint 仓库_商品_fore foreign key references 仓库(仓库号),
存量 char(10),
)
create table 员工(
员工号 char(13) constraint 员工_prim primary key,
姓名 char(10),
性别 char(2) constraint 员工_性别_chk check(性别='男'or 性别='女'),
职称 char(10),
年龄 char(2) constraint 员工_年龄_chk check(年龄>=16 and 年龄<=60),
工资 smallmoney,
电话 char(11),
)
create table 会员(
会员号 char(13) constraint 会员_prim primary key,
姓名 char(10),
身份证号 char(18),
积分 int,
消费金额 smallmoney,
余额 smallmoney,
)
create table 供应(
商品号 char(13) constraint 商品_供应_fore foreign key references 商品(商品号),
供应商号 char(20) constraint 供应商_供应_fore foreign key references 供应商(供应商号),
数量 int,
单价 smallmoney,
日期 smalldatetime,
员工号 char(13) constraint 员工_供应_fore foreign key references 员工(员工号),
constraint 供应_prim primary key(商品号,员工号),
)
create table 销售(
商品号 char(13) constraint 商品_销售_fore foreign key references 商品(商品号),
收银台号 char(10) constraint 收银台_销售_fore foreign key references 收银台(收银台号),
日期 smalldatetime,
数量 int,
会员号 char(13) constraint 会员号_销售_fore foreign key references
会员(会员号),
constraint 销售_prim primary key(商品号,收银台号),
)
create table 摆放(
商品号 char(13) constraint 商品_摆放_fore foreign key references 商品(商品号),
货架号 char(8) constraint 货架_摆放_fore foreign key references 货架(货架号),
数量 int,
constraint 摆放_prim primary key(商品号,货架号),
)
create table 打折(
商品号 char(13) constraint 商品_打折_fore foreign key references 商品(商品号),
折扣号 char(8) constraint 折扣_打折_fore foreign key references 折扣(折扣号),
售价 smallmoney,
constraint 打折_prim primary key(商品号,折扣号),
)
create table 值守(
员工号 char(13) constraint 员工_值守_fore foreign key references 员工(员工号),
收银台号 char(10) constraint 收银台_值守_fore foreign key references 收银台(收银台号),
时间段 char(20),
constraint 值守_prim primary key(员工号,收银台号),
)
create table 供应商(
供应商号 char(20) constraint 供应商_prim primary key,
供应商名称 char(20),
电话 char(11),
)
create table 货架(
货架号 char(8) constraint 货架_prim primary key,
地址 char(20),
员工号 char(13) constraint 员工_货架_fore foreign key references 员工(员工号),
)
create table 仓库(
仓库号 char(10) constraint 仓库_prim primary key,
地址 char(20),
员工号 char(13) constraint 员工_仓库_fore foreign key references 员工(员工号),
)
create table 收银台(
收银台号 char(10) constraint 收银台_prim primary key,
台内现金 smallmoney,
入台现金 smallmoney,
)
create table 折扣(
折扣号 char(8) constraint 折扣_prim primary key,
折扣额度 smallmoney,
)
create table 部门(
部门名称 char(10) constraint 部门_prim primary key,
人数 int,
主管 char(13) constraint 主管_部门_fore foreign key references 员工(员工号),
)
create table 任职(
员工号 char(13) constraint 员工_任职_fore foreign key references 员工(员工号),
部门 char(10) constraint 部门_任职_fore foreign key references 部门(部门名称),
constraint 任职_prim primary key(员工号,部门),
)
3.3始数据录入脚本
员工表:
insert into 员工(员工号,姓名,性别,职称,年龄,工资,电话)
values('0001','张三','男','普通员工','25',4500,'55')
insert into 员工(员工号,姓名,性别,职称,年龄,工资,电话)
values('0002','李四','男','普通员工','28',4500,'54')
insert into 员工(员工号,姓名,性别,职称,年龄,工资,电话)
values('0003','王五','女','普通员工','30',4500,'58')
insert into 员工(员工号,姓名,性别,职称,年龄,工资,电话)
values('0004','张明','男','普通员工','26',4500,'95')
insert into 员工(员工号,姓名,性别,职称,年龄,工资,电话)
values('0005','马佳','女','普通员工','32',4500,'98')
insert into 员工(员工号,姓名,性别,职称,年龄,工资,电话)
values('0006','王丽','女','管理员','36',5000,'85')
insert into 员工(员工号,姓名,性别,职称,年龄,工资,电话)
values('0007','田文','男','管理员','35',5000,'55')
insert into 员工(员工号,姓名,性别,职称,年龄,工资,电话)
values('0008','杨哲','男','管理员','34',5000,'55')
insert into 员工(员工号,姓名,性别,职称,年龄,工资,电话)
values('0009','玛丽','女','管理员','38',5000,'55')
insert into 员工(员工号,姓名,性别,职称,年龄,工资,电话)
values('0010','张伟','男','管理员','32',5000,'55')
insert into 员工(员工号,姓名,性别,职称,年龄,工资,电话)
values('0011','张宁','男','管理员','31',5000,'55')
insert into 员工(员工号,姓名,性别,职称,年龄,工资,电话)
values('0012','李贵','女','管理员','39',5000,'55')
insert into 员工(员工号,姓名,性别,职称,年龄,工资,电话)
values('0013','高雄','男','管理员','32',5000,'55')
insert into 员工(员工号,姓名,性别,职称,年龄,工资,电话)
values('0014','李明伟','男','管理员','41',5000,'55')
仓库:
insert into 仓库
values('01','A区5号','0006')
insert into 仓库
values('02','A区8号','0007')
insert into 仓库
values('03','B区3号','0010')
insert into 仓库
values('04','B区1号','0011')
商品:
insert into 商品
values('11111','奶粉',200,300,'2011/05/19','2013/05/19','01','10t')
insert into 商品
values('11112','洗发水',30,60,'2011/11/23','2015/11/19','02','500')
insert into 商品
values('11113','干红',200,500,'2011/01/20','2013/01/19','03','100t')
insert into 商品
values('11114','刀具',200,360,'2011/05/19','2019/05/19','04','600')
insert into 商品
values('11115','干电池',5,10,'2011/06/21','2014/05/19','02','90t')
供应商:
insert into 供应商
values('4321','吉祥食品公司','66')
insert into 供应商
values('4322','红星酒厂','66')
insert into 供应商
values('4323','清扬日用品公司','66')
insert into 供应商
values('4324','士达工业','66')
insert into 供应商
values('4325','完美刀具公司','66')
供应:
insert into 供应
values('11111','4321','20t',200,'2011/7/20','0006')
insert into 供应
values('11112','4323','500',30,'2011/12/2','0007')
insert into 供应
values('11113','4322','100t',200,'2011/5/20','0010')
insert into 供应
values('11114','4325','600',200,'2011/7/20','0011')
insert into 供应
values('11115','4324','90t',5,'2011/8/20','0008')
会员:
insert into 会员
values('00001','张三','22','500',800,200)
insert into 会员
values('00002','李四','33','3000',430,500)
insert into 会员
values('00003','王五','55','460',504,256)
insert into 会员
values('00004','马奇','66','4512',120,39)
insert into 会员
values('00005','赵夏','77','8000',124,6981)
部门:
insert into 部门
values('销售部','5','0012')
insert into 部门
values('采购部','5','0011')
insert into 部门
values('后勤部','4','0006')
insert into 部门
values('人事部','5','0009')
收银台:
insert into 收银台
values('01',5000,3020)
insert into 收银台
values('02',4200,2301)
insert into 收银台
values('03',3250,2310)
insert into 收银台
values('04',12,368)
insert into 收银台
values('05',1563,4820)
货架:
insert into 货架
values('01','A区1号','0010')
insert into 货架
values('02','A区2号','0011')
insert into 货架
values('03','B区1号','0012')
insert into 货架
values('04','B区2号','0013')
insert into 货架
values('05','C区1号','0014')
折扣
insert into 折扣
values('01',10)
insert into 折扣
values('02',20)
insert into 折扣
values('03',50)
打折:
insert into 打折
values('11111','02',280)
insert into 打折
values('11113','03',450)
insert into 打折
values('11114','01',350)
insert into 打折
values('11112','01',50)
任职:
insert into 任职
values('0001','销售部')
insert into 任职
values('0002','销售部')
insert into 任职
values('0003','销售部')
insert into 任职
values('0004','销售部')
insert into 任职
values('0005','销售部')
insert into 任职
values('0006','后勤部')
insert into 任职
values('0007','后勤部')
insert into 任职
values('0010','后勤部')
insert into 任职
values('0011','后勤部')
insert into 任职
values('0006','采购部')
insert into 任职
values('0007','采购部')
insert into 任职
values('0010','采购部')
insert into 任职
values('0011','采购部')
insert into 任职
values('0008','采购部')
insert into 任职
values('0006','采购部')
insert into 任职
values('0009','人事部')
insert into 任职
values('0012','人事部')
insert into 任职
values('0013','人事部')
insert into 任职
values('0014','人事部')
insert into 任职
values('0001','人事部')
值守:
insert into 值守
values('0001','01','8点-12点')
insert into 值守
values('0002','02','8点-12点')
insert into 值守
values('0003','03','8点-12点')
insert into 值守
values('0004','04','8点-12点')
insert into 值守
values('0005','05','8点-12点')
insert into 值守
values('0001','05','13点-20点')
insert into 值守
values('0002','04','13点-20点')
insert into 值守
values('0003','02','13点-20点')
insert into 值守
values('0004','01','13点-20点')
insert into 值守
values('0005','03','13点-20点')
摆放:
insert into 摆放
values('11111','01','100')
insert into 摆放
values('11112','03','200')
insert into 摆放
values('11113','02','50')
insert into 摆放
values('11114','05','20')
insert into 摆放
values('11115','04','500')
insert into 摆放
values('11113','01','20')
销售:
insert into 销售
values('11111','01','2012/5/23','3','00001')
insert into 销售
values('11111','02','2012/5/23','1','00005')
insert into 销售
values('11111','03','2012/5/23','1','00002')
insert into 销售
values('11111','04','2012/5/23','2','00004')
insert into 销售
values('11112','01','2012/5/23','1','00003')
insert into 销售
values('11112','02','2012/5/23','2','00001')
insert into 销售
values('11112','05','2012/5/23','2','00003')
insert into 销售
values('11113','03','2012/5/23','2','00005')
insert into 销售
values('11114','05','2012/5/23','2','00004')
insert into 销售
values('11115','02','2012/5/23','1','00002')
4相关问题
(0)部分测试:查询员工工资
Select 员工号,姓名,工资* from员工 whrer(员工号=’0001’)
查询销售记录
Select * from打折,销售 whrere(打折.商品号=销售.商品号)
查询供应商的商品存量
Select 仓库号,库存 from供应商,商品 whrere(供应商.商品号=商品.商品号)and(商品号=‘11115’)
(1)建立合适索引及应该注意问题
索引必须在录入数据之后建立索引
CREATE CLUSTER INDEX <引索名字>ON <表名>
超市商品过多,需要建立聚集索引
CREATE UNIQNUE INDEX <引索名字>ON <表名>
部门人员建立唯一索引
(2)建立合适视图
管理员拥有最高权限,可查询所有表
商品表,仓库表,部门表可被员工查询全部视图
员工表可被员工查询自己的所有信息,查询其他人除了工资等隐私的其他信息
会员表可被会员查询所有信息
(3)数据库系统备份与恢复
在管理员上传,修改时,同时复制一份脚本传输到另外一张盘
(4)系统崩溃恢复
从留下来的脚本还原数据
(5)硬件损坏。
如硬盘损坏,更新硬盘,然后根据备份恢复数据
(6)数据库管理员任务。
日常维护数据
4 参考文献
萨师煊,王珊。数据库系统概论,背景:中国水利水电出版社,2003下载本文