# BatchuKis Database Schema Definition 이 문서는 데이터베이스 설계를 위한 테이블 명세서입니다. 모든 컬럼명은 [models.md](./models.md)의 필드명과 일치해야 합니다. ## 1. api_settings (사용자 및 API 설정) - 단일 사용자 환경이므로 `id=1` 레코드만 사용. - `aiConfigs`는 별도의 `ai_configs` 테이블과 Join하여 처리. ## 2. ai_configs (AI 엔진 프로필) - `id`: TEXT (PK) - `name`: TEXT - `providerType`: TEXT (gemini | openai-compatible) - `modelName`: TEXT - `baseUrl`: TEXT (Nullable) ## 3. holdings (현재 보유 종목) - `code`: TEXT (PK) - `name`: TEXT - `avgPrice`: REAL - `quantity`: INTEGER - `market`: TEXT (Domestic | Overseas) ## 4. auto_trade_configs (자동매매 로봇) - `id`: TEXT (PK) - `stockCode`: TEXT (Nullable) - `stockName`: TEXT - `groupId`: TEXT (Nullable) - `type`: TEXT (ACCUMULATION | TRAILING_STOP) - `quantity`: INTEGER - `frequency`: TEXT (DAILY | WEEKLY | MONTHLY) - `specificDay`: INTEGER - `executionTime`: TEXT - `trailingPercent`: REAL - `active`: BOOLEAN - `market`: TEXT ## 5. reserved_orders (실시간 감시/예약 주문) - `id`: TEXT (PK) - `stockCode`: TEXT - `stockName`: TEXT - `type`: TEXT (BUY | SELL) - `quantity`: INTEGER - `monitoringType`: TEXT - `triggerPrice`: REAL - `trailingType`: TEXT - `trailingValue`: REAL - `status`: TEXT - `createdAt`: DATETIME - `expiryDate`: DATETIME ## 6. watchlist_groups (관심 종목 그룹) - `id`: TEXT (PK) - `name`: TEXT - `codes`: TEXT (JSON String Array - e.g. '["005930", "NVDA"]') - `market`: TEXT ## 7. [NEW] discovery_rank_cache (발굴 랭킹 캐시) - `category`: TEXT (PK - VOLUME, VALUE 등) - `market`: TEXT (PK) - `rank_json`: TEXT (JSON String - StockItem 리스트 보관) - `updated_at`: DATETIME - **용도**: 랭킹 연산은 리소스가 많이 들므로 1~5분 단위로 배치 처리 후 캐시된 데이터를 API로 제공. ## 8. [NEW] stock_stats (종목별 확장 통계) - `code`: TEXT (PK) - `tradingValue`: REAL - `buyRatio`: INTEGER - `sellRatio`: INTEGER - `foreignNetBuy`: INTEGER - `institutionalNetBuy`: INTEGER - **용도**: `StockItem` 테이블을 직접 확장하거나 별도 통계 테이블로 관리하여 발굴 데이터 조회 성능 최적화. ## 9. market_index_history (시장 지수 이력) - `index_id`: TEXT (PK - KOSPI, KOSDAQ, NASDAQ, SP500, USDKRW 등) - `timestamp`: DATETIME (PK - 1시간 단위 정규화된 시각) - `value`: REAL - `change`: REAL - `change_percent`: REAL - `updated_at`: DATETIME (실제 마지막 갱신 시각) - **용도**: 트렌드 분석 및 대시보드 인덱스 카드 표시용. 백엔드가 5분 단위로 조회하되, DB에는 1시간 단위로 마지막 데이터를 Upsert 하여 누적.