外观
ER 模型与表关系
数据库关系以 users 为主轴,向外连接用户档案、评估快照、聊天会话、运动处方、运动记录、审计日志和虚拟陪练。RAG 知识表独立于用户业务表,不挂患者或用户外键。
主关系图
健康档案域profiles / diseases / operations
评估快照域user_health_profiles
RAG 知识域knowledge_chunks
↑↑↘ 独立知识库
用户主表users
↓↓↓↓
会话与安全域chat_sessions / dialogue_logs / safety_incidents
处方与运动域sport_schemes / sport_logs
陪伴配置域virtual_companion
审计与弱关联update_logs 等
`knowledge_chunks` 不挂用户外键,但会在 Chat / RAG 链路中提供知识证据。
主图只表达当前数据库的领域骨架。字段级外键、删除规则和弱关联表以表格核对,避免把完整 schema 压缩成不可读的小图。
外键关系
| From | To | Cardinality | Delete rule | 用途 |
|---|---|---|---|---|
user_profiles.pk_user | users.pk_user | 1:1 | default | 用户健康档案。 |
user_diseases.pk_user | users.pk_user | 1:N | default | 疾病史。 |
user_operations.pk_user | users.pk_user | 1:N | default | 手术史。 |
user_health_profiles.user_id | users.pk_user | 1:N | ON DELETE CASCADE | 评估与安全筛查快照。 |
chat_sessions.user_id | users.pk_user | 1:N | default | 会话分组。 |
dialogue_logs.pk_user | users.pk_user | 1:N | default | 用户对话记录。 |
dialogue_logs.session_id | chat_sessions.id | N:1 | default | 会话内消息。 |
safety_incidents.pk_user | users.pk_user | 1:N | default | 用户安全事件。 |
safety_incidents.pk_dialogue_log | dialogue_logs.pk_dialogue_log | N:1 | default | 关联触发事件的对话记录。 |
sport_schemes.pk_user | users.pk_user | 1:N | default | 用户运动处方。 |
sport_logs.pk_user | users.pk_user | 1:N | default | 用户运动记录。 |
update_logs.pk_user | users.pk_user | 1:N | default | 用户资料变更审计。 |
virtual_companion.pk_user | users.pk_user | 1:1 | ON DELETE CASCADE | 用户虚拟陪练配置。 |
独立或弱关联表
| 表 | 关系特点 | 说明 |
|---|---|---|
dialogue_logs_archive | 不挂 FK | 归档快照表,保留原始用户 ID、session ID 和归档批次。 |
login_logs | pk_user 未声明 FK | 登录审计表,用用户 ID 关联业务语义,但生产 schema 未加外键。 |
sms_verifications | 不挂 FK | 按手机号和验证码用途独立校验。 |
system_configs | 不挂 FK | 系统配置与 feature flag。 |
data_migration_log | 不挂 FK | 数据迁移状态记录。 |
knowledge_chunks | 不挂用户 FK | RAG 知识主表,面向知识检索,不存用户业务归属。 |
rag_knowledge_items、rag_vector_index | 不挂 FK | legacy RAG 表,当前生产行数为 0。 |
索引与查询意图
| 表 | 关键索引 | 查询意图 |
|---|---|---|
users | users_phone_key、users_user_no_key | 登录、注册唯一性校验。 |
chat_sessions | idx_chat_sessions_user_active_updated | 会话列表按用户与更新时间读取,过滤软删除。 |
dialogue_logs | idx_dialogue_logs_user_session_created、idx_dialogue_logs_user_hash_created | 会话历史、幂等键回查。 |
sport_logs | idx_sport_logs_user_created_active、idx_sport_logs_user_start_active、idx_sport_logs_user_unfinished_active | 历史列表、日历、进行中运动。 |
sport_schemes | idx_sport_schemes_user_created、idx_sport_schemes_user_end_created | 处方列表与当前活跃方案。 |
update_logs | idx_update_logs_user_created | 用户资料变更审计。 |
knowledge_chunks | ix_knowledge_chunks_embedding_hnsw_cosine、ix_knowledge_chunks_rag_schema、ix_knowledge_chunks_record_type | 向量检索与 pipeline scope。 |
日期与时间语义
| 字段类别 | 表字段 | 类型 | 语义 |
|---|---|---|---|
| 业务日期 | user_profiles.diagnosis_date、user_operations.oprt_time | date | 医疗历史或业务日期,不表达具体时刻。 |
| 运行时间戳 | sport_logs.*time、sport_schemes.create_time、update_logs.create_time、virtual_companion.*_at | timestamptz | 运行事件或状态更新时间。 |
| 归档时间 | dialogue_logs_archive.archived_at | timestamptz | 归档动作时间。 |
来源锚点
- Production catalog: RDS
core_basepg_constraint、pg_indexes - ORM:
apps/backend_service/app/models/ - Migrations:
apps/backend_service/alembic/versions/2b6d9f3a4c1e_align_production_schema_contracts.py、6e18b4a7c2d3_normalize_operational_timestamps_to_timestamptz.py、7d18e9f1a2b4_convert_business_dates_to_date.py