Files
KisStock/backend/tables.md
2026-02-01 20:24:04 +09:00

80 lines
2.7 KiB
Markdown

# 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 하여 누적.