支付微视角 發表於 2020-9-16 10:29:00

口罩预约管理系统——数据库设计(前端+PHP+MySQL)

<p><span style="font-size: 18px"><strong>目录</strong></span></p>
<p>一、背景</p>
<p>二、口罩预约管理系统介绍</p>
<p>三、数据库设计</p>
<p>四、 MySQL创建数据库以及数据表</p>
<p>五、数据库设计总结</p>
<p>&nbsp;</p>
<p><span style="color: rgba(255, 102, 0, 1)"><strong>本系统项目源码已经上传CSDN资源啦,有需要可以下载!</strong></span>传送门&nbsp;(https://download.csdn.net/download/Charzous/18776350)</p>
<p><img src="https://img2020.cnblogs.com/blog/1496983/202105/1496983-20210529221050182-1117429606.png" alt="" width="692" height="234" loading="lazy"></p>
<h1>一、背景</h1>
<p><span style="font-size: 16px">  2020年的疫情影响了我们的生产生活,政府不断加大力度联防联控,遏制疫情的蔓延势头,全国人民共同加入抗击疫情的战“疫”队伍。疫情信息发布、物资调配保障显得尤其重要,信息越详细,物资保障越充分,公众的疑虑就越少。<strong>“疫情地图”、“实时信息”、“口罩预约”的各种 APP、小程序和系统应运而生</strong>,不断规范化,纳入疫情发布的官方渠道。这些举措让公众能全方位获取疫情防控进展的信息,及时、准确、全面显得至关重要。</span></p>
<p><span style="font-size: 16px">  另外,这个小项目也是过去许久,疫情期间也有在市政官方系统预约口罩的经历,(・。・)没有中签过。不过因此对它的预约系统感兴趣,考虑自己可以简单做一个web网站版本的预约管理系统,实现基本功能,也正好课程需要完成一个数据库设计,然后做一个相对完整的应用系统,所以,这个小项目就此开始。</span></p>
<h1>二、口罩预约管理系统介绍</h1>
<h2>1、功能模块及特点</h2>
<p><span style="font-size: 16px">本系统主要任务是实现用户口罩预约、市政人员(管理员)分配以及快递员接单配送的比较完整的功能。市政人员(管理员),普通用户,快递员这三种用户权限,功能明确,各自独立,而又存在着一定地联系,让政府更方便地管理、更高效地分配。</span></p>
<p><span style="font-size: 16px; color: rgba(255, 0, 0, 1)">具体模块解析如下:</span></p>
<ol>
<li><span style="font-size: 16px"><strong>普通用户模块</strong>:创建账号,登录系统填写预约信息确认提交,查看订单状态,修改订单预约信息,修改个人注册信息。</span></li>
<li><span style="font-size: 16px"><strong>市政人员(管理员)模块</strong>:查询已注册用户信息,修改或删除用户信息,对用户的预约订单进行合理分配,包括审核以及分配快递员。管理每种类型口罩,查询库存数量,合理分配用户预约的口罩数量,按需求查看订单的配送状态。</span></li>
<li><span style="font-size: 16px"><strong>快递员模块</strong>:查看分配到的订单,选择接单配送,完成配送选择关单,按订单状态查看订单,统计完成的订单数量。</span></li>
</ol>
<h2>2、系统结构</h2>
<p><span style="font-size: 16px">系统功能结构图:</span></p>
<p><span style="font-size: 16px"><img src="https://img-blog.csdnimg.cn/20200914114221143.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYXJ6b3Vz,size_16,color_000000,t_70" alt="" width="600" height="378"></span></p>
<h1>三、数据库设计</h1>
<p><span style="font-size: 16px">在口罩预约管理系统初期阶段,我们需要设计好系统存取数据信息的一个数据库,数据库设计也是一个重点难点,完整的数据库基本满足设计基本要求,包括数据库关系模式分析,处理好<strong>函数依赖问题</strong>,还有关系模式至少满足<strong>第三范式</strong>等。学过数据库系统概论会基本了解这些知识以及它的重要性和难度。</span></p>
<p><span style="font-size: 16px">以目前个人能力,这个系统数据库的建立暂时满足最基本的要求,初步进行了函数依赖分析,另外根据所需功能,关系模式不是很复杂,第三范式的满足只存在于部分关系模式中。</span></p>
<p><span style="font-size: 16px">我使用的是MySQL数据库,前期建立数据字典,然后以此进一步建立数据库及数据表,确定口罩预约管理数据库关系模式,分析关系模式的函数依赖和范式要求。接下来将具体介绍<strong>数据字典、数据模型和概念模型(E-R 图)</strong>。</span></p>
<h2>1、数据字典</h2>
<p><span style="font-size: 16px">根据系统功能需求,系统数据库包含了8个数据表,详细内容(字段、数据类型、码)如下数据字典:</span></p>
<p>1、admin表</p>
<div class="table-box" style="text-align: left">
<table border="1">
<tbody>
<tr>
<td>
<p>属性名</p>
</td>
<td>
<p style="text-align: left">数据描述</p>
</td>
<td>
<p>数据类型</p>
</td>
<td>
<p>是否为空</p>
</td>
<td>
<p>备注</p>
</td>
</tr>
<tr>
<td>
<p>work_id</p>
</td>
<td>
<p>管理员账号</p>
</td>
<td>
<p>varchar(32)</p>
</td>
<td>
<p>不允许</p>
</td>
<td>
<p>主码</p>
</td>
</tr>
<tr>
<td>
<p>ad_name</p>
</td>
<td>
<p>管理员名</p>
</td>
<td>
<p>varchar(32)</p>
</td>
<td>
<p>不允许</p>
</td>
<td>
<p>&nbsp;</p>
</td>
</tr>
<tr>
<td>
<p>pwd</p>
</td>
<td>
<p>密码</p>
</td>
<td>
<p>varchar(32)</p>
</td>
<td>
<p>不允许</p>
</td>
<td>
<p>&nbsp;</p>
</td>
</tr>
<tr>
<td>
<p>phone</p>
</td>
<td>
<p>电话</p>
</td>
<td>
<p>varchar(32)</p>
</td>
<td>
<p>&nbsp;</p>
</td>
<td>
<p>&nbsp;</p>
</td>
</tr>
</tbody>
</table>
</div>
<p>2、users表</p>
<div class="table-box">
<table border="1">
<tbody>
<tr>
<td>
<p>属性名</p>
</td>
<td>
<p>数据描述</p>
</td>
<td>
<p>数据类型</p>
</td>
<td>
<p>是否为空</p>
</td>
<td>
<p>备注</p>
</td>
</tr>
<tr>
<td>
<p>user_id</p>
</td>
<td>
<p>用户账号</p>
</td>
<td>
<p>varchar(32)</p>
</td>
<td>
<p>不允许</p>
</td>
<td>
<p>主码</p>
</td>
</tr>
<tr>
<td>
<p>user_name</p>
</td>
<td>
<p>姓名</p>
</td>
<td>
<p>varchar(32)</p>
</td>
<td>
<p>不允许</p>
</td>
<td>
<p>&nbsp;</p>
</td>
</tr>
<tr>
<td>
<p>ID</p>
</td>
<td>
<p>身份证号</p>
</td>
<td>
<p>varchar(32)</p>
</td>
<td>
<p>不允许</p>
</td>
<td>
<p>&nbsp;</p>
</td>
</tr>
<tr>
<td>
<p>pwd</p>
</td>
<td>
<p>密码</p>
</td>
<td>
<p>varchar(32)</p>
</td>
<td>
<p>不允许</p>
</td>
<td>
<p>&nbsp;</p>
</td>
</tr>
<tr>
<td>
<p>register_date</p>
</td>
<td>
<p>注册时间</p>
</td>
<td>
<p>datetime</p>
</td>
<td>
<p>&nbsp;</p>
</td>
<td>
<p>&nbsp;</p>
</td>
</tr>
</tbody>
</table>
</div>
<p>3、deliver表</p>
<div class="table-box">
<table border="1">
<tbody>
<tr>
<td>
<p>属性名</p>
</td>
<td>
<p>数据描述</p>
</td>
<td>
<p>数据类型</p>
</td>
<td>
<p>是否为空</p>
</td>
<td>
<p>备注</p>
</td>
</tr>
<tr>
<td>
<p>deliver_id</p>
</td>
<td>
<p>账号</p>
</td>
<td>
<p>varchar(32)</p>
</td>
<td>
<p>不允许</p>
</td>
<td>
<p>主码</p>
</td>
</tr>
<tr>
<td>
<p>deliver_name</p>
</td>
<td>
<p>姓名</p>
</td>
<td>
<p>varchar(32)</p>
</td>
<td>
<p>不允许</p>
</td>
<td>
<p>&nbsp;</p>
</td>
</tr>
<tr>
<td>
<p>phone</p>
</td>
<td>
<p>联系方式</p>
</td>
<td>
<p>varchar(32)</p>
</td>
<td>
<p>&nbsp;</p>
</td>
<td>
<p>&nbsp;</p>
</td>
</tr>
<tr>
<td>
<p>pwd</p>
</td>
<td>
<p>密码</p>
</td>
<td>
<p>varchar(32)</p>
</td>
<td>
<p>不允许</p>
</td>
<td>
<p>&nbsp;</p>
</td>
</tr>
</tbody>
</table>
</div>
<p>4、mask表</p>
<div class="table-box">
<table border="1">
<tbody>
<tr>
<td>
<p>属性名</p>
</td>
<td>
<p>数据描述</p>
</td>
<td>
<p>数据类型</p>
</td>
<td>
<p>是否为空</p>
</td>
<td>
<p>备注</p>
</td>
</tr>
<tr>
<td>
<p>mask_type</p>
</td>
<td>
<p>类型号</p>
</td>
<td>
<p>varchar(32)</p>
</td>
<td>
<p>不允许</p>
</td>
<td>
<p>主码</p>
</td>
</tr>
<tr>
<td>
<p>m_name</p>
</td>
<td>
<p>名称</p>
</td>
<td>
<p>varchar(32)</p>
</td>
<td>
<p>不允许</p>
</td>
<td>
<p>&nbsp;</p>
</td>
</tr>
<tr>
<td>
<p>remain_num</p>
</td>
<td>
<p>库存量</p>
</td>
<td>
<p>int(11)</p>
</td>
<td>
<p>不允许</p>
</td>
<td>
<p>&nbsp;</p>
</td>
</tr>
<tr>
<td>
<p>price</p>
</td>
<td>
<p>价格</p>
</td>
<td>
<p>int(11)</p>
</td>
<td>
<p>&nbsp;</p>
</td>
<td>
<p>&nbsp;</p>
</td>
</tr>
</tbody>
</table>
</div>
<p>5、info表</p>
<div class="table-box">
<table border="1">
<tbody>
<tr>
<td>
<p>属性名</p>
</td>
<td>
<p>数据描述</p>
</td>
<td>
<p>数据类型</p>
</td>
<td>
<p>是否为空</p>
</td>
<td>
<p>备注</p>
</td>
</tr>
<tr>
<td>
<p>order_id</p>
</td>
<td>
<p>订单号</p>
</td>
<td>
<p>varchar(32)</p>
</td>
<td>
<p>不允许</p>
</td>
<td>
<p>主码</p>
</td>
</tr>
<tr>
<td>
<p>user_id</p>
</td>
<td>
<p>用户账号</p>
</td>
<td>
<p>varchar(32)</p>
</td>
<td>
<p>不允许</p>
</td>
<td>
<p>外码,参照 users</p>
</td>
</tr>
<tr>
<td>
<p>user_name</p>
</td>
<td>
<p>用户姓名</p>
</td>
<td>
<p>varchar(32)</p>
</td>
<td>
<p>不允许</p>
</td>
<td>
<p>&nbsp;</p>
</td>
</tr>
<tr>
<td>
<p>allocate_num</p>
</td>
<td>
<p>分配数量</p>
</td>
<td>
<p>int(11)</p>
</td>
<td>
<p>不允许</p>
</td>
<td>
<p>&nbsp;</p>
</td>
</tr>
<tr>
<td>
<p>phone</p>
</td>
<td>
<p>联系方式</p>
</td>
<td>
<p>varchar(32)</p>
</td>
<td>
<p>不允许</p>
</td>
<td>
<p>&nbsp;</p>
</td>
</tr>
<tr>
<td>
<p>address</p>
</td>
<td>
<p>配送地址</p>
</td>
<td>
<p>varchar(32)</p>
</td>
<td>
<p>不允许</p>
</td>
<td>
<p>&nbsp;</p>
</td>
</tr>
<tr>
<td>
<p>status</p>
</td>
<td>
<p>订单状态</p>
</td>
<td>
<p>varchar(32)</p>
</td>
<td>
<p>不允许</p>
</td>
<td>
<p>&nbsp;</p>
</td>
</tr>
<tr>
<td>
<p>re_date</p>
</td>
<td>
<p>下单日期</p>
</td>
<td>
<p>datetime</p>
</td>
<td>
<p>&nbsp;</p>
</td>
<td>
<p>&nbsp;</p>
</td>
</tr>
</tbody>
</table>
</div>
<p>6、reserve表</p>
<div class="table-box">
<table border="1">
<tbody>
<tr>
<td>
<p>属性名</p>
</td>
<td>
<p>数据描述</p>
</td>
<td>
<p>数据类型</p>
</td>
<td>
<p>是否为空</p>
</td>
<td>
<p>备注</p>
</td>
</tr>
<tr>
<td>
<p>user_id</p>
</td>
<td>
<p>预约账号</p>
</td>
<td>
<p>varchar(32)</p>
</td>
<td>
<p>不允许</p>
</td>
<td>
<p>主码, 参照users</p>
</td>
</tr>
<tr>
<td>
<p>re_date</p>
</td>
<td>
<p>下单日期</p>
</td>
<td>
<p>datetime</p>
</td>
<td>
<p>不允许</p>
</td>
<td>
<p>主码</p>
</td>
</tr>
<tr>
<td>
<p>mask_type</p>
</td>
<td>
<p>类型</p>
</td>
<td>
<p>varchar(32)</p>
</td>
<td>
<p>不允许</p>
</td>
<td>
<p>外码,参照mask</p>
</td>
</tr>
<tr>
<td>
<p>ID</p>
</td>
<td>
<p>身份证号</p>
</td>
<td>
<p>varchar(32)</p>
</td>
<td>
<p>不允许</p>
</td>
<td>
<p>&nbsp;</p>
</td>
</tr>
<tr>
<td>
<p>r_num</p>
</td>
<td>
<p>预约数量</p>
</td>
<td>
<p>int(11)</p>
</td>
<td>
<p>不允许</p>
</td>
<td>
<p>&nbsp;</p>
</td>
</tr>
<tr>
<td>
<p>ex_date</p>
</td>
<td>
<p>期望到货日</p>
</td>
<td>
<p>date</p>
</td>
<td>
<p>&nbsp;</p>
</td>
<td>
<p>&nbsp;</p>
</td>
</tr>
<tr>
<td>
<p>phone</p>
</td>
<td>
<p>联系方式</p>
</td>
<td>
<p>varchar(32)</p>
</td>
<td>
<p>&nbsp;</p>
</td>
<td>
<p>&nbsp;</p>
</td>
</tr>
<tr>
<td>
<p>address</p>
</td>
<td>
<p>地址</p>
</td>
<td>
<p>varchar(32)</p>
</td>
<td>
<p>&nbsp;</p>
</td>
<td>
<p>&nbsp;</p>
</td>
</tr>
</tbody>
</table>
</div>
<p>7、allocate表</p>
<div class="table-box">
<table border="1">
<tbody>
<tr>
<td>
<p>属性名</p>
</td>
<td>
<p>数据描述</p>
</td>
<td>
<p>数据类型</p>
</td>
<td>
<p>是否为空</p>
</td>
<td>
<p>备注</p>
</td>
</tr>
<tr>
<td>
<p>work_id</p>
</td>
<td>
<p>分配人</p>
</td>
<td>
<p>varchar(32)</p>
</td>
<td>
<p>不允许</p>
</td>
<td>
<p>主码,参照admin</p>
</td>
</tr>
<tr>
<td>
<p>order_id</p>
</td>
<td>
<p>订单号</p>
</td>
<td>
<p>varchar(32)</p>
</td>
<td>
<p>不允许</p>
</td>
<td>
<p>主码,参照order</p>
</td>
</tr>
<tr>
<td>
<p>allocate_time</p>
</td>
<td>
<p>分配日期</p>
</td>
<td>
<p>datetime</p>
</td>
<td>
<p>&nbsp;</p>
</td>
<td>
<p>&nbsp;</p>
</td>
</tr>
<tr>
<td>
<p>deliver_id</p>
</td>
<td>
<p>快递员</p>
</td>
<td>
<p>varchar(32)</p>
</td>
<td>
<p>不允许</p>
</td>
<td>
<p>主码,参照deliver</p>
</td>
</tr>
</tbody>
</table>
</div>
<p>8、take表</p>
<div class="table-box">
<table border="1">
<tbody>
<tr>
<td>
<p>属性名</p>
</td>
<td>
<p>数据描述</p>
</td>
<td>
<p>数据类型</p>
</td>
<td>
<p>是否为空</p>
</td>
<td>
<p>备注</p>
</td>
</tr>
<tr>
<td>
<p>deliver_id</p>
</td>
<td>
<p>快递员账号</p>
</td>
<td>
<p>varchar(32)</p>
</td>
<td>
<p>不允许</p>
</td>
<td>
<p>主码,参照deliver</p>
</td>
</tr>
<tr>
<td>
<p>order_id</p>
</td>
<td>
<p>订单号</p>
</td>
<td>
<p>varchar(32)</p>
</td>
<td>
<p>不允许</p>
</td>
<td>
<p>主码,参照order</p>
</td>
</tr>
<tr>
<td>
<p>take_date</p>
</td>
<td>
<p>接单日期</p>
</td>
<td>
<p>datetime</p>
</td>
<td>
<p>&nbsp;</p>
</td>
<td>
<p>&nbsp;</p>
</td>
</tr>
<tr>
<td>
<p>finish_date</p>
</td>
<td>
<p>关单日期</p>
</td>
<td>
<p>datetime</p>
</td>
<td>
<p>&nbsp;</p>
</td>
<td>
<p>&nbsp;</p>
</td>
</tr>
</tbody>
</table>
</div>
<h2>2、口罩预约数据库关系模式(数据模型)</h2>
<p><span style="font-size: 16px">各个数据表包含属性,红色表示该关系模式的主码。</span></p>
<p><span style="font-size: 16px">管理员 (<span style="text-decoration: underline"><span style="text-decoration: underline"><span style="color: rgba(255, 0, 0, 1); text-decoration: underline">管理员账号</span>,</span></span>&nbsp;密码, 管理员姓名, 电话)</span></p>
<p><span style="font-size: 16px">用户 &nbsp;&nbsp;(<span style="text-decoration: underline"><span style="text-decoration: underline"><span style="color: rgba(255, 0, 0, 1); text-decoration: underline">用户账号</span>,&nbsp;</span></span>密码, 用户姓名, 身份证号)</span></p>
<p><span style="font-size: 16px">快递员 (<span style="text-decoration: underline"><span style="text-decoration: underline"><span style="color: rgba(255, 0, 0, 1); text-decoration: underline">快递员账号</span>,&nbsp;</span></span>密码, 快递员姓名, 电话, 地址)</span></p>
<p><span style="font-size: 16px">口罩 &nbsp;&nbsp;(<span style="text-decoration: underline"><span style="text-decoration: underline"><span style="color: rgba(255, 0, 0, 1); text-decoration: underline">口罩类型, 仓库</span>,</span></span>&nbsp;存货量, 单位价格)</span></p>
<p><span style="font-size: 16px">订单信息 (<span style="text-decoration: underline; color: rgba(255, 0, 0, 1)"><span style="text-decoration: underline">订单号,</span></span>&nbsp;用户账号, 用户姓名,口罩类型, 已分配数量, 联系方式, 配 送地址, 订单状态, 预约时间)</span></p>
<p><span style="font-size: 16px">预约 (<span style="text-decoration: underline"><span style="text-decoration: underline"><span style="color: rgba(255, 0, 0, 1); text-decoration: underline">用户帐号, 口罩类型</span>,&nbsp;</span></span>预约时间<span style="text-decoration: underline"><span style="text-decoration: underline">,&nbsp;</span></span>期望到货日期, 预约数量, 电话, 地址)</span></p>
<p><span style="font-size: 16px">分配 (<span style="text-decoration: underline; color: rgba(255, 0, 0, 1)"><span style="text-decoration: underline">管理员账号, 订单号, 快递员账号</span></span>, 分配日期)</span></p>
<p><span style="font-size: 16px">接关单 (<span style="text-decoration: underline"><span style="text-decoration: underline"><span style="color: rgba(255, 0, 0, 1); text-decoration: underline">快递员账号, 订单号,</span>&nbsp;</span></span>快递员姓名, 接单时间, 关单时间)</span></p>
<h2>3、E-R图(概念模型)</h2>
<p><span style="font-size: 16px">E-R图能够更加直观的展示数据关系模式之间的联系,下面则是自己画的:</span></p>
<p><img src="https://img-blog.csdnimg.cn/20200914201030605.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYXJ6b3Vz,size_16,color_000000,t_70" alt="" width="692" height="790"></p>
<p><span style="font-size: 16px">这个是建立数据库后系统生成的:</span></p>
<p><img src="https://img-blog.csdnimg.cn/20200914201242273.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYXJ6b3Vz,size_16,color_000000,t_70" alt="" width="600" height="400"></p>
<h1>四、MySQL创建数据库以及数据表</h1>
<p><span style="font-size: 16px">这个步骤开始对设计好的关系模式在MySQL上部署数据库以及建立各个数据表。建表代码如下:</span></p>
<ul>
<li>建立数据库</li>
</ul>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">create</span> <span style="color: rgba(0, 0, 255, 1)">database</span> maskorder;</pre>
</div>
<p>&nbsp;</p>
<ul>
<li>admin数据表(管理员表)</li>
</ul>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">create</span> <span style="color: rgba(0, 0, 255, 1)">table</span> admin(work_id <span style="color: rgba(0, 0, 255, 1)">varchar</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">32</span>) <span style="color: rgba(0, 0, 255, 1)">primary</span> <span style="color: rgba(0, 0, 255, 1)">key</span> <span style="color: rgba(128, 128, 128, 1)">not</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,

                  pwd </span><span style="color: rgba(0, 0, 255, 1)">varchar</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">32</span>) <span style="color: rgba(128, 128, 128, 1)">not</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,

                  ad_name </span><span style="color: rgba(0, 0, 255, 1)">varchar</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">32</span><span style="color: rgba(0, 0, 0, 1)">),

                  phone </span><span style="color: rgba(0, 0, 255, 1)">varchar</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">32</span>));</pre>
