You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
6.4 KiB
6.4 KiB
职来 (mydreamjob) 数据库 ERD 设计
版本: v0.1 | 更新日期: 2026-08-03 | 状态: Week 1 基线
实体关系图 (ERD)
┌──────────────┐ ┌──────────────┐
│ users │1 *│ user_roles │
│──────────────│──────▶│──────────────│
│ id (PK) │ │ user_id (FK) │
│ phone │ │ role (Enum) │
│ email │ └──────────────┘
│ nickname │
│ avatar_url │ ┌──────────────┐ ┌──────────────┐
│ password_hash│ │sms_vrf_codes │ │ audit_logs │
│ role (Enum) │ │──────────────│ │──────────────│
│ is_active │ │ id (PK) │ │ id (PK) │
│ is_verified │ │ phone │ │ user_id (FK) │
│ created_at │ │ code │ │ action │
│ updated_at │ │ purpose │ │ entity_type │
└──────────────┘ │ attempts │ │ entity_id │
│ │ max_attempts │ │ details │
│1 │ expired_at │ │ ip_address │
│ │ used │ │ user_agent │
│ │ created_at │ │ request_id │
│ └──────────────┘ │ created_at │
│ └──────────────┘
│
│1 ┌──────────────┐
└───────────────▶│ auth_tokens │
│──────────────│
│ id (PK) │
│ user_id (FK) │
│ token_hash │
│ token_type │
│ expired_at │
│ revoked │
│ refresh_hash │
│ created_at │
└──────────────┘
实体说明
1. users (用户)
核心用户表,支持学生、企业、管理员三种角色。
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | BIGINT | PK, AUTO_INCREMENT | 主键 |
| phone | VARCHAR(20) | UNIQUE, NOT NULL | 手机号(登录主键) |
| VARCHAR(100) | NULLABLE | 邮箱 | |
| nickname | VARCHAR(50) | NULLABLE | 昵称 |
| avatar_url | VARCHAR(500) | NULLABLE | 头像URL |
| password_hash | VARCHAR(255) | NULLABLE | BCrypt 密码哈希 |
| role | VARCHAR(30) | NOT NULL | 主角色: STUDENT/COMPANY/ADMIN |
| is_active | TINYINT(1) | DEFAULT 1 | 是否启用 |
| is_verified | TINYINT(1) | DEFAULT 0 | 是否已认证 |
| created_at | DATETIME | NOT NULL | 创建时间 |
| updated_at | DATETIME | NOT NULL | 更新时间 |
2. user_roles (用户角色关联)
多对多关系,支持用户拥有多个角色。
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| user_id | BIGINT | FK → users.id, PK | 用户ID |
| role | VARCHAR(30) | Enum, PK | 角色: STUDENT/COMPANY/ADMIN |
3. sms_verification_codes (短信验证码)
短信验证码记录,用于登录/注册验证。
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | BIGINT | PK, AUTO_INCREMENT | 主键 |
| phone | VARCHAR(20) | NOT NULL | 手机号 |
| code | VARCHAR(10) | NOT NULL | 验证码 |
| purpose | VARCHAR(50) | NOT NULL | 用途: login/register 等 |
| attempts | INT | DEFAULT 0 | 错误尝试次数 |
| max_attempts | INT | DEFAULT 5 | 最大尝试次数 |
| expired_at | DATETIME | NOT NULL | 过期时间 |
| used | TINYINT(1) | DEFAULT 0 | 是否已使用 |
| created_at | DATETIME | NOT NULL | 创建时间 |
4. audit_logs (审计日志)
系统操作审计记录,追踪关键业务行为。
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | BIGINT | PK, AUTO_INCREMENT | 主键 |
| user_id | BIGINT | FK → users.id | 操作用户ID |
| action | VARCHAR(50) | NOT NULL | 操作类型: LOGIN/LOGOUT/SEND等 |
| entity_type | VARCHAR(50) | NULLABLE | 实体类型 |
| entity_id | BIGINT | NULLABLE | 实体ID |
| details | TEXT | NULLABLE | 详细描述 |
| ip_address | VARCHAR(45) | NULLABLE | 客户端IP |
| user_agent | VARCHAR(500) | NULLABLE | 浏览器UA |
| request_id | VARCHAR(32) | NULLABLE | 请求追踪ID |
| created_at | DATETIME | NOT NULL | 创建时间 |
5. auth_tokens (认证Token)
JWT Token 管理表,支持 Token 吊销和刷新。
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | BIGINT | PK, AUTO_INCREMENT | 主键 |
| user_id | BIGINT | FK → users.id, NOT NULL | 用户ID |
| token_hash | VARCHAR(255) | NOT NULL | Token Hash (SHA-256) |
| token_type | VARCHAR(20) | DEFAULT 'ACCESS' | ACCESS/REFRESH |
| expired_at | DATETIME | NOT NULL | 过期时间 |
| revoked | TINYINT(1) | DEFAULT 0 | 是否已吊销 |
| refresh_token_hash | VARCHAR(255) | NULLABLE | 刷新Token Hash |
| created_at | DATETIME | NOT NULL | 创建时间 |
后续规划(Week 2+)
以下实体在 Week 1 不实现,仅列出设计意图:
| 实体 | 说明 | 关联 |
|---|---|---|
| companies (企业) | 企业信息、认证状态 | users.role=COMPANY |
| jobs (岗位) | 招聘信息、薪资、地点 | companies.id |
| applications (投递) | 投递记录、状态流转 | users.id, jobs.id |
| ratings (评分) | 企业评分、评价 | users.id(评分者), companies.id(被评) |
| evidence (证据) | 证明材料、截图 | users.id, ratings.id |
| conversations (会话) | 聊天会话、消息 | users.id, jobs.id |
索引策略
users.phone/users.email: 唯一索引,用于登录查询sms_verification_codes.phone, created_at: 复合索引,用于查找最近验证码audit_logs.user_id, created_at: 复合索引,用于用户操作历史查询audit_logs.created_at: 单列索引,用于时间范围查询auth_tokens.user_id, revoked: 复合索引,用于用户Token管理