MySQL 系统学习 第五阶段:企业级 MySQL 实战开发 第十章:综合企业项目实战 一、项目需求分析企业后台通常包含1. 用户管理功能用户登录创建用户修改用户删除用户查询用户列表2. 角色权限管理功能创建角色分配角色分配权限动态菜单3. 商品管理功能商品 CRUD分类管理库存管理4. 订单管理功能创建订单查询订单修改订单状态5. 操作日志记录谁admin什么时候2026-07-13做了什么修改用户权限二、系统整体架构设计Vue3 | | Controller | | Service | | Repository | | MySQLNestJS模块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_userCREATE 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 );为什么这样设计idBIGINT企业主键。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[]; }这里使用前面学习的EntityColumn主键时间字段软删除ManyToMany六、RBAC权限设计表结构sys_role角色管理员 普通员工 运营人员sys_permission权限user:create user:update order:view关系User 多对多 Role Role 多对多 Permission七、权限Entity设计RoleEntity() export class Role{ Column() roleName:string; Column() roleCode:string; ManyToMany( ()Permission ) JoinTable() permissions:Permission[]; }PermissionEntity() 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 }ServicefindAndCount({ where:{ username:Like(%tom%), status:1 }, skip:0, take:20, order:{ createTime:DESC } })返回{ list:[], total:1000 }使用第七章内容。十、订单系统设计ordersid user_id total_amount status create_timeorder_itemid 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表查询usernamestatus增加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而是能够设计稳定、安全、可维护、可扩展的数据系统。

相关新闻

最新新闻

【华三】GRE Over IPsec 与 OSPF 动态路由联调实战

【华三】GRE Over IPsec 与 OSPF 动态路由联调实战

1. GRE Over IPsec与OSPF动态路由联调概述在企业组网中,总部与分支机构之间的安全通信是刚需。GRE Over IPsec技术组合完美解决了这个痛点——GRE隧道负责封装各类流量(包括组播和广播),而IPsec则为这些流量提供加密保护。这种组合…

2026/7/14 12:02:42
终极Mac窗口置顶指南:如何让任意应用窗口始终保持在最前面

终极Mac窗口置顶指南:如何让任意应用窗口始终保持在最前面

终极Mac窗口置顶指南:如何让任意应用窗口始终保持在最前面 【免费下载链接】Topit Pin any window to the top of your screen / 在Mac上将你的任何窗口强制置顶 项目地址: https://gitcode.com/gh_mirrors/to/Topit 还在为Mac上窗口层层叠叠而烦恼吗&#x…

2026/7/14 12:02:42
从图形魔法到逻辑思维:GoC编程如何为中小学生打开C++世界的大门

从图形魔法到逻辑思维:GoC编程如何为中小学生打开C++世界的大门

1. 当代码变成画笔:GoC如何让编程课变成艺术课 第一次看到学生用GoC画出的彩色风车时,我差点以为走错了教室——这哪是编程课,分明是美术工作室!那个总在数学课上打瞌睡的小男孩,此刻正兴奋地向同学展示他刚完成的&quo…

2026/7/14 12:02:42
终极7字重解决方案:思源宋体CN免费商用字体完全指南

终极7字重解决方案:思源宋体CN免费商用字体完全指南

终极7字重解决方案:思源宋体CN免费商用字体完全指南 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为中文设计项目找不到合适的免费商用字体而烦恼吗?思源…

2026/7/14 12:02:42
安卓修改大师:APK防抓包与防截屏实战全攻略——从添加到移除的完整技术解析

安卓修改大师:APK防抓包与防截屏实战全攻略——从添加到移除的完整技术解析

安卓修改大师:APK防抓包与防截屏实战全攻略——从添加到移除的完整技术解析 简介 在移动应用安全领域,防抓包与防截屏是保护用户隐私和数据安全的重要技术手段。本文将深入剖析安卓修改大师(官网:www.apkeditor.cn)如…

2026/7/14 12:02:42
如何快速配置Baldur‘s Gate 3脚本扩展器:新手必看的完整指南

如何快速配置Baldur‘s Gate 3脚本扩展器:新手必看的完整指南

如何快速配置Baldurs Gate 3脚本扩展器:新手必看的完整指南 【免费下载链接】bg3se Baldurs Gate 3 Script Extender 项目地址: https://gitcode.com/gh_mirrors/bg/bg3se Baldurs Gate 3 Script Extender(简称BG3SE)是一款专为《博德…

2026/7/14 11:57:41

月新闻