</div>
<ul>
<li>users数据表(用户表)</li>
</ul>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">create</span> <span style="color: rgba(0, 0, 255, 1)">table</span> admin(work_id <span style="color: rgba(0, 0, 255, 1)">varchar</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">32</span>) <span style="color: rgba(0, 0, 255, 1)">primary</span> <span style="color: rgba(0, 0, 255, 1)">key</span> <span style="color: rgba(128, 128, 128, 1)">not</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,
                  pwd </span><span style="color: rgba(0, 0, 255, 1)">varchar</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">32</span>) <span style="color: rgba(128, 128, 128, 1)">not</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,
                  ad_name </span><span style="color: rgba(0, 0, 255, 1)">varchar</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">32</span><span style="color: rgba(0, 0, 0, 1)">),
                  phone </span><span style="color: rgba(0, 0, 255, 1)">varchar</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">32</span>));</pre>
</div>
<ul>
<li>delivers数据表(快递员表)</li>
</ul>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">create</span> <span style="color: rgba(0, 0, 255, 1)">table</span> delivers(deliver_id <span style="color: rgba(0, 0, 255, 1)">varchar</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">32</span>) <span style="color: rgba(0, 0, 255, 1)">primary</span> <span style="color: rgba(0, 0, 255, 1)">key</span> <span style="color: rgba(128, 128, 128, 1)">not</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,

                  pwd </span><span style="color: rgba(0, 0, 255, 1)">varchar</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">32</span>) <span style="color: rgba(128, 128, 128, 1)">not</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,

                  deliver_name </span><span style="color: rgba(0, 0, 255, 1)">varchar</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">32</span>) <span style="color: rgba(128, 128, 128, 1)">not</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,

                  phone </span><span style="color: rgba(0, 0, 255, 1)">varchar</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">32</span>));</pre>
