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

news2024/11/28 4:21:18

作者介绍

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

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.coloradmin.cn/o/861388.html

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

相关文章

【Linux】UDP协议——传输层

目录 传输层 再谈端口号 端口号范围划分 认识知名端口号 两个问题 netstat与iostat pidof UDP协议 UDP协议格式 UDP协议的特点 面向数据报 UDP的缓冲区 UDP使用注意事项 基于UDP的应用层协议 传输层 在学习HTTP等应用层协议时,为了便于理解&#xff…

Al Go: 蒙特卡洛树搜索(MCTS)简介

目录 1. 前言 1.1 Minimax 1.2 剪枝 1.3 蒙特卡洛树搜索 1.4 为什么随机走子会可行呢? 2. vanilla Monte Carlo tree search 3. UCT-based trade-off between exploitation and exploration 4. MCTS基本算法流程 5. Efficiency Through Expert Policies 6…

Spring整合MyBatis(详细步骤)

Spring与Mybatis的整合&#xff0c;大体需要做两件事&#xff0c; 第一件事是:Spring要管理MyBatis中的SqlSessionFactory 第二件事是:Spring要管理Mapper接口的扫描 具体的步骤为: 步骤1:项目中导入整合需要的jar包 <dependency><!--Spring操作数据库需要该jar包…

【雕爷学编程】Arduino动手做(04)---震动模块之常闭型SW-420传感器与SW-520D倾斜模块的应用

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

使用 Python 中的 Langchain 从零到高级快速进行工程

大型语言模型 (LLM) 的一个重要方面是这些模型用于学习的参数数量。模型拥有的参数越多,它就能更好地理解单词和短语之间的关系。这意味着具有数十亿个参数的模型有能力生成各种创造性的文本格式,并以信息丰富的方式回答开放式和挑战性的问题。 ChatGPT 等法学硕士利用 T

代码质量检查工具SonarQube

Devops流水线之SonarQube 文章目录 Devops流水线之SonarQube1. 软件功能介绍及用途2. 软件环境搭建与使用2.1 使用方法2.2 SonarQube相关属性说明2.3 Sonar配置文件内容说明 3. 使用环节4. 检查方法 1. 软件功能介绍及用途 SonarQube是一个用于代码质量管理的开源平台&#xf…

一百四十九、Kettle——Linux上安装的kettle8.2创建共享资源库时遇到的问题(持续更新中)

一、目的 在kettle8.2在Linux上安装好可以启动界面、并且可以连接MySQL、Hive、ClickHouse等数据库后开始创建共享资源库&#xff0c;但是遇到了一些问题 二、Linux系统以及kettle版本 &#xff08;一&#xff09;Linux&#xff1a;CentOS 7 英文的图形化界面模式 &#…

竞赛项目 深度学习的水果识别 opencv python

文章目录 0 前言2 开发简介3 识别原理3.1 传统图像识别原理3.2 深度学习水果识别 4 数据集5 部分关键代码5.1 处理训练集的数据结构5.2 模型网络结构5.3 训练模型 6 识别效果7 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习…

无涯教程-Perl - index函数

描述 此函数返回STR中第一次出现的SUBSTR的位置,该位置从开头(从零开始)开始,或者从POSITION(如果指定)开始。 语法 以下是此函数的简单语法- index STR, SUBSTR, POSITIONindex STR, SUBSTR返回值 失败时此函数返回-1,否则返回匹配字符串的位置(第一个字符从零开始)。 例…

Mongoose http server 例子

今天抽了点时间看了一下 mongoose的源码&#xff0c; github 地址&#xff0c;发现跟以前公司内部使用的不太一样&#xff0c;这里正好利用其 http server 例子来看一下。以前的 http message 结构体是这样的&#xff1a; /* HTTP message */ struct http_message {struct mg_…

进程的退出

进程的退出分为正常退出和异常退出&#xff1a; 正常退出 Main函数调用return进程调用exit()&#xff0c;标准c库进程调用_exit()或_Exit()&#xff0c;属于系统调用进程最后一个线程返回&#xff08;之后学到&#xff09;最后一个线程调用pthread_exit&#xff08;之后学到&…

MySQL事务:ACID特性实现原理

事务是MySQL等关系型数据库区别于NoSQL的重要方面&#xff0c;是保证数据一致性的重要手段。本文将首先介绍MySQL事务相关的基础概念&#xff0c;然后介绍事务的ACID特性&#xff0c;并分析其实现原理。 MySQL博大精深&#xff0c;文章疏漏之处在所难免&#xff0c;欢迎批评指…

基于Elman神经网络的电力负荷预测

1 案例背景 1.1 Elman神经网络概述 根据神经网络运行过程中的信息流向,可将神经网络可分为前馈式和反馈式两种基本类型。前馈式网络通过引入隐藏层以及非线性转移函数可以实现复杂的非线性映射功能。但前馈式网络的输出仅由当前输人和权矩阵决定,而与网络先前的输出结果无关。…

Postman中,既想传递文件,还想传递多个参数(后端)

需求:既想传文件又想传多个参数可以用以下方式实现

2023年的深度学习入门指南(25) - 通义千问7b

2023年的深度学习入门指南(25) - 通义千问7b 最近发生的两件事情都比较有意思&#xff0c;一个是连续开源了7b和13b模型的百川&#xff0c;对其53b闭源了&#xff1b;另一个是闭源项目通义千问开源了自己的7b模型。 下面我们就来研究下通义千问7b. 使用通义千问7b 首先安装…

LeetCode 31题:下一个排列

目录 题目 思路 代码 题目 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如&#xff0c;arr [1,2,3] &#xff0c;以下这些都可以视作 arr 的排列&#xff1a;[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序…

sql高频面试题-去除最高最低的平均

面试或者笔试的过程中会设定各种各样的场景&#xff0c;在这些场景下考查我们SQL的查询能力&#xff0c;但是万变不离其宗&#xff0c;业务场景只是一个表现形式&#xff0c;抽象为SQL问题后其实基本上就是几类问题&#xff1a;计算累计、连续&#xff0c;分类TopN等。只要掌握…

浅谈智能配电房在海岛中的应用 安科瑞 顾语欢

摘要&#xff1a;以海陵岛旅游区海岛智能配电房设计方案为研究对象,从功能设计、逻辑设计和拓扑设计三方面进行 分析,得出契合海陵岛实际和海岛特点的智能配电房方案设计。通过对设计方案研究,总结提炼了海岛智 能配电房组成要素,为进一步提炼统一规范的智能配电房技术标准打下…

Spring Gateway+Security+OAuth2+RBAC 实现SSO统一认证平台

背景&#xff1a;新项目准备用SSO来整合之前多个项目的登录和权限&#xff0c;同时引入网关来做后续的服务限流之类的操作&#xff0c;所以搭建了下面这个系统雏形。 关键词&#xff1a;Spring Gateway, Spring Security, JWT, OAuth2, Nacos, Redis, Danymic datasource, Jav…

Apoll 多项式规划求解

一、纵向规划 void QuarticPolynomialCurve1d::ComputeCoefficients(const float x0, const float dx0, const float ddx0, const float dx1,const float ddx1, const float p) {if (p < 0.0) {std::cout << "p should be greater than 0 at line 140." &…