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

3.5 KiB

데이터베이스 구조

데이터베이스 개요

이 시스템은 두 개의 독립적인 데이터베이스를 사용합니다:

  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' 등
컬럼명 타입 설명
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

스키마 초기화

# SQLite 데이터베이스 생성
sqlite3 backend/db/mileage.db < backend/db/mileage_schema.sql