全栈开发流程——数据表的分析与创建详解实战演示(一)

作者介绍

在这里插入图片描述
「作者主页」:雪碧有白泡泡
「个人网站」:雪碧的个人网站
「推荐专栏」

java一站式服务
React从入门到精通
前端炫酷代码分享
★ 从0到英雄,vue成神之路★
uniapp-从构建到提升
从0到英雄,vue成神之路
解决算法,一个专栏就够了
架构咱们从0说
★ 数据流通的精妙之道★
★后端进阶之路★

请添加图片描述

文章目录

  • 作者介绍
  • 引言
  • 环境安装与前后端启动
    • 启动过程
  • 数据库的设计
    • 1.首先我们要确定项目需求
    • 2.我们要明确数据流程
    • 3.那么我们接下来就要确定所需要存储的数据类型和关系
    • 4. 画E-R图
    • 5.设计数据库表结构
    • 6.建库
    • 7.运行sql语句
    • 8.运行sql看看是否出错以及修改方法
    • 9.验证数据库和表的创建
  • 总结

引言

当我们拿到项目需求后,有时候可能会感到迷茫,不知道整体流程和接下来该做什么。为了能够不断实战并快速提高自己,我们需要找到适合自己的一套开发流程。这样我们就能够有条不紊地进行项目开发,并且及时发现和修正自己的不足之处
在这里插入图片描述

以最常用的java全栈开发为例,这个系列以MySQL数据库后端以SpringBoot,MybatisPlus,Redis,Spring security,前端以vue,微信小程序的技术栈组合,进行步骤细化。

环境安装与前后端启动

要完成目标项目首先我们要确定合适的技术栈组合,然后检查环境是否安装正确完整

  • 首先是数据库的安装配置

常用的主要有mysqlmongodb还有可视化工具HeidiSQL
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 接下来就是后端还有前端的环境安装

jdk
在这里插入图片描述
idea
在这里插入图片描述
maven
在这里插入图片描述
redis
在这里插入图片描述
node
在这里插入图片描述
vscode
在这里插入图片描述

  • 当然还有微信开发工具
    在这里插入图片描述

这些工具可自行安装,出现问题可在评论区留言讨论
在这里插入图片描述

启动过程

// 前端(VsCode)
// 1. 下载安装 Node.js(18 版本)
// 2. 安装 Vue 脚手架
npm i -g @vue/cli
// 3. 安装前端依赖
npm i
// 4. 启动前端项目
npm run dev// 后端(Idea) 
// 2. 配置 Maven、开启redis(否则系统无法启动)
// 3. 导入数据库,建议 MySQL8,若 5.7 版本需设置编码为 UTF-8,否则会提示密码错误
// 4. 等待后端依赖下载,完成后启动项目,或编译后执行 mvn spring-boot:run

数据库的设计

1.首先我们要确定项目需求

拿最常用的登录系统为例,最简单的自然是一种用户,我们使用数据库存储他的账号和密码。

  • 我们自定义一个题目设计三种用户登录:管理员教师学生

  • 我们自定义一个题目设计三种用户登录的规则:一个管理员可能管理多个教师/学生一个教师可能教授多个学生

以上定为项目需求

2.我们要明确数据流程

根据自拟的登录系统题目来看,我们来想象一下数据流程

用例名称:管理员登录

参与者:管理员
前置条件:管理员已注册账号
后置条件:管理员成功登录系统
基本流程:
管理员打开管理员端应用。
系统显示登录界面。
管理员输入用户名和密码。
点击登录按钮。
系统验证用户名和密码是否匹配。
如果验证通过,系统跳转至管理员主页面。
如果验证失败,系统提示用户名或密码错误。

用例名称:管理员注销

参与者:管理员
前置条件:管理员已登录系统
后置条件:管理员成功注销账号
基本流程:
在管理员主页面,点击注销按钮。
系统弹出确认注销提示框。
点击确认注销按钮。
系统退出管理员账号,并跳转至登录页面。

用例名称:教师注册

参与者:教师
前置条件:教师未注册账号
后置条件:教师成功注册账号
基本流程:
教师打开用户端应用。
系统显示注册页面。
教师输入工号和密码。
点击注册按钮。
系统验证工号是否已被注册。
如果工号未被注册,系统将教师信息存储至数据库。
如果工号已被注册,系统提示工号已被注册,请重新输入。

用例名称:学生注册

参与者:学生
前置条件:学生未注册账号
后置条件:学生成功注册账号
基本流程:
学生打开用户端应用。
系统显示注册页面。
学生输入学号和密码。
点击注册按钮。
系统验证学号是否已被注册。
如果学号未被注册,系统将学生信息存储至数据库。
如果学号已被注册,系统提示学号已被注册,请重新输入。

