资源描述
课程设计(论文)
课程名称: 数据库系统分析与设计
题 目:食品消费管理系统数据库设计与实现
院 (系): 管理学院
专业班级: XXXXX
姓 名: XXXX
学 号: XXX
指导教师: XXXXX
2012年 12 月 4 日
XXX大学课程设计(论文)任务书
专业班级: 学生姓名: 指导教师(签名):
一、课程设计(论文)题目
食品消费管理系统数据库设计与实现
二、本次课程设计(论文)应达到的目的
数据库系统分析与设计课程设计是信息管理与信息系统专业集中实践性环节之一,是学习完《数据库数据库系统原理及技术》及《数据库系统分析与设计》课程后进行的一次全面的综合练习。其目的在与加深对数据库基础理论和基本知识的理解,掌握借助PowerDesigner开发和设计一个小型数据库系统时设计数据库系统模型的基本方法,提高运用数据库解决实际问题的能力。
三、本次课程设计(论文)任务的主要内容和要求(包括原始数据、技术参数、设计要求等)
要求学生能独立完成一个数据库模型的设计与实现,包括:
1) 数据库系统需求分析;
2) 数据库概念模型设计;
3) 数据库逻辑模型设计;
4) 数据库物理模型的实现;
5) 完成不少于6000字的课程设计报告撰写。
四、应收集的资料及主要参考文献:
[1] 王珊, 萨师煊. 数据库系统概论(第4版). 北京:高教出版社,2006年5月.
[2] 赵韶平等.PowerDesigner系统分析与建模(第2版). 北京:清华大学出版社,2010.
[3] Data Modeling and Relational Database Design. Oracle Inc. 2001.
五、审核批准意见
教研室主任(签字)
设计总说明
随着高校学生的增多,食堂的管理工作变得越来越复杂,食品管理,消费管理等均成为了学校食堂需要解决的问题。很多用人工管理已经无法很好的解决,需要一整套的梳理才能使学生和食堂里以及食堂的管理者感觉到高效和统一。为便于管理的方便性和可行性。根据现阶段的应用需求的开发目标设计食品消费数据库管理系统。完成具有食品管理、消费管理、餐厅管理等相关功能的小型数据库管理应用系统。
本文简要介绍了利用PowerDesigner设计食品消费管理系统数据库设计与实现的过程,着重阐述了该系统开发的实现过程数据库设计部分,从系统的需求分析、概念模型设计、逻辑模型设计到物理数据库模型设计与实现等各环节都进行了较为详尽的分析与描述。
关键字:食品消费管理系统,PowerDesigner,数据库设计
目 录
1 绪论 1
1.1系统简介 1
1.2设计目的 1
1.3设计内容 2
2 需求分析 2
2.1 .需求分析的任务 2
2.2 系统数据流程分析 3
2.3 数据字典 4
3 概念模型设计 6
3.1 概念模型设计的方法和步骤 6
3.2 系统概念模型 9
4 逻辑模型设计 10
4.1 逻辑模型设计的方法 10
4.2 逻辑模型实现 14
4.3 数据完整性约束定义 14
5 物理数据库模型设计与实现 15
5.1 物理数据库模型的图示 15
5.2 物理数据库模型的详细表示 18
5.3 物理数据库模型的实现 18
总结 23
参考文献 36
1 绪论
1.1系统简介
该系统主要有人员管理、餐厅管理、食品管理、消费管理、用户管理等主要功能。分别主要有以下功能:
1)人员信息管理:按条件查询人员的基本信息,以及添加一个人员的基本信息,包括编号,姓名职务,对人员的信息进行更改和删除功能。
2)餐厅管理:查询餐厅的基本信息,以及插入新开餐厅的基本信息,包括餐厅编号,餐厅名称,日销售额,餐厅职工人数。还能对餐厅的基本信息进行更改及删除功能。
3)食品管理:查询食品的基本信息,以及插入新的食品的基本信息,包括食品编号,食品名称,食品类别,食品单价。
4)消费管理:按人员、时间、餐厅统计计算消费总额,同时还能按食品类别、时间、餐厅消费总额。
5)消费记录管理:生成消费记录。
6) 用户管理:用于管理进入这个系统的用户,包括新增用户,删除用户,以及修改用户信息。
1.2设计目的
依据现阶段食堂食品的实际业务情况,通过对整个系统的需求分析、概念模型设计、逻辑模型设计到物理数据库模型设计与实现等各环节进行分析与描述。从而以此为基础,建立起科学、高效的药店药品进销存管理系统,实现食品管理,餐厅管理以及消费管理的功能。最终达到方便管理人员对食品,消费等的管理,实现食堂管理的高效化和统一化,和提高管理方便性及可行性的目的。
1.3设计内容
本课程设计简要内容为利用PowerDesigner设计对食堂食品消费等管理系统数据库的过程,着重阐述了该系统开发的实现过程,从系统的需求分析、概念模型设计、逻辑模型设计到物理数据库模型设计与实现等各环节都进行了较为详尽的分析与描述。
2 需求分析
2.1 .需求分析的任务
2.1.1信息需求
系统主要信息需求有:
食品信息:食品编号,菜名,菜价,食品类型等。
员工信息:员工编号,员工姓名,员工职位,所在餐厅等。
餐厅信息:餐厅编号,餐厅名称,日销售额,职工人数等。
学生信息:学号,姓名等。
消费者信息:餐厅号,学号,菜编号,菜数量,消费时间,消费额,菜类型等。
管理员信息:管理员名字,管理员密码等。
2.1.2处理要求
系统主要处理要求有如下几点:
1)对基本信息管理:食品信息、员工信息、餐厅信息、消费者信息等;
2) 对菜品管理:菜品登记、菜品查询、菜品销售等;
3) 对销售管理:销售登记、销售记录查询、销售报表等。
2.2 系统数据流程分析
1)基本业务调查
对业务进行调查,得到其基本功能和业务处理流程如图2.2-1所示。
图2.2—1食品管理系统业务流程图
2)数据流程图
根据了解和调查结果,得到系统业务数据流程图如图2.2.2所示
图2.2—2 药店进销存管理系统数据流程图
2.3 数据字典
在数据流程图中,数据信息和处理过程需要通过数据字典才能描述清楚,因此在数据字典中主要对数据流程图中的数据流、数据存储和处理过程给出更详细、更准确的说明。
1)数据流定义
可以通过表格的形式给出数据流程图的主要数据流,如表2.1所示。
表2.1 XX系统主要数据流定义
序号
名称
位置
结构定义
最大数据流量
1
食品信息
2.2—1
食品编号,菜名,菜价
1000次/天
2
员工信息
2.2—1
员工编号,员工姓名,员工职位,
1000次/天
3
餐厅信息
2.2—1
餐厅编号,餐厅名称,
1000次/天
4
学生信息
2.2—1
学号,姓名等。
1000次/天
5
消费者信息
2.2—1
餐厅号,学号,菜编号,
1000次/天
2)数据存储定义
可以采用如下表格的形式给出系统的主要数据定义,如表2.2所示。
表2.2 XX系统主要数据存储定义
编号
名称
输入
输出
数据量
存取频度
存取方式
说明
D1
销售/退款
销售清单
销售登记表
25000条
1000次/天
检索查询处理
对于数据库的检索
D2
售出商品
销售记录
售出登记表
2500 0条
1000次/天
检索查询处理
对于数据库的检索
D3
录入系统
售出登记表
食品信息登记表
25000条
1000次/天
检索查询处理
对于数据库的检索
D4
制定菜单
销售登记表
菜单食品
25000条
1000次/天
检索查询处理
对于数据库的检索
3)处理过程
可以采用如下表格的形式给出系统的主要处理过程定义,如表2.3所示。
表2.3 XX系统主要处理过程定义
序号
处理过程名称
输入
输出
处理说明
P1.1
登记食品
菜品制作菜单
制作食品清单
进行制作菜品汇总
P1.2
销售食品
销售食品单
销售登记表
对销售进行汇总
P1.3
存储操作
菜品销售基本信息
销售清单
对所有的数据进行汇总,存储
3 概念模型设计
3.1 概念模型设计的方法和步骤
概念模型设计的过程及结果如下:
1)选择File New Model命令,弹出如图3.1—1窗口,在窗口选
择要建立的Concept Data Model。
图3.1—1
2)单击确定按钮,如图3.1—2所示的CDM工作区。
图3.1—2
3)单击工具窗口中的“实体”图标,再设计窗口的适当位置单击,在淡季的位置上将出现一个实体符号,如图3.1—3所示。
图3.1—3
4)在设计窗口中的空白区域右击使得光标变为箭头形状,然后选中该实体并双击,得到实体属性窗口,如图3.1—4所示。
图3.1—4
5)在name文档中输入实体姓名,在code文本框中输入实体代码,在Attributes选项卡中定义实体属性,如图3.1—5所示。
图3.1—5
注:其他实体建立方式同上,此处略过。
3.2 系统概念模型
CDM模型如下:
4 逻辑模型设计
4.1 逻辑模型设计的方法
由概念模型转化为逻辑模型的基本方法步骤如下:
1)打开CDM模型,选择Tools Generate Logic Data Model.命令,打开的LDM Generate Options,如图4.1—1所示。
图4.1—1
2)选择Detail选项卡,进行其他选项的设置,如图4.1—2所示。
图4.1—2
3)选择Selection选项卡,可以选择CDM、实体,如图4.1—3所示。
图4.1—3
4)单击“Tagert Model ”按钮可得到如图4.1—4窗口。
图4.1—4
5)单击“确定”按钮,开始生成LDM。
4.2 逻辑模型实现
4.3 数据完整性约束定义
根据上面的关系模式,数据库的完整性约束如下所示:
1) 实体完整性约束
食品信息(食品编号,菜名,菜价,食品类型)
员工信息(员工编号,员工姓名,员工职位,所在餐厅)
餐厅信息(餐厅编号,餐厅名称,日销售额,职工人数)
学生信息(学号,姓名)
消费者信息(餐厅号,学号,菜编号,菜数量,消费时间,消费额,菜类型)
管理员信息(管理员名字,管理员密码)
2)参照完整性约束
食品信息(食品编号,菜名,菜价,食品类型)
员工信息(员工编号,员工姓名,员工职位,所在餐厅,餐厅编号)
餐厅信息(餐厅编号,餐厅名称,日销售额,职工人数)
学生信息(学号,姓名,餐厅编号)
消费者信息(餐厅号,学号,菜编号,菜数量,消费时间,消费额,菜类型)
管理员信息(管理员名字,管理员密码)
3)用户自定义完整性约束
用户自定义约束如下:
学生姓名、菜名等均不能为空。
5 物理数据库模型设计与实现
5.1 物理数据库模型的图示
1)打开CDM模型,选择选择Tools Generate Physical Data Model.命令,打开的PDM Generate Options,如图5.1—1所示。
图5.1—1
2)选择Detail选项卡,进行其他选项的设置,如图5.1—2所示。
图5.1—2
3)选择“selection”选项卡,选择要转换为PDM的实体,如图5.1—3。
图5.1—3
4)点击“确定”按钮,开始生成PDM。
5)根据提示对出现的警告和错误进行修改。
PDM模型如下
5.2 物理数据库模型的详细表示
5.3 物理数据库模型的实现
下面给出了在SQL Server中调试正确的数据库及表和相关定义的SQL语句。
生成数据库的步骤及结果:
(1) 定义数据源
图5.3.—1
(2)
图5.3—2
(3)
图5.3—3
(4)生成物理数据库的设置选项
图5.3—4
图5.3—5
图5.3—6
生成表结构如下
图5.3—7
OOM模型如下
SQL语句如下:
/*==============================================================*/
/* DBMS name: Microsoft SQL Server 2005 */
/* Created on: 2013/1/4 9:26:00 */
/*==============================================================*/
if exists (select 1
from sys.sysreferences r join sys.sysobjects o on (o.id = r.constid and o.type = 'F')
where r.fkeyid = object_id('Relationship_1') and o.name = 'FK_RELATION_RELATIONS_消费者信息')
alter table Relationship_1
drop constraint FK_RELATION_RELATIONS_消费者信息
go
if exists (select 1
from sys.sysreferences r join sys.sysobjects o on (o.id = r.constid and o.type = 'F')
where r.fkeyid = object_id('Relationship_1') and o.name = 'FK_RELATION_RELATIONS_食品信息')
alter table Relationship_1
drop constraint FK_RELATION_RELATIONS_食品信息
go
if exists (select 1
from sys.sysreferences r join sys.sysobjects o on (o.id = r.constid and o.type = 'F')
where r.fkeyid = object_id('Relationship_2') and o.name = 'FK_RELATION_RELATIONS_餐厅信息')
alter table Relationship_2
drop constraint FK_RELATION_RELATIONS_餐厅信息
go
if exists (select 1
from sys.sysreferences r join sys.sysobjects o on (o.id = r.constid and o.type = 'F')
where r.fkeyid = object_id('Relationship_2') and o.name = 'FK_RELATION_RELATIONS_食品信息')
alter table Relationship_2
drop constraint FK_RELATION_RELATIONS_食品信息
go
if exists (select 1
from sys.sysreferences r join sys.sysobjects o on (o.id = r.constid and o.type = 'F')
where r.fkeyid = object_id('Relationship_4') and o.name = 'FK_RELATION_RELATIONS_食品信息')
alter table Relationship_4
drop constraint FK_RELATION_RELATIONS_食品信息
go
if exists (select 1
from sys.sysreferences r join sys.sysobjects o on (o.id = r.constid and o.type = 'F')
where r.fkeyid = object_id('Relationship_4') and o.name = 'FK_RELATION_RELATIONS_学生信息')
alter table Relationship_4
drop constraint FK_RELATION_RELATIONS_学生信息
go
if exists (select 1
from sys.sysreferences r join sys.sysobjects o on (o.id = r.constid and o.type = 'F')
where r.fkeyid = object_id('员工信息') and o.name = 'FK_员工信息_RELATIONS_餐厅信息')
alter table 员工信息
drop constraint FK_员工信息_RELATIONS_餐厅信息
go
if exists (select 1
from sys.sysreferences r join sys.sysobjects o on (o.id = r.constid and o.type = 'F')
where r.fkeyid = object_id('学生信息') and o.name = 'FK_学生信息_RELATIONS_餐厅信息')
alter table 学生信息
drop constraint FK_学生信息_RELATIONS_餐厅信息
go
if exists (select 1
from sysindexes
where id = object_id('Relationship_1')
and name = 'Relationship_1_FK'
and indid > 0
and indid < 255)
drop index Relationship_1.Relationship_1_FK
go
if exists (select 1
from sysindexes
where id = object_id('Relationship_1')
and name = 'Relationship_6_FK'
and indid > 0
and indid < 255)
drop index Relationship_1.Relationship_6_FK
go
if exists (select 1
from sysobjects
where id = object_id('Relationship_1')
and type = 'U')
drop table Relationship_1
go
if exists (select 1
from sysindexes
where id = object_id('Relationship_2')
and name = 'Relationship_2_FK'
and indid > 0
and indid < 255)
drop index Relationship_2.Relationship_2_FK
go
if exists (select 1
from sysindexes
where id = object_id('Relationship_2')
and name = 'Relationship_7_FK'
and indid > 0
and indid < 255)
drop index Relationship_2.Relationship_7_FK
go
if exists (select 1
from sysobjects
where id = object_id('Relationship_2')
and type = 'U')
drop table Relationship_2
go
if exists (select 1
from sysindexes
where id = object_id('Relationship_4')
and name = 'Relationship_4_FK'
and indid > 0
and indid < 255)
drop index Relationship_4.Relationship_4_FK
go
if exists (select 1
from sysindexes
where id = object_id('Relationship_4')
and name = 'Relationship_8_FK'
and indid > 0
and indid < 255)
drop index Relationship_4.Relationship_8_FK
go
if exists (select 1
from sysobjects
where id = object_id('Relationship_4')
and type = 'U')
drop table Relationship_4
go
if exists (select 1
from sysindexes
where id = object_id('员工信息')
and name = 'Relationship_3_FK'
and indid > 0
and indid < 255)
drop index 员工信息.Relationship_3_FK
go
if exists (select 1
from sysobjects
where id = object_id('员工信息')
and type = 'U')
drop table 员工信息
go
if exists (select 1
from sysindexes
where id = object_id('学生信息')
and name = 'Relationship_5_FK'
and indid > 0
and indid < 255)
drop index 学生信息.Relationship_5_FK
go
if exists (select 1
from sysobjects
where id = object_id('学生信息')
and type = 'U')
drop table 学生信息
go
if exists (select 1
from sysobjects
where id = object_id('消费者信息')
and type = 'U')
drop table 消费者信息
go
if exists (select 1
from sysobjects
where id = object_id('管理员信息')
and type = 'U')
drop table 管理员信息
go
if exists (select 1
from sysobjects
where id = object_id('食品信息')
and type = 'U')
drop table 食品信息
go
if exists (select 1
from sysobjects
where id = object_id('餐厅信息')
and type = 'U')
drop table 餐厅信息
go
/*==============================================================*/
/* Table: Relationship_1 */
/*==============================================================*/
create table Relationship_1 (
餐厅号 char(10) not null,
食品编号 char(8) not null,
constraint PK_RELATIONSHIP_1 primary key nonclustered (餐厅号, 食品编号)
)
go
/*==============================================================*/
/* Index: Relationship_6_FK */
/*==============================================================*/
create index Relationship_6_FK on Relationship_1 (
食品编号 ASC
)
go
/*==============================================================*/
/* Index: Relationship_1_FK */
/*==============================================================*/
create index Relationship_1_FK on Relationship_1 (
餐厅号 ASC
)
go
/*==============================================================*/
/* Table: Relationship_2 */
/*==============================================================*/
create table Relationship_2 (
餐厅编号 char(10) not null,
食品编号 char(8) not null,
constraint PK_RELATIONSHIP_2 primary key nonclustered (餐厅编号, 食品编号)
)
go
/*==============================================================*/
/* Index: Relationship_7_FK */
/*==============================================================*/
create index Relationship_7_FK on Relationship_2 (
食品编号 ASC
)
go
/*==============================================================*/
/* Index: Relationship_2_FK */
/*==============================================================*/
create index Relationship_2_FK on Relationship_2 (
餐厅编号 ASC
)
go
/*==============================================================*/
/* Table: Relationship_4 */
/*==============================================================*/
create table Relationship_4 (
食品编号 char(8) not null,
学号 char(10) not null,
constraint PK_RELATIONSHIP_4 primary key nonclustered (食品编号, 学号)
)
go
/*==============================================================*/
/* Index: Relationship_8_FK */
/*==============================================================*/
create index Relationship_8_FK on Relationship_4 (
学号 ASC
)
go
/*==============================================================*/
/* Index: Relationship_4_FK */
/*==============================================================*/
create index Relationship_4_FK on Relationship_4 (
食品编号 ASC
)
go
/*==============================================================*/
/* Table: 员工信息 */
/*==============================================================*/
create table 员工信息 (
员工编号 char(10) not null,
餐厅编号 char(10) null,
员工姓名 char(10) null,
员工职位 char(10) null,
所在餐厅 char(10) null,
constraint PK_员工信息 primary key nonclustered (员工编号)
)
go
展开阅读全文