
一、项目需求分析企业后台通常包含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而是能够设计稳定、安全、可维护、可扩展的数据系统。