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

轻松聘 (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 手机号(登录主键)
email 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管理