3.那么我们接下来就要确定所需要存储的数据类型和关系

需要存储的数据类型和可能如下:

  1. 管理员信息:

    • 用户名
    • 密码
    • 角色权限
  2. 教师信息:

    • 用户名
    • 密码
    • 工号
    • 基本信息(姓名、性别、联系方式等)
  3. 学生信息:

    • 用户名
    • 密码
    • 学号
    • 基本信息(姓名、性别、联系方式等)
  4. 管理员与教师/学生的关系:

    • 一个管理员可能管理多个教师/学生
  5. 教师与学生的关系:

    • 一个教师可能教授多个学生

4. 画E-R图

   +--------------+       +--------------+       +--------------+|  Administrator |       |    Teacher   |       |    Student   |+--------------+       +--------------+       +--------------+| -username    |       | -username    |       | -username    || -password    |       | -password    |       | -password    || -role        |       | -employee_id |       | -student_id  |+--------------+       +--------------+       +--------------+|                    |                     ||                  have                  ||                  many                  ||                    |                     ||                  +-----------+          |+------------------|  Manages  |----------++-----------+| -manager_id || -teacher_id || -student_id |+-----------+||+-----------+|  Teaches  |+-----------+| -teacher_id || -student_id |+-----------+

这个ER图较为简单,主要就是管理员,老师,学生之间的关系,根据ER图可以一目了然了 ,那么接下来我们根据ER图进行建表

5.设计数据库表结构

根据提供的ER图,设计数据库的表结构如下:

表名:Administrator
字段名称:username,password,role
字段类型:VARCHARVARCHARVARCHAR
约束:无
表名:Teacher
字段名称:username,password,employee_id
字段类型:VARCHARVARCHARINT
约束:无
表名:Student
字段名称:username,password,student_id
字段类型:VARCHARVARCHARINT
约束:无
表名:Manages
字段名称:manager_id,teacher_id,student_id
字段类型:INTINTINT
约束:外键约束,其中manager_id参考Administrator表的username字段,teacher_id参考Teacher表的employee_id字段,student_id参考Student表的student_id字段
表名:Teaches
字段名称:teacher_id,student_id
字段类型:INTINT
约束:外键约束,其中teacher_id参考Teacher表的employee_id字段,student_id参考Student表的student_id字段

结构既然已经确定,那么就开始建库建库了

6.建库

CREATE DATABASE SchoolDB;

根据以上的表结构设计,可以创建一个名为"SchoolDB"的数据库,并在该数据库中创建以下的表:

表名:Administrator

字段名类型约束
usernameVARCHAR
passwordVARCHAR
roleVARCHAR

表名:Teacher

字段名类型约束
usernameVARCHAR
passwordVARCHAR
employee_idINT

表名:Student

字段名类型约束
usernameVARCHAR
passwordVARCHAR
student_idINT

表名:Manages

字段名类型约束
manager_idINT外键参考Administrator表的username字段
teacher_idINT外键参考Teacher表的employee_id字段
student_idINT外键参考Student表的student_id字段

表名:Teaches

字段名类型约束
teacher_idINT外键参考Teacher表的employee_id字段
student_idINT外键参考Student表的student_id字段

以上表结构中的"INT"类型表示整数类型,"VARCHAR"类型表示可变长度字符串类型。在表结构中的约束部分,外键约束指明了该字段必须参考另一个表的特定字段,并且保证参考的字段值在参考表中存在。

7.运行sql语句

可以使用以下的SQL语句来创建表和约束:

创建Administrator表:

CREATE TABLE Administrator (username VARCHAR,password VARCHAR,role VARCHAR
);

创建Teacher表:

CREATE TABLE Teacher (username VARCHAR,password VARCHAR,employee_id INT
);

创建Student表:

CREATE TABLE Student (username VARCHAR,password VARCHAR,student_id INT
);

创建Manages表:

CREATE TABLE Manages (manager_id INT,teacher_id INT,student_id INT,FOREIGN KEY (manager_id) REFERENCES Administrator(username),FOREIGN KEY (teacher_id) REFERENCES Teacher(employee_id),FOREIGN KEY (student_id) REFERENCES Student(student_id)
);

创建Teaches表:

CREATE TABLE Teaches (teacher_id INT,student_id INT,FOREIGN KEY (teacher_id) REFERENCES Teacher(employee_id),FOREIGN KEY (student_id) REFERENCES Student(student_id)
);

这样就可以根据给定的表结构,在名为"SchoolDB"的数据库中创建以上的表。