</div>
<ul>
<li>reserve数据表(用户预约表)</li>
</ul>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">create</span> <span style="color: rgba(0, 0, 255, 1)">table</span> reserve(<span style="color: rgba(255, 0, 255, 1)">user_id</span> <span style="color: rgba(0, 0, 255, 1)">varchar</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">32</span>) <span style="color: rgba(128, 128, 128, 1)">not</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,

                  re_date </span><span style="color: rgba(0, 0, 255, 1)">datetime</span> <span style="color: rgba(128, 128, 128, 1)">not</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,

                  </span><span style="color: rgba(0, 0, 255, 1)">foreign</span> <span style="color: rgba(0, 0, 255, 1)">key</span> (<span style="color: rgba(255, 0, 255, 1)">user_id</span>) <span style="color: rgba(0, 0, 255, 1)">references</span> users(<span style="color: rgba(255, 0, 255, 1)">user_id</span><span style="color: rgba(0, 0, 0, 1)">),

                  </span><span style="color: rgba(0, 0, 255, 1)">primary</span> <span style="color: rgba(0, 0, 255, 1)">key</span>(<span style="color: rgba(255, 0, 255, 1)">user_id</span><span style="color: rgba(0, 0, 0, 1)">,re_date),

                  ID </span><span style="color: rgba(0, 0, 255, 1)">varchar</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">32</span>) <span style="color: rgba(128, 128, 128, 1)">not</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,

                  r_num </span><span style="color: rgba(0, 0, 255, 1)">int</span> <span style="color: rgba(128, 128, 128, 1)">not</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,

                  ex_date date </span><span style="color: rgba(128, 128, 128, 1)">not</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,

                  phone </span><span style="color: rgba(0, 0, 255, 1)">varchar</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">32</span>) <span style="color: rgba(128, 128, 128, 1)">not</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,

                  address </span><span style="color: rgba(0, 0, 255, 1)">varchar</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">32</span>) <span style="color: rgba(128, 128, 128, 1)">not</span> <span style="color: rgba(0, 0, 255, 1)">null</span>);</pre>
