# 데이터베이스 구조 ## 데이터베이스 개요 이 시스템은 **두 개의 독립적인 데이터베이스**를 사용합니다: 1. **MSSQL (PM_PRES)**: 기존 POS 판매 데이터 2. **SQLite (mileage.db)**: 신규 마일리지 시스템 데이터 ## MSSQL (기존 POS 데이터) ### 1. SALE_MAIN (판매 헤더) | 컬럼명 | 타입 | 설명 | |--------|------|------| | SL_NO_order | VARCHAR(20) | 주문번호 (PK) | | SL_DT_appl | VARCHAR(8) | 판매일자 (YYYYMMDD) | | SL_NM_custom | VARCHAR(50) | 고객명 | | SL_CD_custom | VARCHAR(10) | 고객코드 | | SL_MY_total | DECIMAL | 총 매출액 | | SL_MY_sale | DECIMAL | 실 판매액 | | InsertTime | DATETIME | 등록시간 | ### 2. SALE_SUB (판매 상세) | 컬럼명 | 타입 | 설명 | |--------|------|------| | SL_NO_order | VARCHAR(20) | 주문번호 (FK) | | DrugCode | VARCHAR(20) | 약품코드 | | SL_NM_item | INT | 수량 | | SL_TOTAL_PRICE | DECIMAL | 판매가 | ### 3. CD_PERSON (고객 정보) | 컬럼명 | 타입 | 설명 | |--------|------|------| | CUSCODE | VARCHAR(10) | 고객코드 (PK) | | PANAME | VARCHAR(20) | 고객명 | | PHONE | VARCHAR(20) | 휴대폰 | ## SQLite (신규 마일리지 데이터) ### 1. users (카카오 계정) | 컬럼명 | 타입 | 설명 | |--------|------|------| | id | INTEGER | PK | | nickname | VARCHAR(100) | 닉네임 | | email | VARCHAR(200) | 이메일 | | phone | VARCHAR(20) | 전화번호 | | mileage_balance | INTEGER | 마일리지 잔액 | ### 2. customer_identities (외부 로그인) | 컬럼명 | 타입 | 설명 | |--------|------|------| | id | INTEGER | PK | | user_id | INTEGER | FK → users.id | | provider | VARCHAR(20) | 'kakao' | | provider_user_id | VARCHAR(100) | 카카오 user id | ### 3. claim_tokens (QR 토큰) | 컬럼명 | 타입 | 설명 | |--------|------|------| | id | INTEGER | PK | | transaction_id | VARCHAR(20) | SALE_MAIN.SL_NO_order | | token_hash | VARCHAR(64) | SHA256 해시 | | claimable_points | INTEGER | 적립 가능 포인트 | | expires_at | DATETIME | 만료시간 | | claimed_at | DATETIME | 적립 완료 시간 | | claimed_by_user_id | INTEGER | FK → users.id | ### 4. mileage_ledger (마일리지 원장) | 컬럼명 | 타입 | 설명 | |--------|------|------| | id | INTEGER | PK | | user_id | INTEGER | FK → users.id | | transaction_id | VARCHAR(20) | SALE_MAIN.SL_NO_order | | points | INTEGER | + 적립, - 사용 | | balance_after | INTEGER | 거래 후 잔액 | | reason | VARCHAR(50) | 'PURCHASE_CLAIM' 등 | ### 5. pos_customer_links (POS 고객 연결) | 컬럼명 | 타입 | 설명 | |--------|------|------| | id | INTEGER | PK | | user_id | INTEGER | FK → users.id | | cuscode | VARCHAR(10) | CD_PERSON.CUSCODE | | customer_name | VARCHAR(50) | 고객명 | ## 데이터 연결 구조 ``` MSSQL SQLite ──────────────────────────── ──────────────────────────── SALE_MAIN.SL_NO_order ────────→ claim_tokens.transaction_id ↓ mileage_ledger.transaction_id ↓ users.id ↓ CD_PERSON.CUSCODE ─────────────→ pos_customer_links.cuscode ``` ## 스키마 초기화 ```bash # SQLite 데이터베이스 생성 sqlite3 backend/db/mileage.db < backend/db/mileage_schema.sql ```