🗄️ 数智健调 - 数据库ER图
实体关系图
erDiagram
USERS ||--o{ WEIGHT_RECORDS : "has"
USERS ||--o| WEIGHT_GOALS : "has"
USERS ||--o{ TAGS : "creates"
WEIGHT_RECORDS }o--o{ TAGS : "tagged_with"
USERS ||--o{ ANOMALY_LOGS : "has"
USERS {
varchar id PK "用户ID(UUID)"
varchar phone UK "手机号"
varchar nickname "昵称"
varchar school_id FK "学校ID"
varchar grade "年级"
boolean is_under_14 "是否未满14岁"
varchar parent_phone "家长手机号"
timestamp created_at "创建时间"
timestamp updated_at "更新时间"
}
WEIGHT_RECORDS {
varchar id PK "记录ID(UUID)"
varchar user_id FK "用户ID"
date record_date "记录日期"
time measurement_time "测量时间"
decimal weight "体重(kg)"
decimal body_fat "体脂率(%)"
decimal muscle_mass "肌肉含量(kg)"
enum measurement_condition "测量条件"
text notes "备注"
timestamp created_at "创建时间"
}
WEIGHT_GOALS {
varchar id PK "目标ID(UUID)"
varchar user_id FK "用户ID"
decimal target_weight "目标体重(kg)"
decimal target_body_fat "目标体脂率(%)"
date target_date "目标日期"
decimal start_weight "起始体重(kg)"
date start_date "开始日期"
decimal weekly_target "每周目标减重量"
enum status "状态"
timestamp created_at "创建时间"
}
TAGS {
varchar id PK "标签ID(UUID)"
varchar user_id FK "用户ID"
varchar tag_name "标签名称"
enum tag_type "类型"
varchar color "颜色代码"
timestamp created_at "创建时间"
}
ANOMALY_LOGS {
varchar id PK "日志ID(UUID)"
varchar user_id FK "用户ID"
enum anomaly_type "异常类型"
enum severity "严重程度"
text message "提示信息"
date detected_date "检测日期"
json related_record_ids "相关记录ID"
boolean is_read "是否已读"
timestamp created_at "创建时间"
}
数据表详细设计
1. 用户表 (users)
| 字段名 | 类型 | 约束 | 说明 |
| id | VARCHAR(36) | PRIMARY KEY | 用户ID(UUID) |
| phone | VARCHAR(20) | UNIQUE, NOT NULL | 手机号 |
| nickname | VARCHAR(50) | NOT NULL | 昵称 |
| school_id | VARCHAR(36) | - | 学校ID |
| grade | VARCHAR(20) | - | 年级 |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
2. 体重记录表 (weight_records)
| 字段名 | 类型 | 约束 | 说明 |
| id | VARCHAR(36) | PRIMARY KEY | 记录ID(UUID) |
| user_id | VARCHAR(36) | FOREIGN KEY | 用户ID |
| record_date | DATE | NOT NULL | 记录日期 |
| weight | DECIMAL(5,2) | NOT NULL, CHECK(30-200) | 体重(kg) |
| body_fat | DECIMAL(4,2) | NOT NULL, CHECK(5-60) | 体脂率(%) |
| muscle_mass | DECIMAL(5,2) | NOT NULL, CHECK(10-100) | 肌肉含量(kg) |
| measurement_condition | ENUM | - | fasting/after_meal |
| notes | TEXT | - | 备注 |
3. 体重目标表 (weight_goals)
| 字段名 | 类型 | 约束 | 说明 |
| id | VARCHAR(36) | PRIMARY KEY | 目标ID(UUID) |
| user_id | VARCHAR(36) | FOREIGN KEY | 用户ID |
| target_weight | DECIMAL(5,2) | NOT NULL | 目标体重(kg) |
| target_date | DATE | NOT NULL | 目标日期 |
| start_weight | DECIMAL(5,2) | NOT NULL | 起始体重(kg) |
| start_date | DATE | NOT NULL | 开始日期 |
| status | ENUM | DEFAULT 'active' | active/completed/abandoned |
设计说明
- 主键设计:所有表使用UUID作为主键,便于分布式扩展
- 外键约束:使用ON DELETE CASCADE确保数据一致性
- 索引优化:在常用查询字段上建立索引提升性能
- 软删除:使用deleted_at字段实现软删除功能