食堂管理系统数据库设计.docx
《食堂管理系统数据库设计.docx》由会员分享,可在线阅读,更多相关《食堂管理系统数据库设计.docx(22页珍藏版)》请在冰豆网上搜索。
食堂管理系统数据库设计
2012年3月14日
课题:
数据库设计(食堂管理系统)
目的和要求:
1.掌握数据库需求分析
2.掌握数据库概念结构设计与逻辑结构设计方法
3.掌握创建数据库、表、约束、视图、存储过程、触发器的方法
4.掌握权限的设置方法
5.掌握备份与恢复的方法
操作内容:
设计数据库
课题:
食堂管理系统
一、数据需求分析:
在搜集资料和分析用户应用要求的基础上,形成该数据库系统的应用需求说明;
二、涉及到的表:
通过需求分析确定表结构。
1、分几个表
2、表中需哪些列,列名、数据类型、长度;
3、可否为空值;(表示未知、不可用或将在以后添加数据)
4、需使用的约束:
主键,外键,默认值,check,唯一值约束。
三、创建视图
四、存储过程
五、触发器
六、权限设置
七、数据备份与恢复设计
一、
需求分析
1.系统分析
随着时代的进步,如今各个服务行业也都逐渐发展壮大起来,尤其是食堂服务业,其在服务范围、服务数量和服务内容上都有着非常大的膨胀幅度,因此如何对如此复杂而频繁的服务活动进行管理就属于“食堂管理”的内容。
其主要包括:
职员资料管理、物品管理、消费内容管理、席位管理、客户评价管理,工资管理等,它是现代食堂管理中的一个重要组成部分。
2.功能需求分析
“食堂管理”包括很多项目,以前食堂管理人员要记录大量的用户消费内容,然后通过计算器进行一系列的加减乘除运算,最后得出一位顾客的“应付金额”,这样做的效率和准确度可想而知。
如果使用计算机来实现对食堂服务业的智能管理,从选择菜、酒水、主食,到计算“应付金额”,最后到打印消费内容,计算机都可以很准确、很快捷地进行处理,这些都是“食堂管理系统”的功能。
一个完善的“食堂管理系统”可以很好地管理食堂服务业的各项内容,这样不仅能更好地服务顾客,而且可以为经营者创造更大的利润。
针对每部分的具体功能我们又做了如下的详细分析:
二、
涉及的表
职员资料
属性
类型
大小
是否为空
约束
职员编号
char
6
否
主键。
6位数
姓名
varchar
20
否
职位
varchar
20
否
性别
Char
2
否,默认“男”
男或女
民族
varchar
10
否,默认“汉族”
籍贯
varchar
10
否,默认“广东”
出生日期
datetime
否
身份证号
char
18
否
婚姻状况
char
4
否,默认“未婚”
未婚或已婚
家庭地址
varchar
30
否
联系电话
varchar
11
否
备注
varchar
30
是
物品表
属性
类型
大小
是否为空
约束
物品编号
char
6
否
主键。
6位数
物品名字
varchar
20
否
所属类型
char
4
否,默认“主食”
主食、酒水或其他
价格/元
int
否
是否售馨
char
2
否,默认“否”
是或否
品牌
varchar
30
是
备注
varchar
30
是
席位表
属性
类型
大小
是否为空
约束
席位号
char
6
否
主键,6位数
负责人编号
外键
人数
int
否,默认“8”
1至20
状态
char
4
否,默认“空闲”
正在使用,预定或空闲
日期
datetime
否
备注
varchar
30
是
销售记录
属性
类型
大小
是否为空
约束
类型
外键
数量
int
否
方式
varchar
10
否,默认“现场”
现场、预定或外卖
日期
datetime
否
金额/元
int
否
备注
varchar
30
是
评价情况
属性
类型
大小
是否为空
约束
职员编号
外键
评价级别
char
4
否,默认“优”
优、良、一般、差
日期
datetime
否,默认当天
备注
varchar
30
是
工资表
属性
类型
大小
是否为空
约束
职员编号
外键
工资/元
int
否
日期
datetime
否
备注
varchar
30
是
SQL命令
创建数据库
createdatabase食堂管理系统
onprimary(name=stglxt_data,filename='e:
\stglxt_data.mdf')
logon(name=stglxt_log1,filename='e:
\stglxt_log.ldf')
创建表
createtable职员资料
(职员编号char(6)notnullprimarykey
check(职员编号like'[0-9][0-9][0-9][0-9][0-9][0-9]'),
姓名varchar(20)notnull,
职位varchar(20)notnull,
性别char
(2)notnullcheck(性别='男'or性别='女')default'男',
民族varchar(8)nulldefault'汉族',
出生日期datetimenotnull,
身份证号码char(18)notnullunique,
婚姻状况char(4)notnullcheck(婚姻状况='已婚'or婚姻状况='未婚')default'未婚',
联系电话varchar(11)notnullunique,
备注varchar(30)
)
createtable物品表
(物品编号char(6)notnullprimarykey,
物品名字varchar(20)notnull,
所属类型char(4)notnullcheck(所属类型='主食'or所属类型='酒水'or所属类型='其他')default'主食',
价格moneynotnull,
是否售馨char
(2)notnullcheck(是否售馨='是'or是否售馨='否')default'否',
品牌varchar(30),
备注varchar(30)
)
createtable席位表
(席位号char(6)notnullprimarykey,
负责人编号char(6)notnullforeignkeyreferences职员资料(职员编号)onupdatecascadeondeletecascade,
人数intnotnull,
状态char(4)notnullcheck(状态='使用'or状态='预定'or状态='空闲')default'空闲',
日期datetimenotnull,
备注varchar(30)
)
createtable销售记录
(类型char(4)notnullcheck(类型='主食'or类型='酒水'or类型='其他')default'主食',
数量intnotnull,
方式char(4)notnullcheck(方式='现场'or方式='预定'or方式='外卖')default'现场',
金额moneynotnull,
日期datetimenotnull,
备注varchar(30)
)
createtable评价情况
(职员编号char(6)notnullforeignkeyreferences职员资料(职员编号)onupdatecascadeondeletecascade,
评价级别char(4)notnullcheck(评价级别in('优','良','一般','差'))default'优',
日期datetimenotnulldefaultgetdate(),
备注varchar(30)
)
createtable工资表
(职员编号char(6)notnullforeignkeyreferences职员资料(职员编号)onupdatecascadeondeletecascade,
工资moneynotnull,
日期datetimenotnull,
备注varchar(30)
)
所有表的截图如下:
三、
视图设计
1.为了方便查看职员的评价与对应的职员,所以要建一个“职员信息与评价表”,以显示职员的评价的同时,还可以看到该职员的一些个人信息。
createview职员信息与评价表
as
select姓名,性别,职位,联系电话,评价级别,日期
from职员资料a,评价情况b
wherea.职员编号=b.职员编号
2.为了方便查看物品的销售记录以及物品的信息,所以建立一个“物品信息与销售情况表”。
createview物品信息与销售情况表
as
select物品名字,所属类型,价格,品牌,方式,日期,数量
from销售记录a,物品表b
wherea.类型=b.所属类型
3.为了在职员信息中,可以方便看到该职员的工资,所以建立一个“职员信息工资表”
createview职员信息工资表
as
select姓名,性别,职位,联系电话,工资(元),日期
from职员资料a,工资表b
wherea.职员编号=b.职员编号
四、存储过程
1.创建一个存储过程,通过给定职位可查看该职位所有职员的个人信息。
createproc查询所指定职位的职员基本信息
@职位varchar(20)
as
select职位,姓名,性别,民族,籍贯,出生日期,身份证号,婚姻状况,家庭住址,联系电话,备注
from职员资料
where职位=@职位
2.创建一个存储过程,通过给定职员编号可删除该职员
createproc删除所指定的职员
@职员编号char(6)
as
delete职员资料
where职员编号=@职员编号
五、触发器
1.在评价情况表中添加记录后,统计某职员的优评数量,在本月1号到到添加日期这段时间的好评达到10次将在职员资料表中为该职员的备注栏添加上“工作中表现优秀!
”
createtrigger优评备注on评价情况
afterinsert
as
declare@avarchar,@bint
begin
select@a=职员编号forminsertedwhere评价级别=’优
select@b=count(*)form评价情况where评价级别=’优’and职员编号=@aanddateadd(day,-1,getdate())<30anddateadd()groupby评价级别,职员编号
if@b>10
begin
update职员资料
set备注=”工作中表现优秀!
”
where职员编号=@a
end
else
end
2.在评价情况表中添加记录后,统计某职员的优评数量,在本月1号到到添加日期这段时间的差评达到10次将在职员资料表中为该职员的备注栏添加上“工作中表现糟糕!
”。
createtrigger优评备注on评价情况
afterinsert
as
declare@cvarchar,@dint
begin
select@c=职员编号forminsertedwhere评价级别=’差
select@d=count(*)form评价情况where评价级别=’差’and职员编号=@canddateadd(day,-1,getdate())<30anddateadd()groupby评价级别,职员编号
if@d>10
begin
update职员资料
set备注=”工作中表现糟糕!
”
where职员编号=@a
end
else
end
六、权限设置
我们所设计的教师档案管理系统根据实际情况会用到四类用户,有食堂所有者、管理者、普通员工,还有客户。
食堂所有者在这管理系统种具有全部权限,
食堂的管理人员具有职员管理,物品管理,营业管理,评价管理的添加删改权限。
食堂普通职员具有席位管理的添加删改权限,方便对日常工作的管理。
客户具有在评价情况表上添加对职员的评价情况的权限,但是不能修改和删除。
1、新建了三个用户分别代表四类用户,所有者、管理者、普通员工,客户,分别设有密码。
命令如下:
execsp_addlogin'所有者','111'
execsp_addlogin'管理者','222'
execsp_addlogin'普通员工','333'
execsp_addlogin'客户','444'
2、授予所有者所有权限
给'所有者'授予食堂管理系统数据库访问权,并给其分配为该数据库的拥有者:
db_owner,在该数据库中拥有所有权限;命令如下:
use食堂管理系统
execsp_grantdbaccess'所有者'
go
execsp_addrolemember'db_owner','所有者'
2、通过所有者用户给普通员工授予权限,命令如下:
use食堂管理系统
execsp_grantdbaccess'普通员工'
go
grantselecton席位表to普通员工
3、通过所有者用户给管理者授予权限,命令如下:
use食堂管理系统
execsp_grantdbaccess'管理者'
go
grantselect,insert,updateon职员资料to管理者
grantselect,insert,updateon物品表to管理者
grantselect,insert,updateon销售记录to管理者
grantselect,insert,updateon评价情况to管理者
七、数据备份与恢复设计
为了防止数据可能在运行过程中出现某些意外的错误而导致数据丢失等严重问题,数据库的备份与恢复在实际的数据库系统开发中有着十分重要的意义。
1.针对系统的数据库分析:
为了防止突发事件对现存数据库的破坏,应该随时将数据库信息进行备份,考虑到三种备份空间与时间上的优化,我们采取备份策略:
1)有规律的进行完整数据库备份,可以隔一段时间,在操作数据库不频繁的时间段进行;
2)在较小的时间间隔内进行差异备份,比如一天;
3)在相邻的两次差异备份之间进行事务日志备份,可以每半个小时一次,以补充备份在完整数据库备份与差异备份进行之间之间进行的事务。
2.考虑食堂管理系统实际情况,我们采取恢复策略:
先恢复最近一次的数据库备份,接着进行差异备份恢复,最后进行事务日志备份的恢复。
因为我们同样关心数据库状态之间的变化,所以采用完整数据库恢复策略。
3.由于食堂管理系统的数据量会随时间不断增多,可能出现很多的人员的调动和调整,占据存储空间的同时又降低数据库访问的效率,针对这方面我们采取:
每1年对教师教师基本信息进行数据备份,备份数据另保存,同时将这些已备份的数据从食堂管理系统中删除。
数据库备份
备份:
数据库备份就是制作数据库结构和数据的拷贝,以便在数据库遭到破坏的时候能够恢复数据库。
备份数据库语法
backupdatabase要备份的数据库名
to用来备份的备份设备名/备份文件名
with
format/init/noinit/restart/differential
format:
完全删除备份设备原内容后备份
init:
完全删除备份设备除标题外的原内容
noinit:
备份内容添加到备份设备原有内容后
restart:
在中断点重新备份
differential:
进行差异性备份
事务日志备份的语法:
backuplog要备份的数据库名
to用来备份的备份设备名/备份文件名
恢复数据库
1、数据库恢复:
数据库恢复就是把数据库备份加载到系统中。
数据库备份后,一旦系统发生崩溃或者执行了错误的数据库操作,就可以从备份文件中恢复数据库。
系统在恢复数据库的过程中,自动执行安全性检查、重建数据库结构以及完整数据库内容。
2、下面三个情况会导致恢复失败:
服务器上的数据库文件集和备份集中的数据文件集不一致。
如果在restore语句中指定的数据库已经存在,并且该数据库与在备份文件中记录的数据库不同。
不能提供用于恢复数据库的全部文件或文件组。
3、恢复数据库时应注意的两个问题:
在数据库恢复前,应该首先删除故障数据库,以便删除对故障硬件的任何引用。
在数据库恢复前,必须限制用户对数据库的访问
恢复数据库语法
restoredatabase数据库名
from备份设备名
withfile=备份文件序号
Norecovery
***还原还没有最后完成,还能接收新的日志备份文件,用来恢复
Recovery
***还原已经结束,数据库可以恢复使用
恢复事务日志
restorelog数据库名
from备份设备逻辑名
withfile=备份文件序号
norecovery/recovery
创建备份设备
execsp_addumpdevice‘disk’,’逻辑名称’,’物理名称’
对数据库进行如下操作:
创建好食堂管理系统数据库,然后对数据库进行完全备份;
对数据库进行相对应的操作后,进行差异备份;
对数据库再次进行相关操作后,进行日志备份;
破坏数据库,然后进行还原(选择最佳还原方案)。
还原后,再次进行相关操作,然后进行一次差异备份。
破坏数据库,然后进行还原(选择最佳还原方案)。
还原后,进行一次完全备份。
再次破坏数据库,最后一次还原(选择最佳还原方案)。
命令如下:
execsp_addumpdevice'disk','bbb','e:
\bbb.bak'
backupdatabase食堂管理系统tobbb
2、backupdatabase食堂管理系统
tobbbwithdifferential
3、backuplog食堂管理系统tobbb
4、dropdatabase食堂管理系统
go
restoredatabase食堂管理系统frombbbwithfile=1,norecovery
restoredatabase食堂管理系统frombbbwithfile=2,norecovery
restorelog食堂管理系统frombbbwithfile=3
5、backupdatabase食堂管理系统tobbbwithdifferential
6、dropdatabase食堂管理系统
go
restoredatabase食堂管理系统frombbbwithfile=1,norecovery
restoredatabase食堂管理系统frombbbwithfile=4
7、backupdatabase食堂管理系统tobbb
8、dropdatabase食堂管理系统
go
restoredatabase食堂管理系统frombbbwithfile=5
总结
通过这次的数据库课程设计,独立完成了食堂管理系统的设计,从这次的系统设计中我领略到了:
1.开放一个数据库应用系统,通常需要进过需求分析、概念结构设计、逻辑结构设计、物理结构设计、对功能的SQL语句的相应描述5个阶段;
2.进行数据库设计首先需要准确了解与分析用户需求、需求分析是整个设计过程的基础,是最困难、最耗时间的一步。
作为“地基”的需求分析是否做得充分与准确,决定了在其上构建数据库大厦的速度与质量。
需求分析做的不好,甚至会导致整个数据库设计返工重做。
3.数据库的设计艰苦而漫长,必须踏踏实实,走好每一步。
要做到人性化,科学管理是根本但是也是最难的,为此,我会加倍努力投入学习,以期待能设计一个根据我完整的数据库系统。
课程设计报告
2012年3月17日
课题:
前台连接后台数据库
目的和要求:
让学生体会一下如何用最简单的方法让连接后台的数据库,在前台的窗体中实现对后台数据库中数据的添加、删除、修改、查询等操作。
内容:
1.制作如下图所示的网页,可供用户登录对进行数据库操作。
输入正确的用户名是sa,密码为:
123,如下图
2.制作如下图所示的网页,可供用户选择对数据库要操作的的表进行选择
3.制作如下图所示的网页,可以对一个表进行添加、删除、修改、查询、查看等基本操作。
这里选择了物品表,功能如下图所示
4.下面为具体的查看、查询、添加、更新、删除的操作页面:
查看:
查询:
(以查询“鸡蛋”为例)
添加:
(这里成功添加了数据)
编辑、更新:
(显示了上面添加的数据)
5.下面是一些其他页面的展示:
设计后总结
这次的前台连接后台数据库的实验是在我们在没有任何asp.Net基础的情况下,进行设计的,但是在老师的悉心教导下,我还是顺利完成了网页的制作。
虽然实验操作过程中遇到了很多问题,又是第一次自己动手做前台,一切都是那么的生疏,但是老师给我们知识的时间虽然有限但是恰到好处,在这紧张的时间中我们领会了其中的要领,一步步解决了问题,最后做出的作品虽说不是很完善,但是花的精力确实不少。
不过很欣慰的是,在这其中我学会更多,随着实验一步步的进行,我从中学到了平时理论课学不到的东西,而且通过动手,平时很多不明朗的东西也渐渐明朗起来了!
老师在此也付出了辛勤,我在此表示致敬!