目录

一、背景

二、口罩预约管理系统介绍

三、数据库设计

四、MySQL创建数据库以及数据表

五、数据库设计总结

一、背景

  2020年的疫情影响了我们的生产生活,政府不断加大力度联防联控,遏制疫情的蔓延势头,全国人民共同加入抗击疫情的战“疫”队伍。疫情信息发布、物资调配保障显得尤其重要,信息越详细,物资保障越充分,公众的疑虑就越少。“疫情地图”、“实时信息”、“口罩预约”的各种 APP、小程序和系统应运而生,不断规范化,纳入疫情发布的官方渠道。这些举措让公众能全方位获取疫情防控进展的信息,及时、准确、全面显得至关重要。

  另外,这个小项目也是过去许久,疫情期间也有在市政官方系统预约口罩的经历,(・。・)没有中签过。不过因此对它的预约系统感兴趣,考虑自己可以简单做一个web网站版本的预约管理系统,实现基本功能,也正好课程需要完成一个数据库设计,然后做一个相对完整的应用系统,所以,这个小项目就此开始。

二、口罩预约管理系统介绍

1、功能模块及特点

本系统主要任务是实现用户口罩预约、市政人员(管理员)分配以及快递员接单配送的比较完整的功能。市政人员(管理员),普通用户,快递员这三种用户权限,功能明确,各自独立,而又存在着一定的联系,让政府更方便地管理、更高效地分配。

具体模块解析如下:

  1. 普通用户模块:创建账号,登录系统填写预约信息确认提交,查看订单状态,修改订单预约信息,修改个人注册信息。
  2. 市政人员(管理员)模块:查询已注册用户信息,修改或删除用户信息,对用户的预约订单进行合理分配,包括审核以及分配快递员。管理每种类型口罩,查询库存数量,合理分配用户预约的口罩数量,按需求查看订单的配送状态。
  3. 快递员模块:查看分配到的订单,选择接单配送,完成配送选择关单,按订单状态查看订单,统计完成的订单数量。

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

版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。

口罩预约管理系统——数据库设计(前端+PHP+MySQL)的更多相关文章

  1. 口罩预约管理系统——系统网站实现(前端+PHP+MySQL)

    口罩预约管理系统网站实现 一.前言 二.系统登陆逻辑及界面实现 三.用户模块 1.用户预约系统界面 2.用户查看我的订单界面 3.用户修改预约信息 四.管理员模块 1.管理员登陆界面 2.查看用户预约 ...

  2. Microsoft-pubs(图书馆管理系统)-数据库设计

    ylbtech-DatabaseDesgin:微软提供-pubs(图书馆管理系统)-数据库设计   1.A,数据库关系图 1.B,数据库设计脚本 -- ======================== ...

  3. ylbtech-WelfareSystem(福利发放管理系统)-数据库设计

    ylbtech-DatabaseDesgin:ylbtech-WelfareSystem(福利发放管理系统)-数据库设计 1.A,数据库关系图(Database Diagram) 1.B,数据库设计脚 ...

  4. XXX银行人事管理系统-数据库设计

    1. 用户.权限.角色关系用户基本信息 userinfo [人员表]权限表actions[权限表]员工类型表usertype [管理组表]权限映射表actionmapping [权限映射表]权限分栏表 ...

  5. day39 python 学习 数据库学习 五个约束,数据库设计(一对一,一对多等等)

    删除重复数据:  注意数据库不能又查又删 *******#删除作者为重复数据并保留ID最大的是数据 delete from ren where author in (select * from(sel ...

  6. MySQL 数据库设计 笔记与总结(3)物理设计

    [物理设计的工作] ① 选择合适的数据库管理系统:Oracle,SQLServe,MySQL,PgSQL ② 定义数据库.表及字段的命名规范 ③ 根据所选的 DBMS 系统选择合适的字段类型 ④ 反范 ...

  7. ORM框架SQLAlchemy与权限管理系统的数据库设计

    SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用对象关系映射进行数据库操作,即:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果. 执行流 ...

  8. mysql学习5:数据库设计

    mysql学习5:数据库设计 本文转载:https://blog.51cto.com/9291927/2087925:原创为天山老妖S 一.数据库设计简介 按照规范设计,将数据库的设计过程分为六个阶段 ...

  9. MySQL数据库设计与开发规范

    目录 1. 规范背景与目的 2. 设计规范 2.1. 数据库设计 2.1.1. 库名 2.1.2. 表结构 2.1.3. 列数据类型优化 2.1.4. 索引设计 2.1.5. 分库分表.分区表 2.1 ...

随机推荐

  1. UVA1395 Slim Span(枚举最小生成树)

    题意: 求最小生成树中,最大的边减去最小的边 最小值. 看了题解发现真简单=_= 将每条边进行从小到大排序,然后从最小到大一次枚举最小生成树,当构成生成树的时候,更新最小值 #include < ...

  2. Docker / CI / CD

    CI Weekly #6 | 再谈 Docker / CI / CD 实践经验   CI Weekly 围绕『 软件工程效率提升』 进行一系列技术内容分享,包括国内外持续集成.持续交付,持续部署.自动 ...

  3. ASP.NET MVC 4 跨域

    <system.webServer> <httpProtocol> <customHeaders> <add name="Access-Contro ...

  4. XML文件的读取、序列化和反序列化操作

    public class XmlHelper { //从xml中获取MsgType public static string XMLSelect(string XML) { XmlDocument x ...

  5. PE查看器

    主要界面如下: 主要代码如下: BOOL CPEParseDlg::OnInitDialog() { CDialog::OnInitDialog(); // 设置此对话框的图标.当应用程序主窗口不是对 ...

  6. 高性能Mysql主从架构的复制原理及配置详解(转)

    温习<高性能MySQL>的复制篇. 1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台 ...

  7. jvm工具

    jvm工具 知识,经验是基础,数据是依据,工具是运营知识处理数据的手段 数据:运行日志.异常堆栈.GC日志.线程快照.堆转存储快照 JPS:虚拟机进程状况工具 jvm process status t ...

  8. Redis--Latest Windows Version

    Redis Windows Ver https://github.com/MSOpenTech/redis/releases service-install.batredis-server.exe - ...

  9. struts加载spring

    为了在Struts中加载Spring context,需要在struts-config.xml文件中加入如下部分: <struts-config> <plug-in classNam ...

  10. POJ 3522 Slim Span(极差最小生成树)

    Slim Span Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 9546   Accepted: 5076 Descrip ...