一、需求分析

该数据库的目的是,管理学校餐饮系统。实现对就餐者(教职工、学生)消费,食堂窗口收益,工作人员工作等信息的统计、管理。待实现的功能主要有:
1、就餐者凭饭卡在食堂消费就餐,每张饭卡与每个就餐者唯一对应。饭卡中记录有持有者的个人信息及充值情况(余额)等。
2、学校有多个校区,每个校区又有多个食堂。就餐者可根据便利情况自由选择,在任意食堂的任意窗口消费就餐。
3、每个食堂中有多个窗口,每个窗口又有多种菜品。窗口有卡机,供就餐者刷卡消费。在相应窗口工作的多名工作人员,均可操作卡机,并在卡机上查看盈利情况。
4、每次刷卡消费时,通过卡机,从就餐者饭卡中扣费,并增加至窗口盈利情况中。刷卡消费成功,卡机滴声提示,若饭卡中余额不足,消费失败,卡机也显示告知。
5、就餐者可根据信息,从网上查到自己每次的消费就餐记录,包括什么时间在哪个食堂的哪个窗口,消费了价值多少的菜品;工作人员可查到自己所在窗口的收益情况,包括什么时间售出了价值多少的菜品;管理人员可查看并修改所有信息,包括就餐者的个人信息、消费情况、充值情况,窗口的基本信息、盈利情况,工作人员的个人信息等。

二、概念设计

1、实体属性

该数据库包括六个实体:就餐者、食堂、窗口、菜品、工作人员、用户

(1)、就餐者(包括教职工和学生),属性包括:证件号(及教职工的工号和学生的学号)、姓名、性别、类型(即为老师还是学生)、院系、余额

(2)、食堂,属性包括:名称、所在校区

mysql 餐饮商品 与规格设计 餐饮数据库_数据库


(2)、食堂,属性包括:名称、所在校区

mysql 餐饮商品 与规格设计 餐饮数据库_传递函数依赖_02


(3)、窗口,属性包括:名称、所在食堂、盈利

mysql 餐饮商品 与规格设计 餐饮数据库_传递函数依赖_03


(4)、菜品,属性包括:名称、所属窗口、价格

mysql 餐饮商品 与规格设计 餐饮数据库_mysql 餐饮商品 与规格设计_04


(5)、工作人员,属性包括:工号、姓名、性别、所在窗口

mysql 餐饮商品 与规格设计 餐饮数据库_传递函数依赖_05


(6)、用户,属性包括:用户名、密码、权限(用户名,对教职工来说是工号,对学生来说是学号,对管理员来说是NULL)

mysql 餐饮商品 与规格设计 餐饮数据库_主属性_06


2、实体联系

(1)、一个就餐者一次购买一种或多种菜品,“消费”关系,一对多,此关系具有属性“消费时间”

(2)、一种菜品属于一个窗口,一个窗口有多种菜品,“属于”关系,一对多

(3)、一个窗口位于一个食堂内,一个食堂有多个窗口,“属于”关系,一对多

(4)、一个工作人员在一个窗口工作,一个窗口有多名工作人员,“工作”关系,一对多,此关系具有属性“工作时间”

(5)、就餐者、工作人员、管理者均为用户,“属于”关系,一对一

mysql 餐饮商品 与规格设计 餐饮数据库_数据库_07


3、完整的E-R图

(1)、合成初步E-R图

mysql 餐饮商品 与规格设计 餐饮数据库_主属性_08


(2)、消除冲突,设计基本E-R图

菜品的名称、窗口的名称、食堂的名称均称为“名称”,存在命名冲突。为消除冲突,分别改为菜品名、窗口名、食堂名

mysql 餐饮商品 与规格设计 餐饮数据库_主属性_09

三、逻辑设计

转化为关系模式:
1、就餐者(证件号,姓名,性别,类型,院系,余额)
R1(U1,F1)
U1={证件号,姓名,性别,类型,院系,余额}
F1={证件号->姓名,证件号->性别,证件号->类型,证件号->院系,证件号->余额}
候选码:证件号
主属性:证件号
非主属性:姓名,性别,类型,院系,余额
不存在非主属性对码的部分函数依赖,不存在非主属性对码的传递函数依赖,不存在主属性对码的部分和传递函数依赖,不存在非平凡且非函数依赖的多值依赖
达到4NF

