# 宠物医院管理系统 - 数据库表结构文档

## 1. 用户表 (user)

| 字段名 | 类型 | 说明 |
|--------|------|------|
| id | BIGINT | 主键，自增长 |
| username | VARCHAR(50) | 用户名，唯一 |
| phone | VARCHAR(20) | 手机号 |
| email | VARCHAR(100) | 邮箱 |
| password | VARCHAR(255) | 密码（加密存储） |
| role | VARCHAR(20) | 角色（ADMIN/DOCTOR/CUSTOMER） |
| status | INT | 状态（1-启用，0-禁用） |
| avatar | VARCHAR(255) | 头像URL |
| create_time | TIMESTAMP | 创建时间 |
| update_time | TIMESTAMP | 更新时间 |
| deleted | INT | 删除标记（0-未删除，1-已删除） |

## 2. 医生表 (doctor)

| 字段名 | 类型 | 说明 |
|--------|------|------|
| id | BIGINT | 主键，自增长 |
| name | VARCHAR(50) | 医生姓名 |
| department | VARCHAR(50) | 所属科室 |
| title | VARCHAR(50) | 职称 |
| phone | VARCHAR(20) | 联系电话 |
| email | VARCHAR(100) | 邮箱 |
| avatar | VARCHAR(255) | 头像URL |
| status | INT | 状态（1-启用，0-禁用） |
| create_time | TIMESTAMP | 创建时间 |
| update_time | TIMESTAMP | 更新时间 |
| deleted | INT | 删除标记 |

## 3. 宠物表 (pet)

| 字段名 | 类型 | 说明 |
|--------|------|------|
| id | BIGINT | 主键，自增长 |
| owner_id | BIGINT | 主人ID（外键关联user表） |
| name | VARCHAR(50) | 宠物名称 |
| species | VARCHAR(50) | 物种（猫/狗等） |
| breed | VARCHAR(100) | 品种 |
| gender | VARCHAR(10) | 性别（MALE/FEMALE） |
| birthday | DATE | 生日 |
| weight | DOUBLE | 体重 |
| photo | VARCHAR(255) | 照片URL |
| remark | TEXT | 备注 |
| create_time | TIMESTAMP | 创建时间 |
| update_time | TIMESTAMP | 更新时间 |
| deleted | INT | 删除标记 |

## 4. 预约表 (appointment)

| 字段名 | 类型 | 说明 |
|--------|------|------|
| id | BIGINT | 主键，自增长 |
| customer_id | BIGINT | 顾客ID（外键关联user表） |
| pet_id | BIGINT | 宠物ID（外键关联pet表） |
| doctor_id | BIGINT | 医生ID（外键关联doctor表，可空） |
| department | VARCHAR(50) | 科室 |
| appointment_date | DATE | 预约日期 |
| time_slot | VARCHAR(20) | 预约时段（如：09:00-10:00） |
| status | VARCHAR(20) | 状态（PENDING/CONFIRMED/ARRIVED/CANCELLED/NO_SHOW） |
| remark | TEXT | 备注 |
| cancel_time | TIMESTAMP | 取消时间 |
| create_time | TIMESTAMP | 创建时间 |
| update_time | TIMESTAMP | 更新时间 |
| deleted | INT | 删除标记 |

## 5. 就诊记录表 (visit)

| 字段名 | 类型 | 说明 |
|--------|------|------|
| id | BIGINT | 主键，自增长 |
| appointment_id | BIGINT | 预约ID（外键关联appointment表，可空） |
| customer_id | BIGINT | 顾客ID（外键关联user表） |
| pet_id | BIGINT | 宠物ID（外键关联pet表） |
| doctor_id | BIGINT | 医生ID（外键关联doctor表） |
| symptoms | TEXT | 症状描述 |
| diagnosis | TEXT | 诊断结果 |
| treatment_plan | TEXT | 治疗方案 |
| status | VARCHAR(20) | 状态（IN_PROGRESS/COMPLETED/CANCELLED） |
| total_amount | DECIMAL(10,2) | 总金额 |
| payment_status | VARCHAR(20) | 支付状态（UNPAID/PAID/REFUNDING/REFUNDED） |
| payment_method | VARCHAR(20) | 支付方式（OFFLINE/ALIPAY/WECHAT） |
| payment_time | TIMESTAMP | 支付时间 |
| start_time | TIMESTAMP | 开始时间 |
| end_time | TIMESTAMP | 结束时间 |
| create_time | TIMESTAMP | 创建时间 |
| update_time | TIMESTAMP | 更新时间 |
| deleted | INT | 删除标记 |

