first commit
This commit is contained in:
285
docs/database.md
Normal file
285
docs/database.md
Normal file
@@ -0,0 +1,285 @@
|
||||
# 数据库设计
|
||||
|
||||
## ER图
|
||||
|
||||
```
|
||||
┌──────────────┐ ┌──────────────┐
|
||||
│ departments │ │ users │
|
||||
├──────────────┤ ├──────────────┤
|
||||
│ id (PK) │ │ id (PK) │
|
||||
│ name │ │ username │
|
||||
│ code │ │ password_hash│
|
||||
│ dept_type │ │ staff_id(FK) │
|
||||
│ parent_id(FK)│ │ role │
|
||||
│ level │ │ is_active │
|
||||
│ sort_order │ └──────┬───────┘
|
||||
│ is_active │ │
|
||||
│ description │ │
|
||||
└──────┬───────┘ │
|
||||
│ │
|
||||
│ 1:N │ N:1
|
||||
│ │
|
||||
▼ │
|
||||
┌──────────────┐ │
|
||||
│ staff │◀─────────────┘
|
||||
├──────────────┤
|
||||
│ id (PK) │
|
||||
│ employee_id │
|
||||
│ name │
|
||||
│ department_id│──┐
|
||||
│ position │ │
|
||||
│ title │ │
|
||||
│ base_salary │ │
|
||||
│ perf_ratio │ │
|
||||
│ status │ │
|
||||
└──────┬───────┘ │
|
||||
│ │
|
||||
│ 1:N │
|
||||
▼ │
|
||||
┌──────────────┐ │
|
||||
│ assessments │ │
|
||||
├──────────────┤ │
|
||||
│ id (PK) │ │
|
||||
│ staff_id(FK) │──┼──────────┐
|
||||
│ period_year │ │ │
|
||||
│ period_month │ │ │
|
||||
│ total_score │ │ │
|
||||
│ status │ │ │
|
||||
│ assessor_id │──┼──┐ │
|
||||
│ reviewer_id │──┼──┼──┐ │
|
||||
└──────┬───────┘ │ │ │ │
|
||||
│ │ │ │ │
|
||||
│ 1:N │ │ │ │
|
||||
▼ │ │ │ │
|
||||
┌──────────────┐ │ │ │ │
|
||||
│assessment_ │ │ │ │ │
|
||||
│ details │ │ │ │ │
|
||||
├──────────────┤ │ │ │ │
|
||||
│ id (PK) │ │ │ │ │
|
||||
│ assessment_id│──┘ │ │ │
|
||||
│ indicator_id │──┐ │ │ │
|
||||
│ actual_value │ │ │ │ │
|
||||
│ score │ │ │ │ │
|
||||
└──────────────┘ │ │ │ │
|
||||
│ │ │ │
|
||||
┌──────────────┐ │ │ │ │
|
||||
│ indicators │◀─┘ │ │ │
|
||||
├──────────────┤ │ │ │
|
||||
│ id (PK) │ │ │ │
|
||||
│ name │ │ │ │
|
||||
│ code │ │ │ │
|
||||
│ indicator_type│ │ │ │
|
||||
│ weight │ │ │ │
|
||||
│ max_score │ │ │ │
|
||||
│ target_value │ │ │ │
|
||||
└──────────────┘ │ │ │
|
||||
│ │ │
|
||||
┌──────────────┐ │ │ │
|
||||
│salary_records│ │ │ │
|
||||
├──────────────┤ │ │ │
|
||||
│ id (PK) │ │ │ │
|
||||
│ staff_id(FK) │◀────┘ │ │
|
||||
│ period_year │ │ │
|
||||
│ period_month │ │ │
|
||||
│ base_salary │ │ │
|
||||
│ perf_score │ │ │
|
||||
│ perf_bonus │ │ │
|
||||
│ deduction │ │ │
|
||||
│ allowance │ │ │
|
||||
│ total_salary │ │ │
|
||||
│ status │ │ │
|
||||
└──────────────┘ │ │
|
||||
│ │
|
||||
└────────────────┴────┘
|
||||
(自关联到staff)
|
||||
```
|
||||
|
||||
## 数据表详解
|
||||
|
||||
### departments (科室表)
|
||||
|
||||
| 字段 | 类型 | 约束 | 说明 |
|
||||
|------|------|------|------|
|
||||
| id | INTEGER | PK, AUTO | 主键 |
|
||||
| name | VARCHAR(100) | NOT NULL | 科室名称 |
|
||||
| code | VARCHAR(20) | UNIQUE, NOT NULL | 科室编码 |
|
||||
| dept_type | ENUM | NOT NULL | 科室类型: clinical/medical_tech/medical_auxiliary/admin/logistics |
|
||||
| parent_id | INTEGER | FK | 上级科室ID |
|
||||
| level | INTEGER | DEFAULT 1 | 层级 (1-5) |
|
||||
| sort_order | INTEGER | DEFAULT 0 | 排序 |
|
||||
| is_active | BOOLEAN | DEFAULT TRUE | 是否启用 |
|
||||
| description | TEXT | | 描述 |
|
||||
| created_at | DATETIME | | 创建时间 |
|
||||
| updated_at | DATETIME | | 更新时间 |
|
||||
|
||||
**索引**: idx_dept_type, idx_dept_parent
|
||||
|
||||
### staff (员工表)
|
||||
|
||||
| 字段 | 类型 | 约束 | 说明 |
|
||||
|------|------|------|------|
|
||||
| id | INTEGER | PK, AUTO | 主键 |
|
||||
| employee_id | VARCHAR(20) | UNIQUE, NOT NULL | 工号 |
|
||||
| name | VARCHAR(50) | NOT NULL | 姓名 |
|
||||
| department_id | INTEGER | FK, NOT NULL | 所属科室 |
|
||||
| position | VARCHAR(50) | NOT NULL | 职位 |
|
||||
| title | VARCHAR(50) | | 职称 |
|
||||
| phone | VARCHAR(20) | | 联系电话 |
|
||||
| email | VARCHAR(100) | | 邮箱 |
|
||||
| base_salary | DECIMAL(10,2) | DEFAULT 0 | 基本工资 |
|
||||
| performance_ratio | DECIMAL(5,2) | DEFAULT 1.0 | 绩效系数 (0-5) |
|
||||
| status | ENUM | DEFAULT active | 状态: active/leave/resigned/retired |
|
||||
| hire_date | DATETIME | | 入职日期 |
|
||||
| created_at | DATETIME | | 创建时间 |
|
||||
| updated_at | DATETIME | | 更新时间 |
|
||||
|
||||
**索引**: idx_staff_dept, idx_staff_status
|
||||
|
||||
### indicators (考核指标表)
|
||||
|
||||
| 字段 | 类型 | 约束 | 说明 |
|
||||
|------|------|------|------|
|
||||
| id | INTEGER | PK, AUTO | 主键 |
|
||||
| name | VARCHAR(100) | NOT NULL | 指标名称 |
|
||||
| code | VARCHAR(20) | UNIQUE, NOT NULL | 指标编码 |
|
||||
| indicator_type | ENUM | NOT NULL | 类型: quality/quantity/efficiency/service/cost |
|
||||
| weight | DECIMAL(5,2) | DEFAULT 1.0 | 权重 (需>0) |
|
||||
| max_score | DECIMAL(5,2) | DEFAULT 100 | 最高分值 |
|
||||
| target_value | DECIMAL(10,2) | | 目标值 |
|
||||
| unit | VARCHAR(20) | | 计量单位 |
|
||||
| calculation_method | TEXT | | 计算方法说明 |
|
||||
| description | TEXT | | 描述 |
|
||||
| is_active | BOOLEAN | DEFAULT TRUE | 是否启用 |
|
||||
| created_at | DATETIME | | 创建时间 |
|
||||
| updated_at | DATETIME | | 更新时间 |
|
||||
|
||||
**索引**: idx_indicator_type
|
||||
**约束**: ck_indicator_weight (weight > 0)
|
||||
|
||||
### assessments (考核记录表)
|
||||
|
||||
| 字段 | 类型 | 约束 | 说明 |
|
||||
|------|------|------|------|
|
||||
| id | INTEGER | PK, AUTO | 主键 |
|
||||
| staff_id | INTEGER | FK, NOT NULL | 被考核员工 |
|
||||
| period_year | INTEGER | NOT NULL | 考核年度 |
|
||||
| period_month | INTEGER | NOT NULL | 考核月份 |
|
||||
| period_type | VARCHAR(20) | DEFAULT monthly | 周期类型 |
|
||||
| total_score | DECIMAL(5,2) | DEFAULT 0 | 总分 |
|
||||
| weighted_score | DECIMAL(5,2) | DEFAULT 0 | 加权得分 |
|
||||
| status | ENUM | DEFAULT draft | 状态: draft/submitted/reviewed/finalized/rejected |
|
||||
| assessor_id | INTEGER | FK | 考核人 |
|
||||
| reviewer_id | INTEGER | FK | 审核人 |
|
||||
| submit_time | DATETIME | | 提交时间 |
|
||||
| review_time | DATETIME | | 审核时间 |
|
||||
| remark | TEXT | | 备注 |
|
||||
| created_at | DATETIME | | 创建时间 |
|
||||
| updated_at | DATETIME | | 更新时间 |
|
||||
|
||||
**索引**: idx_assessment_staff, idx_assessment_period, idx_assessment_status
|
||||
|
||||
### assessment_details (考核明细表)
|
||||
|
||||
| 字段 | 类型 | 约束 | 说明 |
|
||||
|------|------|------|------|
|
||||
| id | INTEGER | PK, AUTO | 主键 |
|
||||
| assessment_id | INTEGER | FK, NOT NULL | 考核记录ID |
|
||||
| indicator_id | INTEGER | FK, NOT NULL | 指标ID |
|
||||
| actual_value | DECIMAL(10,2) | | 实际值 |
|
||||
| score | DECIMAL(5,2) | DEFAULT 0 | 得分 |
|
||||
| evidence | TEXT | | 佐证材料 |
|
||||
| remark | TEXT | | 备注 |
|
||||
| created_at | DATETIME | | 创建时间 |
|
||||
| updated_at | DATETIME | | 更新时间 |
|
||||
|
||||
**索引**: idx_detail_assessment, idx_detail_indicator
|
||||
|
||||
### salary_records (工资核算表)
|
||||
|
||||
| 字段 | 类型 | 约束 | 说明 |
|
||||
|------|------|------|------|
|
||||
| id | INTEGER | PK, AUTO | 主键 |
|
||||
| staff_id | INTEGER | FK, NOT NULL | 员工ID |
|
||||
| period_year | INTEGER | NOT NULL | 年度 |
|
||||
| period_month | INTEGER | NOT NULL | 月份 |
|
||||
| base_salary | DECIMAL(10,2) | DEFAULT 0 | 基本工资 |
|
||||
| performance_score | DECIMAL(5,2) | DEFAULT 0 | 绩效得分 |
|
||||
| performance_bonus | DECIMAL(10,2) | DEFAULT 0 | 绩效奖金 |
|
||||
| deduction | DECIMAL(10,2) | DEFAULT 0 | 扣款 |
|
||||
| allowance | DECIMAL(10,2) | DEFAULT 0 | 补贴 |
|
||||
| total_salary | DECIMAL(10,2) | DEFAULT 0 | 应发工资 |
|
||||
| status | VARCHAR(20) | DEFAULT pending | 状态: pending/confirmed/paid |
|
||||
| remark | TEXT | | 备注 |
|
||||
| created_at | DATETIME | | 创建时间 |
|
||||
| updated_at | DATETIME | | 更新时间 |
|
||||
|
||||
**索引**: idx_salary_staff, idx_salary_period
|
||||
|
||||
### users (系统用户表)
|
||||
|
||||
| 字段 | 类型 | 约束 | 说明 |
|
||||
|------|------|------|------|
|
||||
| id | INTEGER | PK, AUTO | 主键 |
|
||||
| username | VARCHAR(50) | UNIQUE, NOT NULL | 用户名 |
|
||||
| password_hash | VARCHAR(255) | NOT NULL | 密码哈希 |
|
||||
| staff_id | INTEGER | FK | 关联员工 |
|
||||
| role | VARCHAR(20) | DEFAULT staff | 角色: admin/manager/staff |
|
||||
| is_active | BOOLEAN | DEFAULT TRUE | 是否启用 |
|
||||
| last_login | DATETIME | | 最后登录时间 |
|
||||
| created_at | DATETIME | | 创建时间 |
|
||||
| updated_at | DATETIME | | 更新时间 |
|
||||
|
||||
**索引**: idx_user_username
|
||||
|
||||
## 枚举类型
|
||||
|
||||
### DeptType (科室类型)
|
||||
| 值 | 说明 |
|
||||
|---|---|
|
||||
| clinical | 临床科室 |
|
||||
| medical_tech | 医技科室 |
|
||||
| medical_auxiliary | 医辅科室 |
|
||||
| admin | 行政科室 |
|
||||
| logistics | 后勤科室 |
|
||||
|
||||
|
||||
### StaffStatus (员工状态)
|
||||
| 值 | 说明 |
|
||||
|---|---|
|
||||
| active | 在职 |
|
||||
| leave | 休假 |
|
||||
| resigned | 离职 |
|
||||
| retired | 退休 |
|
||||
|
||||
### AssessmentStatus (考核状态)
|
||||
| 值 | 说明 |
|
||||
|---|---|
|
||||
| draft | 草稿 |
|
||||
| submitted | 已提交 |
|
||||
| reviewed | 已审核 |
|
||||
| finalized | 已确认 |
|
||||
| rejected | 已驳回 |
|
||||
|
||||
### IndicatorType (指标类型)
|
||||
| 值 | 说明 |
|
||||
|---|---|
|
||||
| quality | 质量指标 |
|
||||
| quantity | 数量指标 |
|
||||
| efficiency | 效率指标 |
|
||||
| service | 服务指标 |
|
||||
| cost | 成本指标 |
|
||||
|
||||
## 数据库迁移
|
||||
|
||||
使用Alembic进行数据库版本管理:
|
||||
|
||||
```bash
|
||||
# 生成迁移文件
|
||||
alembic revision --autogenerate -m "description"
|
||||
|
||||
# 执行迁移
|
||||
alembic upgrade head
|
||||
|
||||
# 回滚迁移
|
||||
alembic downgrade -1
|
||||
```
|
||||
Reference in New Issue
Block a user