# BatchuKis Database Schema Definition 이 문서는 데이터베이스 설계를 위한 테이블 명세서입니다. 모든 컬럼명은 [models.md](./models.md)의 필드명과 일치해야 합니다. --- ## 1. System & Config (설정 제어) ### 1.1 `api_settings` (전체 시스템 설정) - **Primary Key**: `id` (INTEGER, ALWAYS 1) - **Columns**: - `appKey`, `appSecret`, `accountNumber`: TEXT - `useTelegram`, `useNaverNews`: BOOLEAN - `telegramToken`, `telegramChatId`: TEXT - `naverClientId`, `naverClientSecret`: TEXT - `kisApiDelayMs`, `newsScrapIntervalMin`: INTEGER - `preferredNewsAiId`, `preferredStockAiId`, `preferredNewsJudgementAiId`, `preferredAutoBuyAiId`, `preferredAutoSellAiId`: TEXT (FK to `ai_configs.id`) ### 1.2 `ai_configs` (AI 엔진 프로필 저장소) - **Primary Key**: `id` (TEXT) - **Columns**: `name`, `providerType`, `modelName`, `baseUrl` (TEXT) --- ## 2. Account & Portfolio (자산 데이터) ### 2.1 `account_status` (계좌 요약 정보) - **Primary Key**: `id` (INTEGER, ALWAYS 1) - **Columns**: `totalAssets`, `buyingPower`, `dailyProfit`, `dailyProfitRate` (REAL) - **Update Frequency**: API 동기화 마다 갱신. ### 2.2 `holdings` (보유 자산 목록) - **Primary Key**: `stockCode` (TEXT) - **Columns**: `stockName` (TEXT), `quantity` (INTEGER), `avgPrice`, `currentPrice`, `profit`, `profitRate`, `marketValue` (REAL) --- ## 3. Market & Discovery (시세 및 탐색 데이터) ### 3.1 `master_stocks` (전체 종목 마스터) - **Primary Key**: `code` (TEXT) - **Columns**: - `name`, `market` (TEXT) - `per`, `pbr`, `roe`, `marketCap`, `dividendYield` (REAL) - `memo` (TEXT), `isHidden` (BOOLEAN) - **용도**: 종목 검색, 메타데이터 제공 및 사용자 설정(메모/숨김) 저장. ### 3.2 `news_cache` (뉴스 및 분석 캐시) - **Primary Key**: `news_id` (TEXT - URL 해시 등) - **Columns**: - `title`, `description`, `link`, `pubDate`: TEXT - `sentiment`: TEXT - `relatedThemes`, `relatedStocks`: TEXT (JSON Array) - **용도**: 동일 뉴스에 대한 중복 AI 분석 방지 및 히스토리 제공. ### 3.3 `discovery_ranking_cache` (발굴 랭킹 데이터) - **Primary Key**: `category` + `market` (Composite) - **Columns**: `updated_at` (DATETIME), `items_json` (TEXT - `StockItem[]` JSON) ### 3.4 `stock_stats` (종목별 확장 통계) - **Primary Key**: `code` (TEXT) - **Columns**: - `tradingValue` (REAL) - `buyRatio`, `sellRatio`, `foreignNetBuy`, `institutionalNetBuy` (INTEGER) - `aiScoreBuy`, `aiScoreSell` (INTEGER) - **용도**: `StockItem` 확장을 위한 분석/수급 데이터 저장. --- ## 4. Watchlist (보관함) ### 4.1 `watchlist_groups` (그룹 정의) - **Primary Key**: `id` (TEXT) - **Columns**: `name` (TEXT), `market` (TEXT) ### 4.2 `watchlist_items` (그룹별 포함 종목) - **Primary Key**: `group_id` + `stock_code` (Composite) - **Columns**: `added_at` (DATETIME) - **Relationship**: `group_id` -> `watchlist_groups.id` --- ## 5. Trading & Automation (거래 및 자동화) ### 5.1 `trade_history` (전체 체결 내역) - **Primary Key**: `id` (TEXT) - **Columns**: - `stockCode`, `stockName`, `type` (TEXT) - `quantity` (INTEGER), `price` (REAL) - `timestamp` (DATETIME), `status` (TEXT) ### 5.2 `auto_trade_robots` (자동매매 전략 로봇) - **Primary Key**: `id` (TEXT) - **Columns**: - `stockCode`, `stockName`, `groupId`, `type`, `frequency`, `executionTime`, `market`: TEXT - `quantity`, `specificDay`: INTEGER - `trailingPercent`: REAL - `active`: BOOLEAN ### 5.3 `reserved_orders` (실시간 감시 주문) - **Primary Key**: `id` (TEXT) - **Columns**: - `stockCode`, `stockName`, `type`, `monitoringType`, `trailingType`, `status`, `market`: TEXT - `quantity`: INTEGER - `triggerPrice`, `trailingValue`, `stopLossValue`, `highestPrice`, `lowestPrice`: REAL - `useStopLoss`, `sellAll`: BOOLEAN - `stopLossType`: TEXT - `createdAt`, `expiryDate`: DATETIME