8.运行sql看看是否出错以及修改方法

在使用上述代码运行过程中遇到了两个代码错误

  • 未指定字段类型和长度
  • 外键约束在 Manages 表中,参照的列和被参照的列类型不兼容。manager_id 是 INT 类型,而 Administrator 表中的 username 列是 VARCHAR(255) 类型。

则完整代码如下,并正确运行

CREATE DATABASE SchoolDB;
USE SchoolDB;CREATE TABLE Administrator (username VARCHAR(255),password VARCHAR(255),role VARCHAR(255),PRIMARY KEY (username)
);
CREATE TABLE Teacher (username VARCHAR(255),password VARCHAR(255),employee_id INT,PRIMARY KEY (employee_id)
);
CREATE TABLE Student (username VARCHAR(255),password VARCHAR(255),student_id INT,PRIMARY KEY (student_id)
);
CREATE TABLE Manages (manager_id VARCHAR(255),teacher_id INT,student_id INT,FOREIGN KEY (manager_id) REFERENCES Administrator(username),FOREIGN KEY (teacher_id) REFERENCES Teacher(employee_id),FOREIGN KEY (student_id) REFERENCES Student(student_id)
);
CREATE TABLE Teaches (teacher_id INT,student_id INT,FOREIGN KEY (teacher_id) REFERENCES Teacher(employee_id),FOREIGN KEY (student_id) REFERENCES Student(student_id)
);

运行如图:

在这里插入图片描述
Administrator
在这里插入图片描述Student
在这里插入图片描述
Teacher
在这里插入图片描述

9.验证数据库和表的创建

验证库:

DESCRIBE SchoolDB;

验证表:

DESCRIBE Administrator;
DESCRIBE Teacher;
DESCRIBE Student;

总结

在我们刚刚拿到项目时,首先,需要详细了解业务需求和数据流程,明确数据的输入和输出,确定需要存储的数据类型和关系。再设计数据库,其中可以画出ER图进行辅助,那么建好数据库之后,我们就完成了第一个工作——数据库设计和创建
在这里插入图片描述

那么接下来,就正式开始后端开发

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/31255.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【windows】windows上如何使用linux命令?

前言 windows上的bat命令感觉不方便,想在windows上使用linux命令。 有人提供了轮子,本文简单介绍一些该轮子的安装与使用,希望能够帮助到和我有一起需求的网友。 我的答案是busybox。 1.安装busybox.exe 在这个网站上安装busybox busyb…

【gridsample】地平线如何支持gridsample算子

文章目录 1. grid_sample算子功能解析1.1 理论介绍1.2 代码分析1.2.1 x,y取值范围[-1,1]1.2.2 x,y取值范围超出[-1,1] 2. 使用grid_sample算子构建一个网络3. 走PTQ进行模型转换与编译 实操以J5 OE1.1.60对应的docker为例 1. grid_sample算子功能解析 该段主要参考:…

Unity 编辑器资源导入处理函数 OnPreprocessAudio :深入解析与实用案例

Unity 编辑器资源导入处理函数 OnPreprocessAudio 用法 点击封面跳转下载页面 简介 在 Unity 中,资源导入是一个非常重要的环节,它决定了资源在项目中的使用方式和效果。Unity 提供了一系列的资源导入处理函数,其中之一就是 OnPreprocessAud…

线性代数(三) 线性方程组

前言 如何利用行列式,矩阵求解线性方程组。 线性方程组的相关概念 用矩阵方程表示 齐次线性方程组:Ax0;非齐次线性方程组:Axb. 可以理解 齐次线性方程组 是特殊的 非齐次线性方程组 如何判断线性方程组的解 其中R(A)表示矩阵A的…

主数据管理案例-中国外运

1、 背景介绍及难点分析 作为世界领先的物流行业整合商、端到端的全程供应链解决方案和一站式物流服务提供商,中国外运非常重视信息化建设,先后投资建设了 300多个信息系统,为中国外运的内部管理和业务运作提供 IT 支持和保障。 由于缺乏统一…

进程间通信的编程方式(IPC)及实验

进程间通信(IPC)方式 目录 Socket 管道 匿名管道 消息队列 共享内存 信号 远程过程调用 Socket Socket编程是一种在计算机网络中进程间通信的编程方法。Socket提供了一种在不同主机上运行的进程之间传输数据的机制。通过使用Socket API&#xff…

Effective Java笔记(30)优先考虑泛型方法

