- 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>
114 lines
3.5 KiB
Markdown
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
|
|
```
|