口罩预约管理系统——数据库设计(前端+PHP+MySQL)
目录
一、背景
2020年的疫情影响了我们的生产生活,政府不断加大力度联防联控,遏制疫情的蔓延势头,全国人民共同加入抗击疫情的战“疫”队伍。疫情信息发布、物资调配保障显得尤其重要,信息越详细,物资保障越充分,公众的疑虑就越少。“疫情地图”、“实时信息”、“口罩预约”的各种 APP、小程序和系统应运而生,不断规范化,纳入疫情发布的官方渠道。这些举措让公众能全方位获取疫情防控进展的信息,及时、准确、全面显得至关重要。
另外,这个小项目也是过去许久,疫情期间也有在市政官方系统预约口罩的经历,(・。・)没有中签过。不过因此对它的预约系统感兴趣,考虑自己可以简单做一个web网站版本的预约管理系统,实现基本功能,也正好课程需要完成一个数据库设计,然后做一个相对完整的应用系统,所以,这个小项目就此开始。
二、口罩预约管理系统介绍
1、功能模块及特点
本系统主要任务是实现用户口罩预约、市政人员(管理员)分配以及快递员接单配送的比较完整的功能。市政人员(管理员),普通用户,快递员这三种用户权限,功能明确,各自独立,而又存在着一定的联系,让政府更方便地管理、更高效地分配。
具体模块解析如下:
- 普通用户模块:创建账号,登录系统填写预约信息确认提交,查看订单状态,修改订单预约信息,修改个人注册信息。
- 市政人员(管理员)模块:查询已注册用户信息,修改或删除用户信息,对用户的预约订单进行合理分配,包括审核以及分配快递员。管理每种类型口罩,查询库存数量,合理分配用户预约的口罩数量,按需求查看订单的配送状态。
- 快递员模块:查看分配到的订单,选择接单配送,完成配送选择关单,按订单状态查看订单,统计完成的订单数量。
2、系统结构
系统功能结构图:
三、数据库设计
在口罩预约管理系统初期阶段,我们需要设计好系统存取数据信息的一个数据库,数据库设计也是一个重点难点,完整的数据库基本满足设计基本要求,包括数据库关系模式分析,处理好函数依赖问题,还有关系模式至少满足第三范式等。学过数据库系统概论会基本了解这些知识以及它的重要性和难度。
以目前个人能力,这个系统数据库的建立暂时满足最基本的要求,初步进行了函数依赖分析,另外根据所需功能,关系模式不是很复杂,第三范式的满足只存在于部分关系模式中。
我使用的是MySQL数据库,前期建立数据字典,然后以此进一步建立数据库及数据表,确定口罩预约管理数据库关系模式,分析关系模式的函数依赖和范式要求。接下来将具体介绍数据字典、数据模型和概念模型(E-R 图)。
1、数据字典
根据系统功能需求,系统数据库包含了8个数据表,详细内容(字段、数据类型、码)如下数据字典:
1、admin表
属性名 |
数据描述 |
数据类型 |
是否为空 |
备注 |
work_id |
管理员账号 |
varchar(32) |
不允许 |
主码 |
ad_name |
管理员名 |
varchar(32) |
不允许 |
|
pwd |
密码 |
varchar(32) |
不允许 |
|
phone |
电话 |
varchar(32) |
2、users表
属性名 |
数据描述 |
数据类型 |
是否为空 |
备注 |
user_id |
用户账号 |
varchar(32) |
不允许 |
主码 |
user_name |
姓名 |
varchar(32) |
不允许 |
|
ID |
身份证号 |
varchar(32) |
不允许 |
|
pwd |
密码 |
varchar(32) |
不允许 |
|
register_date |
注册时间 |
datetime |
3、deliver表
属性名 |
数据描述 |
数据类型 |
是否为空 |
备注 |
deliver_id |
账号 |
varchar(32) |
不允许 |
主码 |
deliver_name |
姓名 |
varchar(32) |
不允许 |
|
phone |
联系方式 |
varchar(32) |
||
pwd |
密码 |
varchar(32) |
不允许 |
4、mask表
属性名 |
数据描述 |
数据类型 |
是否为空 |
备注 |
mask_type |
类型号 |
varchar(32) |
不允许 |
主码 |
m_name |
名称 |
varchar(32) |
不允许 |
|
remain_num |
库存量 |
int(11) |
不允许 |
|
price |
价格 |
int(11) |
5、info表
属性名 |
数据描述 |
数据类型 |
是否为空 |
备注 |
order_id |
订单号 |
varchar(32) |
不允许 |
主码 |
user_id |
用户账号 |
varchar(32) |
不允许 |
外码,参照users |
user_name |
用户姓名 |
varchar(32) |
不允许 |
|
allocate_num |
分配数量 |
int(11) |
不允许 |
|
phone |
联系方式 |
varchar(32) |
不允许 |
|
address |
配送地址 |
varchar(32) |
不允许 |
|
status |
订单状态 |
varchar(32) |
不允许 |
|
re_date |
下单日期 |
datetime |
6、reserve表
属性名 |
数据描述 |
数据类型 |
是否为空 |
备注 |
user_id |
预约账号 |
varchar(32) |
不允许 |
主码,参照users |
re_date |
下单日期 |
datetime |
不允许 |
主码 |
mask_type |
类型 |
varchar(32) |
不允许 |
外码,参照mask |
ID |
身份证号 |
varchar(32) |
不允许 |
|
r_num |
预约数量 |
int(11) |
不允许 |
|
ex_date |
期望到货日 |
date |
||
phone |
联系方式 |
varchar(32) |
||
address |
地址 |
varchar(32) |
7、allocate表
属性名 |
数据描述 |
数据类型 |
是否为空 |
备注 |
work_id |
分配人 |
varchar(32) |
不允许 |
主码,参照admin |
order_id |
订单号 |
varchar(32) |
不允许 |
主码,参照order |
allocate_time |
分配日期 |
datetime |
||
deliver_id |
快递员 |
varchar(32) |
不允许 |
主码,参照deliver |
8、take表
属性名 |
数据描述 |
数据类型 |
是否为空 |
备注 |
deliver_id |
快递员账号 |
varchar(32) |
不允许 |
主码,参照deliver |
order_id |
订单号 |
varchar(32) |
不允许 |
主码,参照order |
take_date |
接单日期 |
datetime |
||
finish_date |
关单日期 |
datetime |
2、口罩预约数据库关系模式(数据模型)
各个数据表包含属性,红色表示该关系模式的主码。
管理员 (管理员账号, 密码, 管理员姓名, 电话)
用户 (用户账号, 密码, 用户姓名, 身份证号)
快递员 (快递员账号, 密码, 快递员姓名, 电话, 地址)
口罩 (口罩类型, 仓库, 存货量, 单位价格)
订单信息 (订单号, 用户账号, 用户姓名,口罩类型, 已分配数量, 联系方式, 配 送地址, 订单状态, 预约时间)
预约 (用户帐号, 口罩类型, 预约时间, 期望到货日期, 预约数量, 电话, 地址)
分配 (管理员账号, 订单号, 快递员账号, 分配日期)
接关单 (快递员账号, 订单号, 快递员姓名, 接单时间, 关单时间)
3、E-R图(概念模型)
E-R图能够更加直观的展示数据关系模式之间的联系,下面则是自己画的:
这个是建立数据库后系统生成的:
四、MySQL创建数据库以及数据表
这个步骤开始对设计好的关系模式在MySQL上部署数据库以及建立各个数据表。建表代码如下:
- 建立数据库
create database maskorder;
- admin数据表(管理员表)
create table admin(work_id varchar(32) primary key not null, pwd varchar(32) not null, ad_name varchar(32), phone varchar(32));
- users数据表(用户表)
create table admin(work_id varchar(32) primary key not null,
pwd varchar(32) not null,
ad_name varchar(32),
phone varchar(32));
- delivers数据表(快递员表)
create table delivers(deliver_id varchar(32) primary key not null, pwd varchar(32) not null, deliver_name varchar(32) not null, phone varchar(32));
- reserve数据表(用户预约表)
create table reserve(user_id varchar(32) not null, re_date datetime not null, foreign key (user_id) references users(user_id), primary key(user_id,re_date), ID varchar(32) not null, r_num int not null, ex_date date not null, phone varchar(32) not null, address varchar(32) not null);
- mask数据表(口罩信息表)
create table mask(mask_type varchar(32) primary key not null, store varchar(32) not null, remain_num int not null, price int not null);
- info数据表(订单表)
create table info(order_id varchar(32) primary key not null, user_id varchar(32) not null, foreign key (user_id) references users(user_id), user_name varchar(32) not null, allocate_num int not null, statue varchar(32) not null, re_date datetime not null, phone varchar(32) not null, address varchar(32) not null );
- allocate数据表(管理员分配表)
create table allocate(work_id varchar(32) not null, order_id varchar(32) not null, deliver_id varchar(32) not null, allocate_time datetime not null, primary key (work_id,order_id), foreign key (work_id) references admin(work_id), foreign key (order_id) references info(order_id) );
- take数据表(快递员接关单表)
create table take(deliver_id varchar(32) not null, order_id varchar(32) not null, deliver_name varchar(32) not null, take_time datetime not null, finish_time datetime not null, primary key (deliver_id,order_id), foreign key (deliver_id) references delivers(deliver_id), foreign key (order_id) references info(order_id) );
- deli_order视图(快递员查看订单表)
create view deli_order as select order_id,mask_type,allocate_num,phone,addresss,statue,re_date from info;
五、数据库设计总结
在系统开发之前,数据库的设计是首要并且关键的一个步骤,对于此系统的数据表,上面介绍的是最后确定的数据表。数据库设计并不能一蹴而就,这里总结一下我不断修改的想法过程。
第一次根据系统所需要的数据建立关系模式,在保证函数依赖和无损连接的情况下,将属性phone、address放入reserve表中,users表和reserve的关系模式满足了第三范式的要求。起初设计表时候考虑是否将reserve和info合并,后来发现在物理设计和实际场景下,订单信息表info由用户预约后的reserve表生成,并且加入特有的属性订单状态status、口罩分配数量allocate_num和订单号order_id。
至此从reserve表脱离出来,后期用户、管理员、快递员对订单的查询的操作,实现了模块化的处理,不仅减少了表的连接,而且物理操作(前后端编程)更加容易,因为数据库设计中也要符合物理上的要求,所以关系模式分解为两个表,虽然增加了部分数据上的冗余,但是保证信息的模块化和实际应用的合理性。
在口罩预约管理系统数据库设计中遇到了这些问题,后来经过了理论上的分析和实际运用,解决了设计上的问题,认识到了数据模型建立的关键性。目前该数据库还可以进一步完善。
这一篇主要讲的是口罩预约管理系统定位的功能模块以及数据库设计的具体过程,这也是完成这个系统第一阶段的完整部分,下一篇将介绍系统前后端的搭建以及数据库连接,使用到的知识包括前端(HTML+CSS+Javascript)、后端(PHP)和MySQL数据库的操作,目的是建立简洁、包含基本功能的(口罩预约管理)应用系统。
本篇的口罩预约管理系统数据库maskOrder.txt已上传,可直接导入本地MySQL数据库。
系列文章:
(一)口罩预约管理系统——数据库设计(前端+PHP+MySQL)
(二)口罩预约管理系统——系统网站实现(前端+PHP+MySQL)
我的博客园:https://www.cnblogs.com/chenzhenhong/p/13677690.html
我的CSDN博客:https://blog.csdn.net/Charzous/article/details/108576174
口罩预约管理系统——数据库设计(前端+PHP+MySQL)的更多相关文章
- 口罩预约管理系统——系统网站实现(前端+PHP+MySQL)
口罩预约管理系统网站实现 一.前言 二.系统登陆逻辑及界面实现 三.用户模块 1.用户预约系统界面 2.用户查看我的订单界面 3.用户修改预约信息 四.管理员模块 1.管理员登陆界面 2.查看用户预约 ...
- Microsoft-pubs(图书馆管理系统)-数据库设计
ylbtech-DatabaseDesgin:微软提供-pubs(图书馆管理系统)-数据库设计 1.A,数据库关系图 1.B,数据库设计脚本 -- ======================== ...
- ylbtech-WelfareSystem(福利发放管理系统)-数据库设计
ylbtech-DatabaseDesgin:ylbtech-WelfareSystem(福利发放管理系统)-数据库设计 1.A,数据库关系图(Database Diagram) 1.B,数据库设计脚 ...
- XXX银行人事管理系统-数据库设计
1. 用户.权限.角色关系用户基本信息 userinfo [人员表]权限表actions[权限表]员工类型表usertype [管理组表]权限映射表actionmapping [权限映射表]权限分栏表 ...
- day39 python 学习 数据库学习 五个约束,数据库设计(一对一,一对多等等)
删除重复数据: 注意数据库不能又查又删 *******#删除作者为重复数据并保留ID最大的是数据 delete from ren where author in (select * from(sel ...
- 毕业设计java实验室预约管理系统SSH机房预约系统javaweb机房实验室排课系统mysql机房管理系统 实验室管理系统 课程设计 代码讲解 调试运行
毕业设计java实验室预约管理系统SSH机房预约系统javaweb机房实验室排课系统mysql机房管理系统 实验室管理系统 课程设计 代码讲解 调试运行 注意:该项目只展示部分功能,如需了解,评论区咨 ...
- MySQL 数据库设计 笔记与总结(3)物理设计
[物理设计的工作] ① 选择合适的数据库管理系统:Oracle,SQLServe,MySQL,PgSQL ② 定义数据库.表及字段的命名规范 ③ 根据所选的 DBMS 系统选择合适的字段类型 ④ 反范 ...
- ORM框架SQLAlchemy与权限管理系统的数据库设计
SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用对象关系映射进行数据库操作,即:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果. 执行流 ...
- mysql学习5:数据库设计
mysql学习5:数据库设计 本文转载:https://blog.51cto.com/9291927/2087925:原创为天山老妖S 一.数据库设计简介 按照规范设计,将数据库的设计过程分为六个阶段 ...
随机推荐
- Spring Boot系列(三):Spring Boot整合Mybatis源码解析
一.Mybatis回顾 1.MyBatis介绍 Mybatis是一个半ORM框架,它使用简单的 XML 或注解用于配置和原始映射,将接口和Java的POJOs(普通的Java 对象)映射成数据库中的记 ...
- linux驱动之模块化驱动Makefile
本文摘自http://blog.csdn.net/lufeiop02/article/details/6446343 Linux驱动一般以模块module的形式来加载,首先需要把驱动编译成模块的形式. ...
- hbase运行流程图
hbase运行流程图
- Jmeter系列(56)- 详解 Weighted Switch Controller 权重控制器
如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html 简单介绍 它能分配其子项目(Child ...
- Java树形结构中根据父类节点查找全部子类节点
上一篇文章介绍了两种树形结构数据整合json格式的方法,第一种方法中有根据父类获取全部子类的方法,这里单独拿出来再说一下. 仍然是利用递归来整合,代码如下: //根据父节点获取全部子节点 public ...
- 四则运算(C语言实现)
四则运算(c语言实现) 合伙人:魏甫——3118004973 ,温钦益——3118004975 https://github.com/iamdate/work/tree/master 一.项目及其要 ...
- vscode 安装go插件失败后,最简单的方法
vscode 安装go插件 参考: https://github.com/goproxy/goproxy.cn/blob/master/README.zh-CN.md https://goproxy. ...
- Mysqldump备份提示没有权限
在使用mysqldump备份的时候如果提示没有权限,执行以下命令 grant select on mysql.proc to 'your-mysqldump-user' 转自https://stack ...
- 从零开始的SpringBoot项目 ( 七 ) 统一返回结果集Result 和 异常处理
import java.io.Serializable; import lombok.Data; import org.springframework.http.HttpStatus; @Data p ...
- MySQL 字符类型
字符类型 MySQL提供了多种关于字符存储的类型,但是在大多数情况下我们只使用char和varchar即可 类型 大小 用途 CHAR 0-255字节 定长字符串 VARCHAR 0-65535 字节 ...