当前位置: 首页 > news >正文

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,而是能够设计稳定、安全、可维护、可扩展的数据系统。

http://www.cnnetsun.cn/news/3365438.html

相关文章:

  • 基于YOLOv8的船舶类型识别系统:从深度学习原理到工程实践
  • 从零搭建crAPI靶场:实战演练API安全与业务逻辑漏洞挖掘
  • ChatGPT+Excel+Python三合一数据分析法:7步实现从原始数据到商业洞察的自动化闭环
  • Dell R720 UEFI启动项丢失的排查与手动恢复指南
  • Windows系统MBR磁盘分区原理与实战指南
  • TDA7468与PIC18微控制器的智能音频系统设计
  • 如何为PilotGo-plugin-container贡献代码?新手开发者必读指南
  • AI-HEALTH系统:医疗健康评估的AI驱动解决方案
  • 从零开始构建企业级网络安全监控:Clear-NDR-ISO实战指南 [特殊字符]
  • OpenClaw开源AI助手:本地优先架构与多通道整合方案
  • SpringAI AlibabaRAGMilvus(三):提示词工程、Redis 记忆与 AI Tools 智能体
  • 【技术解析】Strip Pooling与MPM:重塑空间池化以增强场景解析的远程依赖建模
  • Unity WebGL集成海康摄像头:OpenAPI调用与AVProVideo播放实战指南
  • Android TV应用UI设计终极指南:5个技巧打造完美大屏体验
  • PyTorch机器学习(九)—— 从锚框到预测框:YOLO候选区域生成与标注的数学原理与代码实现
  • NoiseBuddy安全指南:理解fishhook在macOS应用中的使用与风险
  • Gemma-4-26B-A4B-IT-MXFP8模型的未来发展:社区贡献与路线图展望
  • ct-cockpit故障排除:常见问题解决和日志分析技巧
  • Docker容器调试与信息探查的3种核心方法
  • vLLM部署实战:NVIDIA Kimi-K2.7-Code-NVFP4高效推理配置详解
  • Qwen2-7B_rai_1.7.1_hybrid推理优化:从Tokenizer配置到混合推理的完整部署指南
  • 【常用传感器】LCD1602液晶时序与驱动代码深度解析
  • 可控智能体技术解析与产业落地实践
  • 库早报|国务院批复!3D打印机纳入“十五五”消费规划;航天企业完成9100万美元B轮融资;原子重塑推出AtomVerse平台
  • 三自由度机械臂RBF神经网络自适应控制实践
  • Oracle网络连接核心三剑客:listener.ora、tnsnames.ora与sqlnet.ora深度解析
  • 【数据颜值革命】用Seaborn魔法,让鸢尾花数据集绽放可视化之美
  • 基于帧差法与关键帧分析的非接触式身高动态测量
  • GraphPFN-1.3实战教程:如何利用图基础模型解决复杂节点回归问题
  • NV-Tesseract-AD 2.0最佳实践:企业级异常检测系统构建全流程