2、食堂(食堂名,所在校区)
R2(U2,F2)
U2={食堂名,所在校区}
F2={食堂名->所在校区}
候选码:食堂名
主属性:食堂名
非主属性:所在校区
不存在非主属性对码的部分函数依赖,不存在非主属性对码的传递函数依赖,不存在主属性对码的部分和传递函数依赖,不存在非平凡且非函数依赖的多值依赖
达到4NF

3、窗口(窗口名,食堂名,盈利)
R3(U3,F3)
U3={窗口名,食堂名,盈利}
F3={窗口名->食堂名,窗口名->盈利}
候选码:窗口名
外码:食堂名
主属性:窗口名
非主属性:食堂名,盈利
不存在非主属性对码的部分函数依赖,不存在非主属性对码的传递函数依赖,不存在主属性对码的部分和传递函数依赖,不存在非平凡且非函数依赖的多值依赖
达到4NF

4、菜品(菜品名,窗口名,价格)
R4(U4,F4)
U4={菜品名,窗口名,价格}
F4={菜品名->窗口名,菜品名->价格}
候选码:菜品名
外码:窗口名
主属性:菜品名
非主属性:窗口名,价格
不存在非主属性对码的部分函数依赖,不存在非主属性对码的传递函数依赖,不存在主属性对码的部分和传递函数依赖,不存在非平凡且非函数依赖的多值依赖
达到4NF

5、工作人员(工号,姓名,性别,窗口名,工作时间)
R5(U5,F5)
U5={工号,姓名,性别,窗口名,工作时间}
F5={工号->姓名,工号->性别,工号->窗口名,工号->工作时间}
候选码:工号
外码:窗口名
主属性:工号
非主属性:姓名,性别,窗口名,工作时间
不存在非主属性对码的部分函数依赖,不存在非主属性对码的传递函数依赖,不存在主属性对码的部分和传递函数依赖,不存在非平凡且非函数依赖的多值依赖
达到4NF

6、用户(用户名,密码,权限)
R6(U6,F6)
U6={用户名,密码,权限}
F6={用户名->密码,用户名->权限}
候选码:用户名
主属性:用户名
非主属性:密码,权限
不存在非主属性对码的部分函数依赖,不存在非主属性对码的传递函数依赖,不存在主属性对码的部分和传递函数依赖,不存在非平凡且非函数依赖的多值依赖
达到4NF

7、消费(证件号,姓名,菜品名,消费时间)
R7(U7,F7)
U7={证件号,姓名,菜品名,消费时间}
F7={证件号->姓名,证件号、菜品名->消费时间}
候选码:证件号、菜品名
外码:证件号、菜品名
主属性:证件号、菜品名
非主属性:姓名、消费时间
不存在非主属性对码的部分函数依赖,不存在非主属性对码的传递函数依赖,不存在主属性对码的部分和传递函数依赖,不存在非平凡且非函数依赖的多值依赖
达到4NF

建立视图:
1、就餐者信息视图
此视图用于管理者查看就餐者信息,包括:证件号,姓名,性别,类型,院系,余额,菜品名,消费时间
2、窗口信息视图
此视图用于管理者查看窗口信息,包括:窗口名,食堂名,盈利,菜品名,消费时间
3、消费信息视图
此视图用于就餐者查看消费信息,包括:证件号,余额,窗口名,菜品名,消费时间
4、盈利信息视图
此视图用于工作人员查看盈利信息,:包括:盈利,菜品名,消费时间

四、物理设计

1、就餐者

mysql 餐饮商品 与规格设计 餐饮数据库_主属性_10


2、食堂

mysql 餐饮商品 与规格设计 餐饮数据库_非主属性_11


3、窗口

mysql 餐饮商品 与规格设计 餐饮数据库_非主属性_12


4、菜品

mysql 餐饮商品 与规格设计 餐饮数据库_非主属性_13


5、工作人员

mysql 餐饮商品 与规格设计 餐饮数据库_非主属性_14


6、用户

mysql 餐饮商品 与规格设计 餐饮数据库_非主属性_15


7、消费

mysql 餐饮商品 与规格设计 餐饮数据库_mysql 餐饮商品 与规格设计_16


(注:就只是进行了理论设计,还没有具体代码实现啦)