pharmacy-pos-qr-system/docs/DATABASE.md
시골약사 a9041e9c9e feat: 프로젝트 초기 구조 설정
- PyQt5 POS 판매 조회 GUI (Phase 1 완료)
- Flask API 서버 스켈레톤 (Phase 2 준비)
- SQLite 마일리지 DB 스키마 설계
- 프로젝트 문서 및 README 추가
- 기본 디렉터리 구조 생성

Phase 1: POS 판매 내역 조회 GUI 완료
Phase 2: QR 토큰 생성 및 마일리지 적립 (예정)
Phase 3: 카카오 로그인 연동 (예정)
Phase 4: 마일리지 시스템 완성 (예정)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-23 13:59:00 +09:00

114 lines
3.5 KiB
Markdown

# 데이터베이스 구조
## 데이터베이스 개요
이 시스템은 **두 개의 독립적인 데이터베이스**를 사용합니다:
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
```