# 数据模型文档

## 概述

本文档描述了 188-179 招聘系统的数据模型设计。系统采用 TypeORM 作为 ORM，PostgreSQL 作为数据库。

## 核心实体

### 用户与认证

#### User (用户表)
```typescript
{
  id: number              // 主键
  username: string        // 用户名（唯一）
  email: string | null    // 邮箱
  password: string        // 加密密码
  roles: Role[]           // 用户角色（多对多）
  createTime: Date        // 创建时间
  updateTime: Date        // 更新时间
}
```

#### Role (角色表)
```typescript
{
  id: number              // 主键
  name: string            // 角色名称（唯一）
  permissions: string[]   // 权限列表
  users: User[]           // 用户列表（多对多）
  createTime: Date        // 创建时间
  updateTime: Date        // 更新时间
}
```

### 文件管理

#### File (文件表)
```typescript
{
  id: number              // 主键
  name: string            // 文件名
  path: string            // MinIO存储路径
  size: number            // 文件大小（字节）
  type: string            // 文件类型
  uploadUserId: number    // 上传用户ID
  uploadUser: User        // 上传用户（多对一）
  uploadTime: Date        // 上传时间
  lastUpdated: Date       // 最后更新时间
}
```

## 业务模块实体

### 订单管理

#### Order (订单表)
```typescript
{
  id: number              // 主键
  orderNo: string         // 订单号（唯一）
  orderType: string       // 订单类型
  status: number          // 状态：1-正常，0-禁用
  amount: number          // 订单金额
  createTime: Date        // 创建时间
  updateTime: Date        // 更新时间
}
```

### 企业管理

#### Company (公司表)
```typescript
{
  id: number              // 主键
  companyName: string     // 公司名称
  companyId: string       // 企业ID（唯一）
  status: number          // 状态：1-正常，0-禁用
  createTime: Date        // 创建时间
  updateTime: Date        // 更新时间
}
```

#### Platform (平台表)
```typescript
{
  id: number              // 主键
  platformName: string    // 平台名称
  companyId: number       // 所属公司
  company: Company        // 公司关联（多对一）
  status: number          // 状态：1-正常，0-禁用
  createTime: Date        // 创建时间
  updateTime: Date        // 更新时间
}
```

### 渠道管理

#### Channel (渠道表)
```typescript
{
  id: number              // 主键
  channelName: string     // 渠道名称（唯一）
  channelType: string     // 渠道类型
  contactPerson: string   // 联系人
  contactPhone: string    // 联系电话
  status: number          // 状态：1-正常，0-禁用
  createTime: Date        // 创建时间
  updateTime: Date        // 更新时间
}
```

### 残疾人员管理

#### DisabledPerson (残疾人员表)
```typescript
{
  id: number              // 主键
  name: string            // 姓名
  idCard: string          // 身份证号
  disabilityType: string  // 残疾类型
  disabilityLevel: string // 残疾等级
  disabilityCardNo: string // 残疾证号
  phone: string           // 联系电话
  address: string         // 地址
  avatarFileId: number    // 头像文件ID
  avatarFile: File        // 头像文件（多对一）
  status: number          // 状态：1-正常，0-禁用
  createTime: Date        // 创建时间
  updateTime: Date        // 更新时间
}
```

## 数据库设计规范

### 命名规范

| 类型 | 规范 | 示例 |
|------|------|------|
| 表名 | 小写下划线 | `user_info`, `order_detail` |
| 字段名 | 小写下划线 | `user_name`, `create_time` |
| 主键 | `id` 或 `{table}_id` | `id`, `user_id` |
| 外键 | `{referenced_table}_id` | `user_id`, `order_id` |
| 索引 | `idx_{column}_{purpose}` | `idx_user_name`, `idx_order_status` |
| 唯一索引 | `unique_{column}` | `unique_username` |

### 字段类型规范

| 数据类型 | PostgreSQL类型 | TypeORM类型 | 用途 |
|----------|----------------|-------------|------|
| 主键 | `int unsigned` | `int` | 自增主键 |
| 字符串(短) | `varchar(n)` | `varchar` | 用户名、名称等 |
| 字符串(长) | `text` | `text` | 描述、内容等 |
| 金额 | `decimal(10,2)` | `decimal` | 订单金额等 |
| 时间戳 | `timestamp` | `timestamp` | 创建时间、更新时间 |
| 状态 | `int` | `int` | 状态枚举 |
| 布尔 | `boolean` | `boolean` | 开关状态 |

### 时间戳字段

所有表都应包含时间戳字段：

```typescript
@Column({
  name: 'create_time',
  type: 'timestamp',
  default: () => 'CURRENT_TIMESTAMP',
  comment: '创建时间'
})
createTime!: Date;

@Column({
  name: 'update_time',
  type: 'timestamp',
  default: () => 'CURRENT_TIMESTAMP',
  onUpdate: 'CURRENT_TIMESTAMP',
  comment: '更新时间'
})
updateTime!: Date;
```

### 软删除字段

使用 `status` 字段实现软删除：

```typescript
@Column({
  name: 'status',
  type: 'int',
  default: 1,
  comment: '状态：1-正常，0-禁用'
})
status!: number;
```

## 关联关系

### 一对多 (OneToMany)

```typescript
// Company 拥有多个 Platform
@OneToMany(() => Platform, platform => platform.company)
platforms!: Platform[];
```

### 多对一 (ManyToOne)

```typescript
// Platform 属于一个 Company
@ManyToOne(() => Company, { eager: false })
@JoinColumn({ name: 'company_id', referencedColumnName: 'id' })
company!: Company;
```

### 多对多 (ManyToMany)

```typescript
// User 拥有多个 Role
@ManyToMany(() => Role, role => role.users)
@JoinTable({
  name: 'user_roles',
  joinColumn: { name: 'user_id', referencedColumnName: 'id' },
  inverseJoinColumn: { name: 'role_id', referencedColumnName: 'id' }
})
roles!: Role[];
```

## 迁移策略

### 创建迁移

```bash
cd packages/core-module
pnpm typeorm migration:generate -d src/data-source.ts src/migrations/MigrationName
```

### 运行迁移

```bash
pnpm db:migrate
```

### 回滚迁移

```bash
pnpm db:migrate:revert
```

## 相关文档

- [后端模块开发规范](../standards/backend-module-standards.md)
- [API设计](./api-design.md)

---

**文档版本**: 1.0
**最后更新**: 2026-01-07
