data-model-schema-changes.md 2.2 KB

数据模型和Schema变更

版本信息

版本 日期 描述 作者
2.4 2025-09-20 与主架构文档版本一致 Winston

现有数据模型状态

用户模型:

  • 现状: 设计良好,包含完整的用户管理和权限系统
  • 关键属性:
    • id: number - 主键标识符
    • username: string - 唯一用户名(主要登录标识)
    • email: string | null - 可选邮箱地址
    • password: string - 加密密码(bcrypt哈希)
    • roles: Role[] - 用户角色多对多关系
  • 关系: 与Role实体建立正确的多对多关系映射

优化重点: 保持现有数据模型不变,仅优化查询性能和验证逻辑

TypeScript接口定义

// 用户实体接口
export interface User {
  id: number;
  username: string;
  email: string | null;
  password: string;
  roles: Role[];
  createdAt: Date;
  updatedAt: Date;
}

// 角色实体接口
export interface Role {
  id: number;
  name: string;
  permissions: string[];
  users: User[];
  createdAt: Date;
  updatedAt: Date;
}

// 用户创建DTO
export interface CreateUserDto {
  username: string;
  email?: string;
  password: string;
  roleIds?: number[];
}

// 用户更新DTO
export interface UpdateUserDto {
  username?: string;
  email?: string | null;
  password?: string;
  roleIds?: number[];
}

// 分页响应接口
export interface PaginatedResponse<T> {
  data: T[];
  pagination: {
    total: number;
    current: number;
    pageSize: number;
    totalPages: number;
  };
}

数据关系

  • User ↔ Role: 多对多关系,通过中间表关联
  • User → (createdAt, updatedAt): 自动时间戳管理
  • Role → permissions: 字符串数组存储权限列表

Schema集成策略

  • 数据库变更要求: 无新表创建,仅优化现有表结构
  • 新表: 无
  • 修改的表: 无结构性变更
  • 新索引: 考虑为常用查询字段添加索引
  • 迁移策略: 无破坏性变更,使用TypeORM迁移工具

向后兼容性

  • 保持所有现有API端点不变
  • 确保现有数据查询继续正常工作
  • 不修改任何现有字段定义
  • 新增功能通过可选字段或新端点实现