## 6. 处方表 (prescription)

| 字段名 | 类型 | 说明 |
|--------|------|------|
| id | BIGINT | 主键，自增长 |
| visit_id | BIGINT | 就诊ID（外键关联visit表） |
| doctor_id | BIGINT | 医生ID（外键关联doctor表） |
| customer_id | BIGINT | 顾客ID（外键关联user表） |
| total_amount | DECIMAL(10,2) | 总金额 |
| status | VARCHAR(20) | 状态（DRAFT/SUBMITTED/ISSUED/VOIDED） |
| remark | TEXT | 备注 |
| create_time | TIMESTAMP | 创建时间 |
| update_time | TIMESTAMP | 更新时间 |
| deleted | INT | 删除标记 |

## 7. 处方明细表 (prescription_item)

| 字段名 | 类型 | 说明 |
|--------|------|------|
| id | BIGINT | 主键，自增长 |
| prescription_id | BIGINT | 处方ID（外键关联prescription表） |
| drug_id | BIGINT | 药品ID（外键关联drug表） |
| quantity | INT | 数量 |
| dosage | VARCHAR(100) | 用量 |
| frequency | VARCHAR(50) | 频次 |
| duration | VARCHAR(50) | 疗程 |
| usage_instructions | TEXT | 用法说明 |
| create_time | TIMESTAMP | 创建时间 |
| update_time | TIMESTAMP | 更新时间 |
| deleted | INT | 删除标记 |

## 8. 药品表 (drug)

| 字段名 | 类型 | 说明 |
|--------|------|------|
| id | BIGINT | 主键，自增长 |
| name | VARCHAR(100) | 药品名称 |
| category | VARCHAR(50) | 分类 |
| manufacturer | VARCHAR(100) | 生产厂家 |
| specification | VARCHAR(100) | 规格 |
| unit_price | DECIMAL(10,2) | 单价 |
| stock_quantity | INT | 库存数量 |
| unit | VARCHAR(20) | 单位 |
| status | INT | 状态（1-启用，0-禁用） |
| create_time | TIMESTAMP | 创建时间 |
| update_time | TIMESTAMP | 更新时间 |
| deleted | INT | 删除标记 |

## 9. 订单表 (order_info)

| 字段名 | 类型 | 说明 |
|--------|------|------|
| id | BIGINT | 主键，自增长 |
| visit_id | BIGINT | 就诊ID（外键关联visit表，可空） |
| customer_id | BIGINT | 顾客ID（外键关联user表） |
| amount | DECIMAL(10,2) | 金额 |
| status | VARCHAR(20) | 状态（UNPAID/PAID/CANCELLED/REFUNDING/REFUNDED） |
| payment_method | VARCHAR(20) | 支付方式（OFFLINE/ALIPAY/WECHAT） |
| payment_time | TIMESTAMP | 支付时间 |
| remark | TEXT | 备注 |
| create_time | TIMESTAMP | 创建时间 |
| update_time | TIMESTAMP | 更新时间 |
| deleted | INT | 删除标记 |

## 10. 病历表 (medical_record)

| 字段名 | 类型 | 说明 |
|--------|------|------|
| id | BIGINT | 主键，自增长 |
| visit_id | BIGINT | 就诊ID（外键关联visit表） |
| record_type | VARCHAR(50) | 记录类型（CHECKUP/EXAMINATION/DIAGNOSIS/TREATMENT） |
| content | TEXT | 内容 |
| attachment_urls | TEXT | 附件URL（JSON格式） |
| doctor_id | BIGINT | 医生ID（外键关联doctor表） |
| create_time | TIMESTAMP | 创建时间 |
| update_time | TIMESTAMP | 更新时间 |
| deleted | INT | 删除标记 |

## 11. 消息表 (message)

