diff --git a/book/300_architecture/database/tables.md b/book/300_architecture/database/tables.md index f00eb0b..4644e9f 100644 --- a/book/300_architecture/database/tables.md +++ b/book/300_architecture/database/tables.md @@ -222,6 +222,46 @@ SemanticIntentClassifier는 위 테이블에서 활성화된 의도를 불러오 **인덱스**: - `rb_news_pkey`: PRIMARY KEY (id) + +### robeing_diary +- **용도**: 로빙 일기(성장 일지) 저장 +- **Primary Key**: id (INTEGER) + +| 컬럼명 | 타입 | NULL | 기본값 | 설명 | +|--------|------|------|--------|------| +| id | INTEGER | NO | | PK, SERIAL | +| date | DATE | NO | | 일기 날짜 | +| robeing_id | VARCHAR(50) | NO | | 로빙 식별자 | +| summary | TEXT | YES | | 일기 요약 | +| dominant_emotion | VARCHAR(50) | YES | | 지배적 감정 | +| stats | JSONB | YES | '{}' | 통계 데이터 | +| full_content | TEXT | NO | | 전체 일기 내용 (마크다운) | +| created_at | TIMESTAMPTZ | YES | NOW() | 생성 시간 | + +**인덱스**: +- `idx_robeing_diary_date`: (date DESC) +- `idx_robeing_diary_robeing`: (robeing_id) +- UNIQUE: (date, robeing_id) + +### activity_log +- **용도**: 로빙 활동 로그 (스킬 실행, 스케줄러 작업 등) +- **Primary Key**: id (INTEGER) + +| 컬럼명 | 타입 | NULL | 기본값 | 설명 | +|--------|------|------|--------|------| +| id | INTEGER | NO | | PK, SERIAL | +| robeing_id | VARCHAR(50) | NO | | 로빙 식별자 | +| activity_type | VARCHAR(50) | NO | | 'skill', 'scheduler', 'internal' | +| skill_name | VARCHAR(100) | YES | | 스킬명 (activity_type='skill'일 때) | +| status | VARCHAR(20) | NO | | 'success', 'error', 'partial' | +| result_summary | TEXT | YES | | 결과 요약 | +| error_message | TEXT | YES | | 에러 메시지 (status='error'일 때) | +| meta | JSONB | YES | '{}' | 메타데이터 | +| created_at | TIMESTAMPTZ | YES | NOW() | 생성 시간 | + +**인덱스**: +- `idx_activity_log_robeing_date`: (robeing_id, created_at DESC) +- `idx_activity_log_type`: (activity_type) - `rb_news_url_key`: UNIQUE (url) - `idx_rb_news_url`: btree (url) - `idx_rb_news_slack_message_ts`: btree (slack_message_ts)