</div>
<ul>
<li>mask数据表(口罩信息表)</li>
</ul>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">create</span> <span style="color: rgba(0, 0, 255, 1)">table</span> mask(mask_type <span style="color: rgba(0, 0, 255, 1)">varchar</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">32</span>) <span style="color: rgba(0, 0, 255, 1)">primary</span> <span style="color: rgba(0, 0, 255, 1)">key</span> <span style="color: rgba(128, 128, 128, 1)">not</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,

                  store </span><span style="color: rgba(0, 0, 255, 1)">varchar</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">32</span>) <span style="color: rgba(128, 128, 128, 1)">not</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,

                  remain_num </span><span style="color: rgba(0, 0, 255, 1)">int</span> <span style="color: rgba(128, 128, 128, 1)">not</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,

                  price </span><span style="color: rgba(0, 0, 255, 1)">int</span> <span style="color: rgba(128, 128, 128, 1)">not</span> <span style="color: rgba(0, 0, 255, 1)">null</span>);</pre>
</div>
<ul>
<li>info数据表(订单表)</li>
</ul>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">create</span> <span style="color: rgba(0, 0, 255, 1)">table</span> info(order_id <span style="color: rgba(0, 0, 255, 1)">varchar</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">32</span>) <span style="color: rgba(0, 0, 255, 1)">primary</span> <span style="color: rgba(0, 0, 255, 1)">key</span> <span style="color: rgba(128, 128, 128, 1)">not</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,

                  </span><span style="color: rgba(255, 0, 255, 1)">user_id</span> <span style="color: rgba(0, 0, 255, 1)">varchar</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">32</span>) <span style="color: rgba(128, 128, 128, 1)">not</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,

                  </span><span style="color: rgba(0, 0, 255, 1)">foreign</span> <span style="color: rgba(0, 0, 255, 1)">key</span> (<span style="color: rgba(255, 0, 255, 1)">user_id</span>) <span style="color: rgba(0, 0, 255, 1)">references</span> users(<span style="color: rgba(255, 0, 255, 1)">user_id</span><span style="color: rgba(0, 0, 0, 1)">),

                  </span><span style="color: rgba(255, 0, 255, 1)">user_name</span> <span style="color: rgba(0, 0, 255, 1)">varchar</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">32</span>) <span style="color: rgba(128, 128, 128, 1)">not</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,

                  allocate_num </span><span style="color: rgba(0, 0, 255, 1)">int</span> <span style="color: rgba(128, 128, 128, 1)">not</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,

                  statue </span><span style="color: rgba(0, 0, 255, 1)">varchar</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">32</span>) <span style="color: rgba(128, 128, 128, 1)">not</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,

                  re_date </span><span style="color: rgba(0, 0, 255, 1)">datetime</span> <span style="color: rgba(128, 128, 128, 1)">not</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,

                  phone </span><span style="color: rgba(0, 0, 255, 1)">varchar</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">32</span>) <span style="color: rgba(128, 128, 128, 1)">not</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,

                  address </span><span style="color: rgba(0, 0, 255, 1)">varchar</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">32</span>) <span style="color: rgba(128, 128, 128, 1)">not</span> <span style="color: rgba(0, 0, 255, 1)">null</span> );</pre>