正如类可以从泛型中受益一般 ,方法也一样。静态工具方法尤其适合于泛型化 。 Collections 中的所有“算法”方法(例如 binarySearch 和 sort )都泛型化了 。 编写泛型方法与编写泛型类型相类似 。 例如下面这个方法,它返回两个集合…

iOS问题记录 - Xcode 15安装低版本iOS模拟器(持续更新)

文章目录 前言开发环境问题描述问题分析1. 定位问题2. 逆向分析2.1. IDA Free2.2. Hopper Disassembler Demo 3. 模拟器日志4. supportedArchs 解决方案最后 前言 最近新需求很多,项目改动很大,开发完成后想测一遍在低版本iOS系统上的兼容性&#xff0c…

分享21年电赛F题-智能送药小车-做题记录以及经验分享

这里写目录标题 前言一、赛题分析1、车型选择2、巡线1、OpenMv循迹2、灰度循迹 3、装载药品4、识别数字5、LED指示6、双车通信7、转向方案1、开环转向2、位置环速度环闭环串级转向3、MPU6050转向 二、调试经验分享1、循迹2、识别数字3、转向4、双车通信5、逻辑处理6、心态问题 …

Docker卸载安装及国内镜像源(详细版)

文章目录 一、卸载已有Docker1、首先判断本地有没有docker:2、判断CentOS下 docker是否在运行:3、停止docker运行&查看状态4、yum查看docker安装的包并卸载5、删除docker安装目录6、查看docker version 二、Docker安装及镜像源配置1、centOS 7 yum源…

Jay17 2023.8.10日报

笔记 【python反序列化】 序列化 类对象->字节流(字符串) 反序列化 字节流->对象 python反序列化没PHP这么灵活,没这么多魔术方法。 import pickle import os class ctfshow(): def init(self): self.username0 self.password0 d…

【数理知识】求刚体旋转矩阵和平移矩阵,已知 N>=3 个点在前后时刻的坐标,且这 N>=3 点间距离始终不变代表一个刚体

序号内容1【数理知识】自由度 degree of freedom 及自由度的计算方法2【数理知识】刚体 rigid body 及刚体的运动3【数理知识】刚体基本运动,平动,转动4【数理知识】向量数乘,内积,外积,matlab代码实现5【数理知识】最…

轻松预约,尽享美食,详解餐厅预约小程序的设计与实现

随着智能手机的普及和人们生活水平的提高,餐厅预约已经成为人们日常生活中的一部分。为了更好地满足人们的需求,许多餐厅开始使用小程序来提供更方便快捷的预约服务。本文将介绍如何制作一款餐厅预约小程序的详细步骤。 1. 进入乔拓云网后台,…

uni-app微信小程序开发自定义select下拉多选内容篇

分享-2023年资深前端进阶:前端登顶之巅-最全面的前端知识点梳理总结 *分享一个使用比较久的🪜 技术框架公司的选型:uni-app uni-ui vue3 vite4 ts 需求分析:微信小程序-uni-ui内容 1、创建一个自定义的下拉,支持多…

OSPF无法建立领居的原因有哪些(第三十五课)

1 配置OSPF 1.1 思路 1,配置IP地址 2,配置OSPF 配置进程号 route-id进入区域宣告网段 配置IP地址 R1路由表 ------------------------------------------------------------------------------ Routing Tables: Public Destinations : 10 …

《人脸识别技术应用安全管理规定(征求意见稿)》,需要关注三个焦点

目录 严防人脸信息采集与滥用 规范人脸识别信息的处理 保障人脸识别技术的安全 人脸识别主要有三类风险 近日,国家互联网信息办公室发布《人脸识别技术应用安全管理规定(试行)(征求意见稿)》公开征求意见的通知。 …

Python 模块 locust 性能测试

简介 locust 是 Python 的一个开源的负载测试工具,用于测试网络应用程序的性能和可伸缩性。它使用Python编写,并提供了一个简单易用的语法来定义和执行负载测试。locust模块允许用户模拟大量并发用户并观察系统在高负载下的响应情况。 目录 1. 基本用法…

多线程的实现方式Thread、Runnable、Callable

1.并发和并行 并发:在同一时刻,有多个指令在单个CPU上交替执行。 并行:在同一时刻,有多个指令在多个CPU上同时执行 2.多线程的实现方式 2.1 继承Thread类实现方式 2.2 实现Runnable接口的实现方式 2.3 利用Callable接口和Futur…

基于金融行业的软件测试分析

随着银行业务不断增加,业务模式不断复杂化,对我们的银行软件也要求越来越高,产出高质量的产品也非常重要,下面对银行软件测试进行分析总结。 银行软件集中度高,规模庞大,往往是以系统群的方式存在&#xff…