news 2026/7/14 10:22:30

MySQL 系统学习 第五阶段:企业级 MySQL 实战开发 第十章:综合企业项目实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL 系统学习 第五阶段:企业级 MySQL 实战开发 第十章:综合企业项目实战

一、项目需求分析

企业后台通常包含:

1. 用户管理

功能:

  • 用户登录
  • 创建用户
  • 修改用户
  • 删除用户
  • 查询用户列表

2. 角色权限管理

功能:

  • 创建角色
  • 分配角色
  • 分配权限
  • 动态菜单

3. 商品管理

功能:

  • 商品 CRUD
  • 分类管理
  • 库存管理

4. 订单管理

功能:

  • 创建订单
  • 查询订单
  • 修改订单状态

5. 操作日志

记录:

谁:

admin

什么时候:

2026-07-13

做了什么:

修改用户权限

二、系统整体架构设计

Vue3 | | Controller | | Service | | Repository | | MySQL

NestJS模块:

src ├── auth ├── user ├── role ├── permission ├── product ├── order ├── log

三、数据库整体设计

核心表:

用户模块 sys_user 权限模块 sys_role sys_permission sys_user_role sys_role_permission 商品模块 product category 订单模块 orders order_item 日志模块 operation_log login_log

整体关系:

User | | Role | | Permission User | | Order | | OrderItem | | Product

四、用户表设计

sys_user

CREATE TABLE sys_user( id BIGINT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) NOT NULL, password VARCHAR(100) NOT NULL, nickname VARCHAR(50), status TINYINT DEFAULT 1, create_time DATETIME, update_time DATETIME, deleted_at DATETIME );

为什么这样设计?

id

BIGINT:

企业主键。


password

不能明文。

保存:

hash。

例如:

bcrypt(password)

status

控制:

1 正常 0 禁用

deleted_at

软删除。


五、User Entity设计

@Entity('sys_user') export class User { @PrimaryGeneratedColumn({ type:'bigint' }) id:number; @Column() username:string; @Column() password:string; @Column() status:number; @CreateDateColumn() createTime:Date; @UpdateDateColumn() updateTime:Date; @DeleteDateColumn() deletedAt:Date; @ManyToMany( ()=>Role ) @JoinTable({ name:'sys_user_role' }) roles:Role[]; }

这里使用:

前面学习的:

  • Entity
  • Column
  • 主键
  • 时间字段
  • 软删除
  • ManyToMany

六、RBAC权限设计

表结构

sys_role

角色:

管理员 普通员工 运营人员

sys_permission

权限:

user:create user:update order:view

关系:

User 多对多 Role Role 多对多 Permission

七、权限Entity设计

Role:

@Entity() export class Role{ @Column() roleName:string; @Column() roleCode:string; @ManyToMany( ()=>Permission ) @JoinTable() permissions:Permission[]; }

Permission:

@Entity() export class Permission{ @Column() name:string; @Column() code:string; }

八、登录流程设计 ⭐⭐⭐⭐⭐

用户登录:

username password

流程:

Controller ↓ AuthService ↓ 查询User ↓ 验证密码 ↓ 生成JWT ↓ 返回Token

代码:

const user = await userRepository.findOne({ where:{ username } })

验证:

bcrypt.compare( password, user.password )

生成:

JWT:

{ userId:1 }

九、用户列表接口设计

需求:

后台用户列表:

条件:

  • 用户名搜索
  • 状态
  • 分页

接口:

GET /users

参数:

{ keyword:"tom", status:1, page:1, size:20 }

Service:

findAndCount({ where:{ username:Like('%tom%'), status:1 }, skip:0, take:20, order:{ createTime:'DESC' } })

返回:

{ list:[], total:1000 }

使用:

第七章内容。


十、订单系统设计

orders

id user_id total_amount status create_time

order_item

id order_id product_id price quantity

关系:

Order 1 | N OrderItem

为什么拆开?

因为:

一个订单多个商品。


十一、创建订单事务 ⭐⭐⭐⭐⭐

流程:

创建订单 ↓ 扣库存 ↓ 生成订单商品 ↓ 提交事务

必须事务:

因为:

不能出现:

订单创建成功

但是商品没保存。


代码:

await dataSource.transaction( async manager=>{ await manager.save(Order) await manager.save(OrderItem) } )

对应:

第七章事务知识。


十二、日志系统设计

operation_log

字段:

id user_id username module operation content create_time

例如:

管理员:

修改用户角色。

保存:

{ username:"admin", operation:"修改角色", content: "给Tom增加管理员权限" }

为什么保存username?

因为:

用户可能删除。

历史日志必须可读。


十三、数据库优化

根据第九章:

User表

查询:

username

status

增加:

INDEX(username,status)

Order表

查询:

用户订单:

WHERE user_id ORDER BY create_time

索引:

INDEX( user_id, create_time )

十四、项目目录设计

企业推荐:

src ├── modules │ ├── auth │ ├── auth.controller.ts │ ├── auth.service.ts │ ├── user │ ├── user.entity.ts │ ├── user.service.ts │ ├── role │ ├── permission │ ├── order │ ├── product │ ├── log

十五、数据库发布流程

开发:

修改Entity

生成Migration

Git提交

测试执行Migration

生产执行Migration

禁止:

直接修改生产数据库

十六、完整请求流程

例如:

管理员删除用户。

流程:

Vue按钮 ↓ DELETE /users/1 ↓ Controller ↓ UserService ↓ Repository.softDelete() ↓ 保存OperationLog ↓ 返回结果

数据库:

user:

deleted_at = 当前时间

operation_log:

记录删除操作

十七、企业项目核心设计原则

1. 数据库设计优先

不要:

先写代码。

应该:

需求 ↓ 数据库设计 ↓ Entity ↓ Service ↓ 接口

2. Entity只负责数据

不要:

业务写Entity。


3. Service负责业务

例如:

订单创建:

Service完成。


4. Repository负责数据访问

不要:

Controller直接操作数据库。


5. 所有重要操作留痕

例如:

权限修改。

订单修改。

用户删除。


十八、第五阶段总结

经过第五阶段,你已经掌握:

MySQL

✅ DDL

✅ DML

✅ DQL

✅ DCL

✅ 表设计

✅ 索引

✅ SQL优化


企业数据库设计

✅ RBAC

✅ 电商订单

✅ 博客系统

✅ 日志系统


NestJS + TypeORM

✅ Entity

✅ Repository

✅ 查询

✅ 事务

✅ Migration

✅ 性能优化


第五阶段最终一句话总结:

企业后端开发不是会写 CRUD,而是能够设计稳定、安全、可维护、可扩展的数据系统。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 10:21:25

基于YOLOv8的船舶类型识别系统:从深度学习原理到工程实践

在港口监控、海上安全和船舶管理等领域,船舶类型的自动识别一直是个技术难点。传统的人工识别方式效率低下且容易出错,而基于深度学习的目标检测技术为此提供了高效的解决方案。本文将完整介绍如何基于YOLOv8框架构建一个船舶类型分类识别系统&#xff0…

作者头像 李华
网站建设 2026/7/14 10:21:15

从零搭建crAPI靶场:实战演练API安全与业务逻辑漏洞挖掘

1. 项目概述:为什么选择crAPI作为你的第一个实战靶场? 如果你刚接触Web安全,或者已经刷过一些像DVWA、Pikachu这样的经典靶场,正在寻找一个更贴近现代应用、挑战性更高的“练手场”,那么crAPI(Completely …

作者头像 李华
网站建设 2026/7/14 10:20:01

Dell R720 UEFI启动项丢失的排查与手动恢复指南

1. 问题现象与常见原因分析当你发现Dell R720服务器开机时卡在"No boot device available"界面,或者启动菜单中原本存在的UEFI启动项神秘消失时,先别急着重装系统。根据我处理过的三十多起同类案例,这类问题通常由以下五种情况引起…

作者头像 李华
网站建设 2026/7/14 10:19:53

Windows系统MBR磁盘分区原理与实战指南

1. Windows系统MBR磁盘分区完全指南 作为Windows系统管理员最常打交道的底层技术之一,MBR(主引导记录)磁盘分区方案至今仍是2TB以下硬盘的主流选择。记得我第一次给公司老服务器扩容时,面对满屏的"convert gpt"建议却坚…

作者头像 李华
网站建设 2026/7/14 10:19:45

TDA7468与PIC18微控制器的智能音频系统设计

1. 音频处理系统的核心组件解析这个项目本质上是一个基于TDA7468音频处理器和PIC18LF26K80微控制器的智能音频路由与处理系统。作为一名音频设备开发者,我经常遇到需要同时处理多个音频源并实现精细控制的场景,而这款组合方案恰好解决了这个痛点。TDA746…

作者头像 李华