餐饮管理系统之就餐管理模块的数据库设计.docx
《餐饮管理系统之就餐管理模块的数据库设计.docx》由会员分享,可在线阅读,更多相关《餐饮管理系统之就餐管理模块的数据库设计.docx(39页珍藏版)》请在冰点文库上搜索。
![餐饮管理系统之就餐管理模块的数据库设计.docx](https://file1.bingdoc.com/fileroot1/2023-7/6/6c5050c0-0414-4faf-98f4-80a8189b72ae/6c5050c0-0414-4faf-98f4-80a8189b72ae1.gif)
餐饮管理系统之就餐管理模块的数据库设计
餐饮管理系统之就餐管理模块的数据库设计
内容摘要
作为计算机应用的一部分,在餐饮管理中引入现代化的信息管理技术,具有人工管理所地无法比拟的优点。
本项目就餐饮管理系统之就餐管理模块提供了相关设计方案,运用数据库系统设计的方法,借用Powerdesigner和Microsoftoffice等工具,从需求分析到数据库的物理设计的过程中,采用了业务流程图,DFD,E-R图等形式建立模型,并对关系模型进行了规范化。
关键词:
数据库系统设计业务流程图DFDE-R图关系模型规范化
Abstract
Aspartofthecomputerapplications,moderninformationmanagementtechnologybeingintroducedtorestaurantmanagementhavemuchmoreadvantagesthanlabormagement.Theprojectprovidessomerelevantdesignproposalontherepastmanagementsectionofrestaurantmanagementsystem.ItusesthemethodofdatabasesystemdesignwithPowerdesignerandMiscrosoftoffice.Fromtheprocedureofdemandanalysistodatabasephysicsdesign,theprojectbuildmodeswithTFD,DFDandE-RDiagram,anddealswiththerelationalmodelswithnormalization.
Keywords:
DatabasesystemdesignTFDDFDE-RDiagramNormalization
1概述
1.1项目背景
随着市场经济的发展,餐饮业已呈现出高速发展的状态。
但是,在快速发展的同时,餐饮业在日常经营管理中大都是以人为主体的,需要很多的人力、物力、财力,且效率不是很高,在系统运营时也可能产生人为的失误。
传统的餐饮管理工作既繁琐而且不利于分析企业的经营状况,在提供决策信息方面也难以适应现代化经营管理的要求,因此制约了整个餐饮业的规模化发展和整体服务水平的提升
[1]。
1.2编写目的
作为计算机应用的一部分,在餐饮管理中引入现代化的信息管理技术,具有人工管理所地无法比拟的优点。
例如统计结账快速、安全保密性好、可靠性高、存储量大、寿命长、成本低等。
这些优点能够极大地提高餐饮管理的效率,增强企业的竞争力,同时也是企业的科学化、正规化管理,与世界接轨的重要条件[1]。
1.3软件定义
该软件应用于餐饮业,引入了现代化的信息管理技术,具有良好的用户接口,使用方便。
具有完善的查询,对维护系统起到辅助决策的作用。
能够满足酒店每日营业的变动,对于操作用户有一定的管理,并对用户权限有一定的设置[1]。
1.4开发环境
本系统使用WindowsWindowsXP,MicrosoftOfficeWord2003,MicrosoftOfficeVisio2003,MicrosoftSQLServer2000,PowerDesigner12和SQLServer2000组合开发而成。
2需求分析
2.1问题陈述
系统主要包括开台,点餐,结账等几大部分。
业务流程主要是:
用户登录系统后,进入就餐管理主界面,选择开台,输入信息后保存,然后进入点餐界面,输入信息后保存,最后进入结账界面。
通过分析,得到如下的业务流程图。
图1就餐管理业务流程图
2.2功能分析
本系统的用户是服务员,其职责是登录系统,管理就餐信息。
要求系统有完善的查询功能,能及时、方便、灵活地进行查询、修改、删除等维护性操作,满足酒店的日常营业管理。
功能如下:
(1)登录系统
(2)管理就餐信息
包括开台,点餐,结账等功能。
通过分析,得到DFD。
图2就餐管理顶层DFD
图3就餐管理第一层DFD
图4就餐管理第二层DFD
3数据库的概念结构设计
系统涉及的实体有:
1)桌台属性有桌台编号、桌台名称、桌台包间费、桌台位置、桌台状态、桌台类型
2)用户属性有用户账号,登录密码,用户权限
3)顾客开台属性有开台编号,用户编号,桌台编号,消费时间,顾客人数
4)顾客点餐属性有点餐编号,开台编号,菜品编号,菜品名称,消费数量,消费总额,备注,消费时间
5)结账账单属性有账单编号,点餐编号,消费总额,结账时间
6)菜品属性有菜品编号,菜品名称,菜品价格,菜品详情
这些实体的联系如下:
一个桌台只能被一个顾客开台参照,一个顾客开台只能参照一个桌台,因此桌台和顾客开台的关系是一对一的关系。
一个用户可以使用多个顾客开台,一个顾客开台可以被多个用户使用,因此用户和顾客开台是多对多的关系。
一个用户可以点餐多个顾客点餐,一个顾客点餐可以被多个用户点餐,因此用户和顾客点餐是多对多的关系。
一个用户可以结账多个结账账单,一个结账账单可以被多个用户结账,因此用户和结账账单是多对多的关系。
一个顾客点餐可以参照多个菜品,一个菜品可以被多个顾客点餐参照,因此顾客点餐和菜品是多对多的关系。
一个顾客点餐只能被一个结账账单参照,一个结账账单只能参照一个顾客点餐,因此顾客点餐和结账账单是一对一的关系。
由此给出就餐管理E-R图,如下图所示。
图5就餐管理E-R图
4数据库的逻辑结构设计
4.1将E-R图转换为关系模型,如下,关系的主码用下横线给出,外码用下曲线给出。
桌台(桌台编号,桌台名称,桌台包间费,桌台位置,桌台状态,桌台类型)
用户(用户账号,登录密码,用户权限)
使用(用户账号,开台编号)
结账(用户账号,账单编号)
点餐(用户账号,点餐编号)
顾客开台(开台编号,用户编号,桌台编号,消费时间,顾客人数)
顾客点餐(点餐编号,开台编号,菜品编号,菜品名称,消费数量,消费总额,备注,消费时间)
结账账单(账单编号,点餐编号,消费总额,结账时间)
菜品(菜品编号,菜品名称,菜品价格,菜品详情)
●检验所有模式是否属于2NF:
所有关系模式都属于2NF。
●检验所有模式是否属于3NF:
除关系模式
和
外,都属于3NF。
可改为:
顾客点餐(点餐编号,开台编号,菜品编号,消费数量,消费总额,备注,消费时间)
结账账单(账单编号,点餐编号,结账时间)
●使所有关系达到BCNF范式:
桌台(桌台编号,桌台名称,桌台包间费,桌台位置,桌台状态,桌台类型)
用户(用户账号,登录密码,用户权限)
使用(用户账号,开台编号)
结账(用户账号,账单编号)
点餐(用户账号,点餐编号)
顾客开台(开台编号,用户编号,桌台编号,消费时间,顾客人数)
顾客点餐(点餐编号,开台编号,菜品编号,消费数量,消费总额,备注,消费时间)
结账账单(账单编号,点餐编号,结账时间)
菜品(菜品编号,菜品名称,菜品价格,菜品详情)
4.2视图、索引、主关键字、权限等详见后文相关代码。
5数据库的物理结构设计
5.1用Powerdesigner生成的就餐管理物理数据模型:
图6就餐管理物理数据模型
5.2参考清单
名称
代码
父表格
子表格
使用
使用2
顾客开台
使用
使用
使用
用户
使用
参照1
参照2
顾客开台
桌台
参照1
参照1
桌台
顾客开台
参照2
参照4
菜品
参照2
参照2
参照3
顾客点餐
参照2
参照3
参照5
顾客点餐
结账账单
参照3
参照6
结账账单
顾客点餐
点餐
点餐2
顾客点餐
点餐
点餐
点餐
用户
点餐
结账
结账2
结账账单
结账
结账
结账
用户
结账
5.3表格清单
名称
代码
使用
使用
参照2
参照2
桌台
桌台
点餐
点餐
用户
用户
结账
结账
结账账单
结账账单
菜品
菜品
顾客开台
顾客开台
顾客点餐
顾客点餐
5.4表格列清单
名称
代码
开台编号
开台编号
桌台_桌台编号
桌台_桌台编号
用户编号
用户编号
桌台编号
桌台编号
消费时间
消费时间
顾客人数
顾客人数
点餐编号
点餐编号
账单编号
账单编号
开台编号
开台编号
菜品编号
菜品编号
菜品名称
菜品名称
消费数量
消费数量
消费总额
消费总额
备注
备注
消费时间
消费时间
桌台编号
桌台编号
开台编号
开台编号
桌台名称
桌台名称
桌台包间费
桌台包间费
桌台位置
桌台位置
桌台状态
桌台状态
桌台类型
桌台类型
菜品编号
菜品编号
菜品名称
菜品名称
菜品价格
菜品价格
菜品详情
菜品详情
用户帐号
用户帐号
登录密码
登录密码
用户权限
用户权限
账单编号
账单编号
顾客点_点餐编号
顾客点_点餐编号
点餐编号
点餐编号
消费总额
消费总额
结账时间
结账时间
用户帐号
用户帐号
开台编号
开台编号
用户帐号
用户帐号
账单编号
账单编号
用户帐号
用户帐号
点餐编号
点餐编号
点餐编号
点餐编号
菜品编号
菜品编号
5.5表格键清单
名称
代码
表格
Identifier_1
Identifier_1
顾客开台
Identifier_1
Identifier_1
顾客点餐
Identifier_1
Identifier_1
桌台
Identifier_1
Identifier_1
菜品
Identifier_1
Identifier_1
用户
Identifier_1
Identifier_1
结账账单
Identifier_1
Identifier_1
使用
Identifier_1
Identifier_1
结账
Identifier_1
Identifier_1
点餐
Identifier_1
Identifier_1
参照2
5.6表格索引清单
名称
代码
唯一的
群集器
主要的
外键
候选键
表格
顾客开台_PK
顾客开台_PK
TRUE
FALSE
TRUE
FALSE
FALSE
顾客开台
参照1_FK
参照1_FK
FALSE
FALSE
FALSE
TRUE
FALSE
顾客开台
顾客点餐_PK
顾客点餐_PK
TRUE
FALSE
TRUE
FALSE
FALSE
顾客点餐
参照6_FK
参照6_FK
FALSE
FALSE
FALSE
TRUE
FALSE
顾客点餐
桌台_PK
桌台_PK
TRUE
FALSE
TRUE
FALSE
FALSE
桌台
参照2_FK
参照2_FK
FALSE
FALSE
FALSE
TRUE
FALSE
桌台
菜品_PK
菜品_PK
TRUE
FALSE
TRUE
FALSE
FALSE
菜品
用户_PK
用户_PK
TRUE
FALSE
TRUE
FALSE
FALSE
用户
结账账单_PK
结账账单_PK
TRUE
FALSE
TRUE
FALSE
FALSE
结账账单
参照5_FK
参照5_FK
FALSE
FALSE
FALSE
TRUE
FALSE
结账账单
使用_PK
使用_PK
TRUE
TRUE
TRUE
FALSE
FALSE
使用
使用_FK
使用_FK
FALSE
FALSE
FALSE
TRUE
FALSE
使用
使用2_FK
使用2_FK
FALSE
FALSE
FALSE
TRUE
FALSE
使用
结账_PK
结账_PK
TRUE
TRUE
TRUE
FALSE
FALSE
结账
结账_FK
结账_FK
FALSE
FALSE
FALSE
TRUE
FALSE
结账
结账2_FK
结账2_FK
FALSE
FALSE
FALSE
TRUE
FALSE
结账
点餐_PK
点餐_PK
TRUE
TRUE
TRUE
FALSE
FALSE
点餐
点餐_FK
点餐_FK
FALSE
FALSE
FALSE
TRUE
FALSE
点餐
点餐2_FK
点餐2_FK
FALSE
FALSE
FALSE
TRUE
FALSE
点餐
参照2_PK
参照2_PK
TRUE
TRUE
TRUE
FALSE
FALSE
参照2
参照3_FK
参照3_FK
FALSE
FALSE
FALSE
TRUE
FALSE
参照2
参照4_FK
参照4_FK
FALSE
FALSE
FALSE
TRUE
FALSE
参照2
6编码
/*==============================================================*/
/*DBMSname:
MicrosoftSQLServer2000*/
/*Createdon:
2011-6-2919:
08:
43*/
/*==============================================================*/
ifexists(select1
fromdbo.sysreferencesrjoindbo.sysobjectsoon(o.id=r.constidando.type='F')
wherer.fkeyid=object_id('使用')ando.name='FK_使用_使用_用户')
altertable使用
dropconstraintFK_使用_使用_用户
go
ifexists(select1
fromdbo.sysreferencesrjoindbo.sysobjectsoon(o.id=r.constidando.type='F')
wherer.fkeyid=object_id('使用')ando.name='FK_使用_使用2_顾客开台')
altertable使用
dropconstraintFK_使用_使用2_顾客开台
go
ifexists(select1
fromdbo.sysreferencesrjoindbo.sysobjectsoon(o.id=r.constidando.type='F')
wherer.fkeyid=object_id('参照2')ando.name='FK_参照2_参照3_顾客点餐')
altertable参照2
dropconstraintFK_参照2_参照3_顾客点餐
go
ifexists(select1
fromdbo.sysreferencesrjoindbo.sysobjectsoon(o.id=r.constidando.type='F')
wherer.fkeyid=object_id('参照2')ando.name='FK_参照2_参照4_菜品')
altertable参照2
dropconstraintFK_参照2_参照4_菜品
go
ifexists(select1
fromdbo.sysreferencesrjoindbo.sysobjectsoon(o.id=r.constidando.type='F')
wherer.fkeyid=object_id('桌台')ando.name='FK_桌台_参照2_顾客开台')
altertable桌台
dropconstraintFK_桌台_参照2_顾客开台
go
ifexists(select1
fromdbo.sysreferencesrjoindbo.sysobjectsoon(o.id=r.constidando.type='F')
wherer.fkeyid=object_id('点餐')ando.name='FK_点餐_点餐_用户')
altertable点餐
dropconstraintFK_点餐_点餐_用户
go
ifexists(select1
fromdbo.sysreferencesrjoindbo.sysobjectsoon(o.id=r.constidando.type='F')
wherer.fkeyid=object_id('点餐')ando.name='FK_点餐_点餐2_顾客点餐')
altertable点餐
dropconstraintFK_点餐_点餐2_顾客点餐
go
ifexists(select1
fromdbo.sysreferencesrjoindbo.sysobjectsoon(o.id=r.constidando.type='F')
wherer.fkeyid=object_id('结账')ando.name='FK_结账_结账_用户')
altertable结账
dropconstraintFK_结账_结账_用户
go
ifexists(select1
fromdbo.sysreferencesrjoindbo.sysobjectsoon(o.id=r.constidando.type='F')
wherer.fkeyid=object_id('结账')ando.name='FK_结账_结账2_结账账单')
altertable结账
dropconstraintFK_结账_结账2_结账账单
go
ifexists(select1
fromdbo.sysreferencesrjoindbo.sysobjectsoon(o.id=r.constidando.type='F')
wherer.fkeyid=object_id('结账账单')ando.name='FK_结账账单_参照5_顾客点餐')
altertable结账账单
dropconstraintFK_结账账单_参照5_顾客点餐
go
ifexists(select1
fromdbo.sysreferencesrjoindbo.sysobjectsoon(o.id=r.constidando.type='F')
wherer.fkeyid=object_id('顾客开台')ando.name='FK_顾客开台_参照1_桌台')
altertable顾客开台
dropconstraintFK_顾客开台_参照1_桌台
go
ifexists(select1
fromdbo.sysreferencesrjoindbo.sysobjectsoon(o.id=r.constidando.type='F')
wherer.fkeyid=object_id('顾客点餐')ando.name='FK_顾客点餐_参照6_结账账单')
altertable顾客点餐
dropconstraintFK_顾客点餐_参照6_结账账单
go
ifexists(select1
fromsysobjects
whereid=object_id('菜品信息表')
andtype='V')
dropview菜品信息表
go
ifexists(select1
fromsysobjects
whereid=object_id('顾客开台表')
andtype='V')
dropview顾客开台表
go
ifexists(select1
fromsysobjects
whereid=object_id('顾客点餐表')
andtype='V')
dropview顾客点餐表
go
ifexists(select1
fromsysobjects
whereid=object_id('餐桌信息表')
andtype='V')
dropview餐桌信息表
go
ifexists(select1
fromsysindexes
whereid=object_id('使用')
andname='使用2_FK'
andindid>0
andindid<255)
dropindex使用.使用2_FK
go
ifexists(select1
fromsysindexes
whereid=object_id('使用')
andname='使用_FK'
andindid>0
andindid<255)
dropindex使用.使用_FK
go
ifexists(select1
fromsysobjects
whereid=object_id('使用')
andtype='U')
droptable使用
go
ifexists(select1
fromsysindexes
whereid=object_id('参照2')
andname='参照4_FK'
andindid>0
andindid<255)
dropindex参照2.参照4_FK
go
ifexists(select1
fromsysindexes
whereid=object_id('参照2')
andname='参照3_FK'
andindid>0
andindid<255)
dropindex参照2.参照3_FK
go
ifexists(select1
fromsysobjects
whereid=object_id('参照2')
andtype='