数据库课程设计
这次暑期实训,因为疫情原因,我未返校,但学院仍然安排了三个实训,这篇随笔主要用于记录数据库课程设计的学习情况。
我选择了超市会员管理系统
设计要求如下
设计内容如下
1.课程设计目的
通过数据库课程设计加深数据库基础理论及基础知识的理解,掌握利用数据库管理系统实现数据管理的基本思路和方法,培养分析问题、解决问题的能力
2.系统信息
- 会员基本信息
包括姓名、性别、编号、电话、家庭住址。 - 会员业务信息
包括套餐类型、套餐期限。 - 会员消费信息
包括消费情况、卡内余额。 - 系统会员信息管理
包括会员基本信息管理、会员业务信息管理。
日程记录如下:
第 一 天 2020年 7月 27日
学生工作日志(主要包括:工作要点、出现问题、解决办法、结果和心得体会等)
1.了解系统的应用背景,了解开发要求,进行系统信息分析、系统需求分析、功能需求分析
2.功能性需求分析时纠结要不要会员卡管理,本来觉得是另一个系统(支付系统)的功能,但反过来想想这个功能还是有必要的
3.查阅资料,得知会员必不可少得有会员卡
4.遇到难题时多查阅资料
第 二 天 2020年 7 月 28日
学生工作日志(主要包括:工作要点、出现问题、解决办法、结果和心得体会等)
1.进行概念结构设计,画出数据流图,实体间的联系
2.忘记了逻辑关系图是什么,怎么画
3.问同学,和同学探讨
4.逻辑关系图一般在数据库设计时通过软件自动生成,这样准确又方便
第 三 天 2020年 7月 29日
学生工作日志:(主要包括:工作要点、出现问题、解决办法、结果和心得体会等)
1.画出初步E-R图,合并成为基本E-R图
2.合并时出现问题,冗余和属性冲突没有很好的解决,实体属性分析不完全,导致后来要加上去
3.看课本相关例子归纳总结
4.这种工作要一步一步地做好,要不然后来补漏麻烦
指导教师签字
第 四 天 2020年 7月 30 日
学生工作日志(主要包括:工作要点、出现问题、解决办法、结果和心得体会等)
1.将E-R图转换为关系模式,并进行各个数据表的表结构设计
2.设计过程中没有考虑到需要满足3NF,导致得重新设计关系模式
3.按照要求重新设计
4.得按照要求去做,要不然会出错
第 五 天 2020年 7月 31日
学生工作日志:(主要包括:工作要点、出现问题、解决办法、结果和心得体会等)
1.创建表、视图,设计完整性约束等
2.创建表的时候直接将Excel表导入到了SQL SERVER导致出现一些问题
3.重新手动创建表
4.当出现错误时还是采用最稳妥的方法解决比较好
数据库设计文档
目录
1.系统设计的目的与意义 2
2.系统需求分析 3
2.1 功能需求 3
2.2系统功能结构 3
2.3数据流图 4
3.概念结构设计 8
3.1实体间的联系 8
3.2系统局部E-R图 8
3.3 系统全局E-R图 11
4.逻辑结构设计 12
4.1 将E-R图转换为关系模式 12
4.2逻辑关系图 12
4.3各个数据表的表结构设计 12
5. 系统功能实现 15
5.1建表 15
5.2创建视图 17
5.3存储过程 17
5.4创建触发器 18
5.5备份数据库 18
5.6 数据库还原 18
6.总结 19
1.系统设计的目的与意义
超市会员管理是超市日常管理的重要一环,它帮助超市存储及管理会员的基本信息、管理会员卡、会员业务及会员消费信息,是一套比较完备的管理工具,极大地提高了超市会员管理的效率。增加了超市与顾客之间的交流,提升了服务质量,在很大程度上帮助了超市管理者对超市的掌握与管理 。
2.系统需求分析
2.1 功能需求
1.会员基本信息,包括用户编号、姓名、性别、电话、家庭住址
2.会员业务信息,包括会员积分、会员折扣、套餐类型、套餐期限
3.会员消费信息,包括商品编号、数量、种类、价格,卡内余额
4.系统会员信息,包括用户编号,密码、最近使用时间、地点、异常信息
5.会员卡的申请、管理、挂失、注销、补办。
2.2系统功能结构
通过对系统功能的分析,画出如下结构图。
图2.1超市会员管理系统功能结构图
通过上图的功能分析,把系统划分为5个模块:
- 会员基本信息,主要实现会员基本信息的录入、更新、删除、查询;
- 会员业务信息,主要实现会员积分、会员折扣、套餐类型、套餐期限的查询和更新;
- 会员卡管理,主要实现会员卡的申请、更改信息、补办、挂失、注销;
- 会员消费管理,主要实现存款、商品信息、数量、价格、种类、卡内余额的录入和更新;
- 系统会员信息管理,主要实现用户编号、密码、最近一次使用时间地点和异常提醒
- 商品信息管理,商品的出入库、单价、种类、数量管理
2.3数据流图
图2.2顶层数据流图
3.概念结构设计
3.1实体间的联系
1.一个会员只能办理一张会员卡
2.一个会员消费得到多个消费信息
3.一张会员卡可以查询多个消费信息
4.一张会员卡可以查询一个业务信息
3.2系统局部E-R图
图3.1会员基本信息E-R图
图3.2会员业务信息E-R图
图3.3会员卡E-R图
图3.4会员消费E-R图
图3.5会员联系E-R图
图3.6会员卡联系E-R
图3.7商品信息E-R图
3.3系统全局E-R图
图3.8系统E-R图
4.逻辑结构设计
4.1将E-R图转换为关系模式
1.会员(用户编号,姓名,性别,电话,家庭住址,会员卡号,密码)主码:用户编号,外码:会员卡号
2.消费信息(消费编号,卡内余额,商品条形码,消费时间)主码:消费编号,外码:商品条形码
3.业务信息(会员积分,套餐类型,套餐期限,会员折扣)主码:套餐类型
4.会员卡(会员卡号,用户编号,会员卡状态)主码:会员卡号,外码:用户编号
5.商品信息(商品条形码,单价,数量,种类)主码:商品条形码
6.管理员信息(管理员账号,管理员密码)主码:管理员账号
4.2逻辑关系图
图4.1逻辑关系图
4.3各个数据表的表结构设计
表4.2会员信息表
表4.3消费信息表
表4.4业务信息表
表4.5会员卡表
表4.6商品信息表
表4.7管理员信息表
5.系统功能实现
5.1建表
图5.1业务信息表Business
图5.2会员基本信息表Info
图5.3会员卡表Card
图5.4管理员信息表Mana
图5.5商品信息表Product
图5.6购物信息表Shopping
5.2创建视图
图5.7VIEW_INFO视图
图5.8VIEW_MONEYTABLE视图
图5.9VIEW_PRODUCTTYPE视图
5.3存储过程
Create Procedure Pro_money
@Person_ID_in char(10),
@State_out char(8) output
As select @State_out=State from Card,Info
where Card.Person_ID=Info.Person_ID
and Info.Person_ID=@Person_ID_in
通过会员编号查看会员卡信息
Create Procedure Pro_ID
@Name_in varchar(10),@Tel_in char(16),
@Card_ID_out char(20),@Person_ID_out char(10)
as select @Card_ID_out=Info.Card_ID,@Person_ID_out=Person_ID
from Info
where Name=@Name_in and Tel=@Tel_in
通过姓名和电话查询会员编号和会员卡号
Create Procedure Pro_shopping
@Pro_code_in char(20),
@Con_date_out char(20)
as select @Con_date_out=Con_date
from Shopping
where @Pro_code_in=Pro_code
通过商品条形码查看购物时间
Create Procedure Pro_BU
@Pack_type_in char(8),
@Mem_inte_out int
as select @Mem_inte_out=Mem_inte
from Business
where Pack_long=@Pack_type_in
通过套餐类型查询套餐积分
Create Procedure Pro_Product
@Pro_code_in char(20),
@Price_out char(10),@Amount_out int
as select @Price_out=Price,@Amount_out=Amount
from Product
where Pro_code=@Pro_code_in
通过商品条形码查询数量和单价
5.4创建触发器
create trigger pwd_info_tri
on Info for insert,update
as declare @pwd_read char(10)
select @pwd_read=Pwd from inserted
if @pwd_read>=5 and @pwd_read<=10
begin
print'密码符合要求!'
return
end
print'密码位数不在5~10之间,请重新输入!'
rollback Transaction
触发器限制密码的位数在5~10之间
create trigger tel_info_tri
on Info for update as if update(Tel)
begin
declare @tel_new char(16),@tel_old char(16),@tel_cnt int
select @tel_old=Tel from deleted
select @tel_cnt=count(*) from Info where Tel=@tel_old
if @tel_cnt<>0
Rollback Transaction
End
触发器限制修改为重复的电话号码
create trigger money_info_tri
on Shopping for update as if update(Money)
begin
declare @money_read int
select @money_read=Money from inserted
if @money_read<0
print'余额不足!'
return
end
Rollback Transaction
触发器限制卡内余额,余额不足会进行提示
create trigger Amount_tri
on Product for insert
As declare @amount_read int
select @amount_read=Amount from inserted
if @amount_read>50
print'数量大,请核实!'
触发器提示商品数量,当大于50个时会提示
create trigger tri_dc
on Info for delete
as declare @Person_ID_del char(8)
select @Person_ID_del=Person_ID from deleted
delete from Card where Person_ID=@Person_ID_del
级联触发器删除某个用户信息时同时删除会员卡表的的相关信息
5.5备份数据库
BACKUP DATABASE 061
to disk='C:\彭怀龙数据库\fullbackup_061'
with init
图5.1数据库备份
5.6数据库还原
RESTORE DATABASE 061
FROM disk='C:\彭怀龙数据库\fullbackup_061'
with REPLACE
图5.2数据库恢复
6.总结
紧张而又充实的数据库课程设计终于完成了。虽然开始毫无头绪,但在同学的帮助和自己的努力下还是比较圆满的完成了这次课程设计。从此次课程设计中我也收获了不少。这次课程设计使我熟悉了数据库系统设计的整体步骤。系统设计大体可分为需求分析、概念设计、逻辑设计、物理设计、数据库的实施及调试测试六大步骤。在具体的实施阶段中,表的建立及表间关系最为重要,其实这也是需求分析重要性的体现。这次课程设计加深了我对数据库系统概论相关知识和SQL Server 相关功能的理解。但由于缺乏知识的整合,所以在逻辑设计上还是遇到了困难,但在自己查阅资料和与同学讨论的情况下,最终问题迎刃而解。
可能是由于长时间在家导致我的学习心态有些差,以至于做的并不太理想,老师把我骂得非常惨。哎,心里好不舒服,但不管怎么说还是我自己的问题,今后要调整心态,努力学习,毕竟也大三了,别再像之前那样浑浑噩噩了。加油!2020年8月24日记