</div>
<ul>
<li>&nbsp;allocate数据表(管理员分配表)</li>
</ul>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">create</span> <span style="color: rgba(0, 0, 255, 1)">table</span> allocate(work_id <span style="color: rgba(0, 0, 255, 1)">varchar</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">32</span>) <span style="color: rgba(128, 128, 128, 1)">not</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,

                      order_id </span><span style="color: rgba(0, 0, 255, 1)">varchar</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">32</span>) <span style="color: rgba(128, 128, 128, 1)">not</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,

                      deliver_id </span><span style="color: rgba(0, 0, 255, 1)">varchar</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">32</span>) <span style="color: rgba(128, 128, 128, 1)">not</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,

                      allocate_time </span><span style="color: rgba(0, 0, 255, 1)">datetime</span> <span style="color: rgba(128, 128, 128, 1)">not</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,

                      </span><span style="color: rgba(0, 0, 255, 1)">primary</span> <span style="color: rgba(0, 0, 255, 1)">key</span><span style="color: rgba(0, 0, 0, 1)"> (work_id,order_id),

                      </span><span style="color: rgba(0, 0, 255, 1)">foreign</span> <span style="color: rgba(0, 0, 255, 1)">key</span> (work_id) <span style="color: rgba(0, 0, 255, 1)">references</span><span style="color: rgba(0, 0, 0, 1)"> admin(work_id),

                      </span><span style="color: rgba(0, 0, 255, 1)">foreign</span> <span style="color: rgba(0, 0, 255, 1)">key</span> (order_id) <span style="color: rgba(0, 0, 255, 1)">references</span> info(order_id) );</pre>
