zoukankan      html  css  js  c++  java
  • 口罩预约管理系统——数据库设计(前端+PHP+MySQL)

    目录

    一、背景

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

    三、数据库设计

    四、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 版权协议,转载请附上原文出处链接和本声明。
    本文链接:http://blog.csdn.net/Charzous/article/details/108576174
  • 相关阅读:
    20182324 2019-2020-1 《数据结构与面向对象程序设计》实验6报告
    20182324 2019-2020-1 《数据结构与面向对象程序设计》实验5报告
    20182324 2019-2020-1 《数据结构与面向对象程序设计》第6周学习总结
    Git fetch和git pull的区别
    第6章 线索二叉树
    第三章 线性表---链式存储结构(静态链表)
    第6章 树---二叉树
    第6章 树
    第4章 栈与队列-----栈
    第4章 栈与队列-----队列
  • 原文地址:https://www.cnblogs.com/chenzhenhong/p/13677690.html
Copyright © 2011-2022 走看看