引言
当我们拿到项目需求后,有时候可能会感到迷茫,不知道整体流程和接下来该做什么。为了能够不断实战并快速提高自己,我们需要找到适合自己的一套开发流程。这样我们就能够有条不紊地进行项目开发,并且及时发现和修正自己的不足之处。
以最常用的java全栈开发为例,这个系列以MySQL数据库,后端以SpringBoot,MybatisPlus,Redis,Spring security,前端以vue,微信小程序的技术栈组合,进行步骤细化。
环境安装与前后端启动
要完成目标项目首先我们要确定合适的技术栈组合,然后检查环境是否安装正确完整
- 首先是数据库的安装配置
常用的主要有mysql和mongodb还有可视化工具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.那么我们接下来就要确定所需要存储的数据类型和关系
需要存储的数据类型和可能如下:
管理员信息:
用户名
密码
角色权限
教师信息:
用户名
密码
工号
基本信息(姓名、性别、联系方式等)
学生信息:
用户名
密码
学号
基本信息(姓名、性别、联系方式等)
管理员与教师/学生的关系:
一个管理员可能管理多个教师/学生
教师与学生的关系:
一个教师可能教授多个学生
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 字段类型:VARCHAR,VARCHAR,VARCHAR 约束:无
表名:Teacher 字段名称:username,password,employee_id 字段类型:VARCHAR,VARCHAR,INT 约束:无
表名:Student 字段名称:username,password,student_id 字段类型:VARCHAR,VARCHAR,INT 约束:无
表名:Manages 字段名称:manager_id,teacher_id,student_id 字段类型:INT,INT,INT 约束:外键约束,其中manager_id参考Administrator表的username字段,teacher_id参考Teacher表的employee_id字段,student_id参考Student表的student_id字段
表名:Teaches 字段名称:teacher_id,student_id 字段类型:INT,INT 约束:外键约束,其中teacher_id参考Teacher表的employee_id字段,student_id参考Student表的student_id字段
结构既然已经确定,那么就开始建库建库了
6.建库
CREATE DATABASE SchoolDB;
根据以上的表结构设计,可以创建一个名为"SchoolDB"的数据库,并在该数据库中创建以下的表:
表名:Administrator
字段名 | 类型 | 约束 |
username | VARCHAR | |
password | VARCHAR | |
role | VARCHAR |
表名:Teacher
字段名 | 类型 | 约束 |
username | VARCHAR | |
password | VARCHAR | |
employee_id | INT |
表名:Student
字段名 | 类型 | 约束 |
username | VARCHAR | |
password | VARCHAR | |
student_id | INT |
表名:Manages
字段名 | 类型 | 约束 |
manager_id | INT | 外键参考Administrator表的username字段 |
teacher_id | INT | 外键参考Teacher表的employee_id字段 |
student_id | INT | 外键参考Student表的student_id字段 |
表名:Teaches
字段名 | 类型 | 约束 |
teacher_id | INT | 外键参考Teacher表的employee_id字段 |
student_id | INT | 外键参考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图进行辅助,那么建好数据库之后,我们就完成了第一个工作——数据库设计和创建
那么接下来,就正式开始后端开发