286 lines
10 KiB
Markdown
286 lines
10 KiB
Markdown
# 数据库设计
|
||
|
||
## 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
|
||
```
|