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