| 字段名 | 类型 | 说明 |
|--------|------|------|
| id | BIGINT | 主键，自增长 |
| sender_id | BIGINT | 发送者ID（外键关联user表，可空） |
| receiver_id | BIGINT | 接收者ID（外键关联user表） |
| content | TEXT | 消息内容 |
| type | VARCHAR(20) | 类型（NOTICE/CHAT） |
| status | VARCHAR(20) | 状态（UNREAD/READ） |
| create_time | TIMESTAMP | 创建时间 |
| update_time | TIMESTAMP | 更新时间 |
| deleted | INT | 删除标记 |

## 12. 公告表 (notice)

| 字段名 | 类型 | 说明 |
|--------|------|------|
| id | BIGINT | 主键，自增长 |
| title | VARCHAR(200) | 标题 |
| content | TEXT | 内容 |
| publisher_id | BIGINT | 发布者ID（外键关联user表） |
| publish_time | TIMESTAMP | 发布时间 |
| status | INT | 状态（1-发布，0-撤销） |
| create_time | TIMESTAMP | 创建时间 |
| update_time | TIMESTAMP | 更新时间 |
| deleted | INT | 删除标记 |

## 13. 报表表 (report)

| 字段名 | 类型 | 说明 |
|--------|------|------|
| id | BIGINT | 主键，自增长 |
| report_type | VARCHAR(50) | 报表类型（REVENUE/CUSTOMER/PET/DRUG） |
| report_data | JSON | 报表数据（JSON格式） |
| period_start | DATE | 统计周期开始 |
| period_end | DATE | 统计周期结束 |
| generated_by | BIGINT | 生成者ID（外键关联user表） |
| create_time | TIMESTAMP | 创建时间 |
| update_time | TIMESTAMP | 更新时间 |
| deleted | INT | 删除标记 |

## 14. 入库记录表 (stock_in)

| 字段名 | 类型 | 说明 |
|--------|------|------|
| id | BIGINT | 主键，自增长 |
| drug_id | BIGINT | 药品ID（外键关联drug表） |
| quantity | INT | 数量 |
| unit_price | DECIMAL(10,2) | 单价 |
| supplier | VARCHAR(100) | 供应商 |
| operator_id | BIGINT | 操作员ID（外键关联user表） |
| remark | TEXT | 备注 |
| create_time | TIMESTAMP | 创建时间 |
| update_time | TIMESTAMP | 更新时间 |
| deleted | INT | 删除标记 |

## 15. 出库记录表 (stock_out)

| 字段名 | 类型 | 说明 |
|--------|------|------|
| id | BIGINT | 主键，自增长 |
| drug_id | BIGINT | 药品ID（外键关联drug表） |
| quantity | INT | 数量 |
| unit_price | DECIMAL(10,2) | 单价 |
| purpose | VARCHAR(100) | 用途（销售/损耗等） |
| operator_id | BIGINT | 操作员ID（外键关联user表） |
| remark | TEXT | 备注 |
| create_time | TIMESTAMP | 创建时间 |
| update_time | TIMESTAMP | 更新时间 |
| deleted | INT | 删除标记 |

## 16. 疫苗接种记录表 (vaccine_record)

| 字段名 | 类型 | 说明 |
|--------|------|------|
| id | BIGINT | 主键，自增长 |
| pet_id | BIGINT | 宠物ID（外键关联pet表） |
| vaccine_name | VARCHAR(100) | 疫苗名称 |
| dose_number | INT | 剂次 |
| injection_date | DATE | 接种日期 |
| next_appointment_date | DATE | 下次预约日期 |
| doctor_id | BIGINT | 医生ID（外键关联doctor表） |
| remark | TEXT | 备注 |
| create_time | TIMESTAMP | 创建时间 |
| update_time | TIMESTAMP | 更新时间 |
| deleted | INT | 删除标记 |

## 主要业务流程关系

### 1. 预约流程
Customer → Appointment → Visit → Prescription → Order

### 2. 库存管理
Drug ↔ StockIn/StockOut

### 3. 病历管理
Visit → MedicalRecord

### 4. 疫苗管理
Pet → VaccineRecord

### 5. 消息通知
User ↔ Message/Notice

## 数据完整性约束

1. **外键约束**：确保所有外键引用的有效性
2. **软删除**：使用deleted字段实现软删除，保留历史数据
3. **时间戳**：所有表都有create_time和update_time字段
4. **默认值**：合理设置字段默认值（如status默认为1）
5. **枚举约束**：状态字段使用预定义的枚举值