</div>
<ul>
<li>&nbsp;take数据表(快递员接关单表)</li>
</ul>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">create</span> <span style="color: rgba(0, 0, 255, 1)">table</span> take(deliver_id <span style="color: rgba(0, 0, 255, 1)">varchar</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">32</span>) <span style="color: rgba(128, 128, 128, 1)">not</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,

                  order_id </span><span style="color: rgba(0, 0, 255, 1)">varchar</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">32</span>) <span style="color: rgba(128, 128, 128, 1)">not</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,

&nbsp;&nbsp;&nbsp;                deliver_name </span><span style="color: rgba(0, 0, 255, 1)">varchar</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">32</span>) <span style="color: rgba(128, 128, 128, 1)">not</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,

                  take_time </span><span style="color: rgba(0, 0, 255, 1)">datetime</span> <span style="color: rgba(128, 128, 128, 1)">not</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,

                  finish_time </span><span style="color: rgba(0, 0, 255, 1)">datetime</span> <span style="color: rgba(128, 128, 128, 1)">not</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,

                  </span><span style="color: rgba(0, 0, 255, 1)">primary</span> <span style="color: rgba(0, 0, 255, 1)">key</span><span style="color: rgba(0, 0, 0, 1)"> (deliver_id,order_id),

                  </span><span style="color: rgba(0, 0, 255, 1)">foreign</span> <span style="color: rgba(0, 0, 255, 1)">key</span> (deliver_id) <span style="color: rgba(0, 0, 255, 1)">references</span><span style="color: rgba(0, 0, 0, 1)"> delivers(deliver_id),

                  </span><span style="color: rgba(0, 0, 255, 1)">foreign</span> <span style="color: rgba(0, 0, 255, 1)">key</span> (order_id) <span style="color: rgba(0, 0, 255, 1)">references</span> info(order_id) );</pre>
