《数据库原理》- 外卖订餐系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据库原理》课程设计报告
设计题目:外卖订餐系统
专业:信息管理与信息系统
计算机与数据科学学院
2018 年12月23日
目录
1 概述 (2)
1.1 选题的背景及意义 (2)
1.2相关技术分析 (3)
2 系统功能设计 (4)
2.1 系统总体结构设计图 (4)
2.2 系统功能模块 (4)
2.2.1 模块名称 (4)
2.2.2 功能模块分析 (4)
3 数据库设计 (6)
3.1 需求分析 (6)
3.1.1 数据流图 (6)
3.1.2 数据字典 (6)
3.2 概念结构设计 (8)
3.3 逻辑结构设计 (11)
3.4 物理结构设计 (14)
3.5 数据库的实施 (14)
3.6 运行与维护 (27)
4 结束语 (28)
1 概述
1.1选题的背景及意义
近年来,随着 Internet 的迅速崛起,互联网已日益成为提供信息的最佳渠道并逐步进入传统的流通领域,民众更把“网上订餐”当成一种潮流,传统的餐饮业在当前计算机网络信息化面前同样面临着一个新的挑战。
民众的餐饮习惯也在渐渐的朝着“订餐到户,随时,自由的用餐”方向发展。
尤其是广大在校大学生,信息的获取手段越来越多的依靠网络环境,国内的网络订餐业务虽然还处在逐步摸索、逐步发展的阶段,但已经呈现出良好的发展势头和应用前景。
网络订餐在“实地消费、电话订餐”的基础上依靠网络极大地丰富了餐饮行业的服务手段,增加了利润的来源空间。
充分利用互联网的“时效性强、客户端普及”的特点,“网上订餐”和“网上订房,网上订票,网上购物”等等,成为改变普通民众消费观念的全新消费形式。
一个完善、健全的网上订餐系统在具有一定相对稳定数量的使用者的同时,使用者会习惯性的通过网络点击该网站,习惯网上订餐,一旦成为习惯,网络订餐系统本身也就成了稀缺的媒体发布资源,由于该群体的消费能力较高,吸引相对的广告也将是另外一个利润的来源。
网上订餐系统是针对当今社会所有大学生做的,目的是服务当代大学生这个巨大的市场。
人们都知道“民以食为天”人都需要满足口腹才可以工作学习。
经过调研同学们对学
校食堂的意见不难发现以下问题,菜价相对比较贵,饭菜供应的时间都比较短。
如果因为一些事情而错过就餐时间就赶不上去食堂吃饭;每当节假日饭菜供应的种类少之又少,而且还存在着热了卖,卖了热的情况;到吃饭点找坐位都困难;随着天气越来越冷,考试的临近,很多学生都愿意躲在寝室,而不是特意跑到食堂用餐,如果有可以有人送餐到寝室会有很多人愿意去尝试。
综上所述食堂的这些问题相应的给予了本系统巨大的潜在客户与市场。
本着为客户服务、替客户着想的原则出发,将根据客户对“网上订餐”系统的基本功能需求进行设计。
1.2相关技术分析
数据库设计是设计一个数据库管理系统的核心技术,因此,在设计一个系统之前必须设计好数据库,目前数据设计的一般过程分为六个阶段如图10.1所示:需求分析阶段、概念结构设计阶段、逻辑结构设计阶段、物理结构设计阶段、实施阶段和运行与维护阶段。
1、需求分析阶段:需求分析阶段的主要任务是指通过充分调查现实世界要处理的对象, 详细了解计算机系统的工作情况, 明确用户的各种需求, 然后确定系统的各项功能。
数据库系统不仅要按照当前的应用要求来设计, 而且必须充分考虑今后可能的扩充和改变。
2、概念结构设计阶:概念结构设计阶段的主要任务是将需求分析阶段所得到的用户需求抽象为概念模型, 而描述概念模型的具体工具主要是E-R模型。
3、逻辑结构设计阶段:逻辑结构设计阶段的主要任务是把概念结构设计阶段设计的基本E-R模型转换为与选用DBMS产品所支持的数据模型相符合的逻辑结构。
具体来说, 就是首先将概念结构转换为一般的关系、网状、层次模型, 然后将转换来的模型向特定DBMS支持下的数据模型转换, 最后对数据模型进行优化。
4、物理结构设计阶段:物理结构设计阶段的主要任务是为一个指定的逻辑数据模型选取一个符合应用要求的物理结构。
具体来说, 就是首先确定数据库的物理结构, 即数据库的存取方法和存储结构;然后对数据库的物理结构进行评估,
评估的重点是存取时间的长短和存储空间的大小。
5、实施阶段:实施阶段的主要任务是用RDBMS 提供的数据定义语言和其他实用程序将逻辑结构设计和物理结构设计的结果详细描述出来,成为DBMS 可以接受的源代码;再经过系统调试产生目标模式, 最后完成数据的载入工作。
6、运行与维护:运行与维护阶段的主要任务包括数据库的转储和恢复, 数据库完整性和安全性控制, 数据库性能改造、分析和监督, 数据库的重构造和重组织。
2 系统功能设计2.1系统总体结构设计图
2.2 系统功能模块
2.2.1模块名称
1、顾客信息管理模块,
2、菜品信息管理模块
3、送餐员信息管理模块
4、订单信息管理模块
5、留言信息管理模块
2.2.2功能模块分析
1、顾客信息管理模块
a)顾客信息的登记、删除、修改
b)顾客可给买过的菜品留言
2、菜品信息管理模块
a)菜品信息的录入、修改、删除
b)菜品信息的多关键字检索查询
3、送餐员信息管理模块
送餐员信息的增加、删除和修改
4、订单信息管理模块
a)订单信息可被送餐员和顾客查询
b)订单信息的修改和删除
5、留言信息管理模块
a)只允许买过该菜品的顾客对该菜品评价b)顾客可对留言进行修改删除
3 数据库设计3.1 需求分析
3.1.2 数据字典
(a)数据项:
表1.1 数据项列表
(b)数据结构:
表1.2 数据结构列表
(c)处理逻辑描述
表1.3 处理逻辑列表
3.2 概念结构设计
概念设计阶段主要是将需求分析阶段得到的用户需求抽象为信息结构(概念模型)的过程,它是整个数据库设计的关键。
本外卖订餐系统的主要任务及目标如下:
(1)设计分E-R图,即各子模块的E-R图;
(2)生成初步E-R图,通过合并方法,做到各子系统实体、属性、联系统一;(3)生成全局E-R图,通过消除冲突等方面。
根据实体与属性间的两条准则:
①作为“属性”,不能再具有需要描述的性质。
②“属性”不能与其他实体具有联系。
局部E-R图a、b、c、d、e如下:
a)顾客信息E-R图
b)送餐员信息E-R图
d)留言消息E-R图
e)订单消息E-R图
3.3 逻辑结构设计
1.将E-R图转换为关系模型
实体型转换为关系模式。
实体的属性就是关系的属性,实体的码就是关系的码。
对于实体间的联系则有以下不同的情况:
一个m:n联系转换为一个关系模式。
与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合。
一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。
如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为n端实体的码。
一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。
三个或三个以上实体间的一个多元联系可以转换为一个关系模式。
与该多元联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合。
具有相同码的关系模式可合并。
具体的基本E-R 图向关系模型的转化如下:
顾客: CUSTUMER(CID、CNAME、CSEX、CADDRESS、CTELL)
送餐员:EMPLOYEE(EID、ENAME、ESEX、EADDRESS、ETELL)
菜品: DISHES (DID、DNAME、DPRICE)
订单: ORDERCP (OID、OTIME、OSTATE、CID、CNAME、CADDRESS、CTELL、EID、ETELL、DNAME、DPRICE、ODNUM)
留言: MESSAGE(MID、MMID、MDID、MCONTENT)
关系模式CUSTUMER,EMPLOYEE,DISHES,ORDER ,MESSAGE不存在非主属性对主属性的部分函数依赖,也不存在传递函数依赖,已经达到了3NF。
2.数据库模式定义
根据分析,本数据库共创建如下5个表。
顾客信息表
列名数据类型可否为空说明
CID Char not null 顾客编号
CNAME Char not null 顾客姓名
CSEX NChar not null 顾客性别
CADDRESS Char not null 顾客住址
CTELL Char not null 顾客电话
送餐员信息表
列名数据类型可否为空说明
EID Char not null 送餐员编号
EName Char not null 送餐员姓名
ESex NChar not null 送餐员性别EADDRESS Char not null 送餐员住址
ETELL Char not null 送餐员电话
菜品信息表
列名数据类型可否为空说明DID Char not null 菜品编号
DName Char not null 菜品名称DPRICE Money 菜品价格
订单信息表
列名数据类型可否为空说明OID Char not null 订单编号
OTIME Date not null 订单提交时间OSTA TE Date not null 订单送达时间
CID Char not null 顾客编号
CNAME Char not null 顾客姓名CADDRESS Char not null 顾客住址
CTELL Char not null 顾客电话
EID Char not null 送餐员编号ETELL Char not null 送餐员电话DNAME Char not null 菜品名称DPRICE Money not null 菜品单价ODNUM Char not null 菜品数量
留言信息表
列名数据类型可否为空说明MID Char not null 留言编号
MMID Char not null 留言人编号
MDID Char not null 留言菜品编号MCONTENT Char not null 留言内容
3.用户子模式定义
用户子模式定义
编号用户子模式(View) 作用(共性:提供数据保密和安全保护机制) V-1 CUSTOMERView 便于查询、更新顾客的基本信息
V-2 EMPLOYEEView 方便送餐员基本信息的查询、更新
V-3 DISHESView 便于菜品信息的查询、更新
V-4 ORDERCPView 用于订单信息的查询
V-5 MESSAGEView 便于查询、更新留言信息
顾客基本信息视图
列名数据类型可否为空说明CID Char not null 顾客编号CName Char not null 顾客姓名CSex NChar not null 顾客性别CADDRESS Char not null 顾客地址CTELL Char not null 顾客电话
送餐员基本信息视图
列名数据类型可否为空说明EID Char not null 送餐员编号EName Char not null 送餐员姓名ESEX NChar not null 送餐员性别EADDRESS Char not null 送餐员住址ETELL Char not null 送餐员电话
菜品信息视图
列名数据类型可否为空说明DID Char not null 菜品编号DName Char not null 菜品名称DPRICE MONEY not null 菜品单价
订单信息视图
列名数据类型可否为空说明OID Char not null 订单编号OTIME Date not null 订单提交时间OSTA TE Date not null 订单送达时间ODNUM Char not null 菜品数量
CID Char not null 顾客编号CNAME Char not null 顾客姓名CADDRESS Char not null 顾客地址CTELL Char not null 顾客电话
EID Char not null 送餐员编号ETELL Char not null 送餐员电话DNAME Char not null 菜品名称DPRICE Char not null 菜品单价
留言信息视图
列名数据类型可否为空说明MID Char not null 留言编号MMID Char not null 留言人编号MDID Char not null 留言菜品编号MCONTENT Char not null 留言内容
结合系统的需求,本系统的基本的系统功能模块如下图
系统功能模块图
3.4 物理结构设计
数据库的物理设计就是为逻辑数据模型选取一个最合适应用要求的物理结构的过程,在这个阶段中要完成两大任务:
(1)确定数据库的物理结构,在关系数据库中主要是存取方法和存储结构;
(2)对物理结构进行评价,评价的重点是时间和空间效率。
为数据库中各基本表建立的索引如下:
1)由于基本表DISHES的属性DID,MESSAGE的属性MCONTENT经常在查询条
件中出现,在两个属性上建立聚簇索引;
2)订单信息基本表ORDER的一属性EID,OSTATE,ETELL经常在查询条件中出
现,考虑在其之上建立聚簇索引;
3.5 数据库的实施
建立数据库、数据表、视图、索引
(一)建立数据库
CREATE DATABASE SERVICE
(二)建立数据表
1)顾客信息表的建立:
create table CUSTUMER(
CID char(10) primary key,
CNAME char(20) not null,
CSEX Nchar(1) not null,
CADDRESS char(30) not null,
CTELL char(15) not null, )
2)送餐员基本信息表的建立:
create table EMPLOYEE(
EID char(10) primary key,
EName char(20) not null,
ESex Nchar(1),
EADDRESS char(30) not null,
ETELL char(10) not null,
check(ESex ='男' or ESex ='女') )
3)菜品基本信息表的建立:
create table dishes(
DID char(10) primary key,
DNAME char(20) not null,
DPRICE MONEY
)
4)订单基本信息表的建立:create table ORDERCP(
OID char(10) primary key, CID char(10) not null,
CNAME char(20) not null, CTELL char(15) not null,
CADDRESS char(30) not null, EID char(10) NOT NULL,
ETELL char(15) NOT NULL,
DNAME char(20) not null,
DPRICE MONEY not null,
ODNUM CHAR(6) NOT NULL,
OTIME DATETIME not null,
OSTATE DATETIME not null,
foreign key(CID) references CUSTUMER(CID), foreign key(EID) references EMPLOYEE(EID)
)
5)留言信息表的建立:
create table message(
MID char(10) primary key,
MMID char(10) not null,
MDID char(10) not null,
MCONTENT char(300) not null,
foreign key(MMID) references CUSTUMER(CID),
)
(三)建立视图
(1)用于查询顾客基本信息的视图定义如下:
create view CUSTUMERview (顾客编号, 顾客姓名, 顾客性别, 顾客电话, 顾客地址)
as
select CID,CNAMECSEX,CTELL,CADDRESS
from SERVICE
(2)用于送餐员基本信息查询的视图定义如下:
create view EMPLOYEEview (送餐员编号,送餐员姓名,送餐员性别,送餐员电话,送餐员地址)
as
select EID,ENAME,ESEX,ETELL,EADDRESS
from EMPLOYEE
(3)用于显示菜单信息的视图定义如下:
create view dishesview (菜品编号,菜品名称,菜品单价) as
Select DID,DName,DPRICE
from dishes
(4)用于订单信息查询的视图定义如下:
create view ORDERCPview (订单编号,顾客编号,顾客姓名,顾客电话,顾客地址,送餐员编号,菜品名称,菜品单价,菜品数量,送餐员电话,订单提交时间,订单送达时间)
as
selectOID,CID,CNAME,CTELL,ADDRESS,DNAME,DPRICE,ODNUM,ETELL,DNA ME,OTIME,OSTATE
From ORDERCP
(5)用于查询留言信息的视图定义如下:
create view MESSAGEview (留言编号,留言人编号,留言菜品编号,留言内容)
as
select MID,MMID,MDID,MCONTENT
from MESSAGE
(四)建立索引
3)由于基本表DISHES的属性DID,MESSAGE的属性MCONTENT经常在查
询条件中出现,在两个属性上建立聚簇索引;
create clustered index DID on DISHES(DID);
create clustered index MCONTENT on MESSAGE(MCONTENT);
(五)建立触发器
1.当删除DISHES表中某一菜品基本信息时,触发MESSAGE表,删除相应的记录
create trigger DISHES_delete
on DISHES
for delete
as
delete MESSAGE
from deleted
Where MESSAGE.MDID=deleted.DID
存储过程定义
1CUSTUMER_Insert的定义:
CREATE PROCEDURE CUSTUMER_Insert
@CID char(10) ,
@CNAME char(20),
@CSEX Nchar(1),
@CTELL char(15),
@CADDRESS char(30)
as
insert into CUSTUMER
values(@CID ,@CNAME,@CSEX,@CTELL ,@CADDRESS ); 2EMPLOYEE_Insert的定义:
CREATE PROCEDURE EMPLOYEE_Insert
@EID char(10),
@EName char(20),
@ESex char(1),
@ETELL char(15),
@EADDRESS char(30)
as
insert into EMPLOYEE
values( @EID , @EName, @ESex,@ETELL ,@EADDRESS);
3DISHES_Insert的定义:
CREATE PROCEDURE DISHES_Insert
@DID char(10),
@DName char(20),
@DPRICE MONEY
as
insert into DISHES
values( @DID , @DName, @DPRICE);
4.Query_ORDERCP的定义:
create procedure Query_ORDERCP
@CID char(10),
@ETELL CHAR(15) OUTPUT,
@OSTATE DATETIME OUTPUT
as
select @ETELL=ETELL,@OSTATE=OSTATE
from ORDERCP
where CID=@CID
5.Query_MESSAGE的定义:
create procedure Query_MESSAGE
@MDID char(10),
@MCONTENT CHAR(300) OUTPUT as select @MCONTENT =MCONTENT
from MESSAGE
where MDID =@MDID
3.6 运行与维护
数据库的备份和还原
还原数据库
BACKUP DATEBASE SERVICE TO DISK=’c:/SERVICE.BAK’
备份数据库
RESTORE DATABASE SERVICE FROM DISK=’c:/SERVICE.BAK’
4 结束语
两个星期的时间非常快就过去了,这两个星期不敢说自己有多大的进步,获得了多少知识,但起码是了解了项目开发的部分过程。
虽说上过数据库上过管理信息系统等相关的课程,但是没有亲身经历过相关的设计工作细节。
这次课程设计提供了一个很好的机会。
通过这次课程设计发现这其中需要的很多知识我们没有接触过,去图书馆查资料的时候发现我们前边所学到的仅仅是皮毛,还有很多需要我们掌握的东西我们根本不知道。
同时也发现有很多已经学过的东西我们没有理解到位,不能灵活运用于实际,不能很好的用来解决问题,这就需要我们不断的大量的实践,通过不断的自学,不断地发现问题,思考问题,进而解决问题。
在这个过程中我们将深刻理解所学知识,同时也可以学到不少很实用的东西。
从各种文档的阅读到开始的需求分析、概念结构设计、逻辑结构设计、物理结构设计。
亲身体验了一回系统的设计开发过程。
很多东西书上写的很清楚,貌似看着也很简单,思路非常清晰。
但真正需要自己想办法去设计一个系统的时候才发现其中的难度。
经常做到后面突然就发现自己一开始的设计有问题,然后又回去翻工,在各种反复中不断完善自己的想法。
我想有这样的问题不止我一个,事后想想是一开始着手做的时候下手过于轻快,或者说是根本不了解自己要做的这个系统是给谁用的。
因为没有事先做过仔细的用户调查,不知道整个业务的流程,也不知道用户需要什么功能就忙着开发,这是作为设计开发人员需要特别警惕避免的,不然会给后来的工作带来很大的麻烦,甚至可能会需要全盘推倒重来。
所以以后的课程设计要特别注意这一块的设计。
按照要求,我们做的是外卖系统。
说实话,我很少订外卖,也不知道外卖订餐是怎么一个流程。
盲目开始设计的下场我已经尝过了,结果就是出来一个四不像的设计方案,没有什么实际用处。
没有前期的调查,仅从一个课设题目着手是不够的。
在需求分析过程中,我们通过上网查资料,去图书馆查阅相关资料,结合我们的生活经验,根据可行性研究的结果和客户的要求,分析现有情况及问题。
在两周的时间里,不断地对程序及各模块进行修改、编译、调试、运行,其间遇到很多问题。
我们学习并应用了SQL语言,对数据库的创建、修改、删除方法有了一定的了解,通过导入表和删除表、更改表学会了对于表的一些操作,为了建立一个关系数据库信息
管理系统,必须得经过系统调研、需求分析、概念设计、逻辑设计、物理设计、系统调试、维护以及系统评价的一般过程,为毕业设计打下基础。
很多事情不是想象中的那么简单的,它涉及到的各种实体、属性、数据流程、数据处理等等。
很多时候感觉后面的设计根本无法继续,感觉像是被前面做的各种图限制了。
在做关系模型转换的时候碰到有些实体即可以认为是实体又可以作为属性,为了避免冗余,尽量按照属性处理了。
物理结构设计基本没有碰到问题,这一块和安全性、完整性不觉就会在物理结构设计中添加一些安全设置:主键约束、check约束、default定义等。
最后才做索引的部分,对一些比较经常使用搜索的列,外键上建立索引,这样可以明显加快检索的速度,最后别忘记重要的安全性设置,限制用户访问权限,新建用户并和数据库用户做相应的映射。
不管做什么,我们都要相信自己,不能畏惧,不能怕遇到困难,什么都需要去尝试,有些你开始认为很难的事在你尝试之后你可能会发现原来它并没有你以前觉得的那样,自己也是可以的。
如果没有自信,没有目标,没有信心就不可能把事情做好,当其他人都在迷茫的时候,自己一定要坚信目标,大学毕业出去即面临找工作,从学习这个专业,到以后从事这方面的工作都需要不断地去学习去实践,这次实践可以给我们敲一个警钟,我们面临毕业,面临择业,需要这些实践经验,在困难面前要勇于尝试,这是这次课程设计给我的最大感想!
以上基本是这次课程设计的体会了,设计进行的非常艰难,编码非常不容易,才发现做一个项目最重要的不在于如何实现,而是实现之前的需求分析和模块设计。
创新很难,有些流行的系统其实现并不难,难的在于对市场的分析和准确定位。
设计,是一个任重道远的过程。