</div>
<ul>
<li>&nbsp;deli_order视图(快递员查看订单表)</li>
</ul>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">create</span> <span style="color: rgba(0, 0, 255, 1)">view</span> deli_order <span style="color: rgba(0, 0, 255, 1)">as</span>

      <span style="color: rgba(0, 0, 255, 1)">select</span><span style="color: rgba(0, 0, 0, 1)"> order_id,mask_type,allocate_num,phone,addresss,statue,re_date

      </span><span style="color: rgba(0, 0, 255, 1)">from</span> info;</pre>
</div>
<h1>五、数据库设计总结</h1>
<p><span style="font-size: 16px">  在系统开发之前,数据库的设计是首要并且关键的一个步骤,对于此系统的数据表,上面介绍的是最后确定的数据表。数据库设计并不能一蹴而就,这里总结一下我不断修改的想法过程。</span></p>
<p><span style="font-size: 16px">  第一次根据系统所需要的数据建立关系模式,在<span style="color: rgba(255, 0, 0, 1)">保证函数依赖和无损连接</span>的情况下,将属性phone、address放入reserve表中,users表和reserve的关系模式满足了<span style="color: rgba(255, 0, 0, 1)">第三范式</span>的要求。起初设计表时候考虑是否将reserve和info合并,后来发现在物理设计和实际场景下,订单信息表info由用户预约后的reserve表生成,并且加入特有的属性订单状态status、口罩分配数量allocate_num和订单号order_id。</span></p>
<p><span style="font-size: 16px">  至此从reserve表脱离出来,后期用户、管理员、快递员对订单的查询的操作,实现了模块化的处理,不仅减少了表的连接,而且物理操作(前后端编程)更加容易,因为数据库设计中<span style="color: rgba(255, 0, 0, 1)">也要符合物理上的要求</span>,所以关系模式分解为两个表,虽然增加了部分数据上的冗余,但是保证信息的模块化和实际应用的合理性。</span></p>
<p><span style="font-size: 16px">  在口罩预约管理系统数据库设计中遇到了这些问题,后来经过了理论上的分析和实际运用,解决了设计上的问题,认识到了数据模型建立的关键性。目前该数据库还可以进一步完善。</span></p>
<p><span style="font-size: 16px">  这一篇主要讲的是口罩预约管理系统定位的功能模块以及数据库设计的具体过程,这也是完成这个系统第一阶段的完整部分,<strong>下一篇将介绍系统前后端的搭建以及数据库连接</strong>,使用到的知识包括<strong>前端(HTML+CSS+Javascript)、后端(PHP)和MySQL数据库的操作</strong>,目的是建立简洁、包含基本功能的(口罩预约管理)应用系统。</span></p>
<p>&nbsp;</p>
<p><span style="color: rgba(255, 0, 0, 1)"><strong>本系统项目源码已经上传CSDN资源啦,有需要可以下载!</strong></span>传送门&nbsp;(https://download.csdn.net/download/Charzous/18776350)</p>
<p>&nbsp;</p>
<p><img src="https://img2020.cnblogs.com/blog/1496983/202105/1496983-20210529221050182-1117429606.png" alt="" width="692" height="234" loading="lazy"></p>
<p>&nbsp;</p>
<blockquote>
<p><span style="font-size: 16px">本篇的口罩预约管理系统数据库maskOrder.txt已上传,可直接导入本地MySQL数据库。</span></p>
<p><span style="font-size: 16px">系列文章:</span></p>
<p><span style="font-size: 16px">(一)口罩预约管理系统——数据库设计(前端+PHP+MySQL)</span></p>
<p><span style="font-size: 16px">(二)口罩预约管理系统——系统网站实现(前端+PHP+MySQL)</span></p>
</blockquote>
<hr>
<p><span style="font-size: 16px">我的博客园:https://www.cnblogs.com/chenzhenhong/p/13677690.html</span></p>
<p><span style="font-size: 16px">我的CSDN博客:https://blog.csdn.net/Charzous/article/details/108576174</span></p>
<div class="creativecommons"><span style="font-size: 16px">版权声明:本文为博主原创文章,遵循&nbsp;CC 4.0 BY-SA&nbsp;版权协议,转载请附上原文出处链接和本声明。</span></div>
<div class="article-source-link"><span style="font-size: 16px">本文链接:http://blog.csdn.net/Charzous/article/details/108576174</span></div>

</div>
<div id="MySignature" role="contentinfo">
    ---------------------------------------------------------书上有路,学海无涯。
生活总是很忙碌,也许这才是生活真正的奥秘。---------------------------------------------------------

作者:Charzueus    来源:博客园
本博文版权归作者所有!
禁止商业转载等用途或联系作者授权,非商业转载请注明出处!
版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明。<br><br>
来源:https://www.cnblogs.com/chenzhenhong/p/13677690.html
頁: [1]
查看完整版本: 口罩预约管理系统——数据库设计(前端+PHP+MySQL)