db 설명서
페이지 정보
작성자 최고관리자 작성일 26-02-15 23:47 조회 36 댓글 0본문
DB 구조 안내
이모티콘 DB 테이블 / 컬럼 설명서
업로드된 SQL 기준으로, 이모티콘 시스템의 핵심 테이블 2개(패키지 정의 / 회원 보유)를 정리했습니다.
컬럼 의미, 키(Primary/Unique), 인덱스, 테이블 간 연동 관계까지 한 번에 확인할 수 있습니다.
컬럼 의미, 키(Primary/Unique), 인덱스, 테이블 간 연동 관계까지 한 번에 확인할 수 있습니다.
전체 구조 개요
- g5_emoticon_package : 이모티콘 패키지(상품/팩) 정의 테이블
- g5_emoticon_user_package : 회원이 보유한 패키지(구매/프로모션 지급 결과) 저장 테이블
- 유료/프로모션은 보유 테이블로 “보유 여부”를 확인하고, 기본(basic)은 예외 처리됩니다.
무료(basic) 이모티콘 처리 방식
- basic(기본) 이모티콘은 DB에 별도의 보유 여부를 저장하지 않습니다.
- 회원/비회원 상관없이 게시판에서 항상 표시되도록 설계되어 있습니다.
- 즉, basic 타입은 g5_emoticon_user_package 테이블을 조회하지 않습니다.
- 반면 paid(유료) / promo(프로모션) 타입은 보유 확인을 위해 g5_emoticon_user_package를 조회합니다.
1) g5_emoticon_package (패키지/상품 정의)
역할 : 게시판/상점/프로모션/관리자 페이지에서 표시되는 팩의 기본 정보를 저장합니다.
(팩 코드, 이름, 종류(basic/promo/paid), 폴더/썸네일, 가격/할인, 판매/활성, 정렬, 기간/프로모션 기간 등)
(팩 코드, 이름, 종류(basic/promo/paid), 폴더/썸네일, 가격/할인, 판매/활성, 정렬, 기간/프로모션 기간 등)
| 컬럼 | 타입/기본값 | 설명 |
|---|---|---|
| package_code | varchar(64) | 패키지 코드(PK). 폴더명/식별자 (예: basic1, fruit, paid01) |
| name | varchar(128) | 패키지(상품)명(관리자 표시용) |
| package_type | enum('basic','promo','paid') DEFAULT 'paid' |
종류: basic=기본 제공(누구나), promo=프로모션, paid=유료 |
| description | varchar(255) NULL |
설명(선택) |
| asset_dir | varchar(255) | 이모티콘 폴더(웹 경로) (예: /img/emoticon/basic/basic1) |
| thumb_file | varchar(128) DEFAULT 'thumb.png' |
썸네일 파일명(폴더 내부). 기본 thumb.png |
| thumb_img | varchar(255) NULL |
대표 이미지(웹 경로, 선택). 비워두면 asset_dir/thumb_file 사용 권장 |
| price_point | int(11) DEFAULT 0 |
가격(포인트) |
| discount_enabled | tinyint(1) DEFAULT 0 |
할인 사용 여부(1=사용,0=미사용) |
| discount_value | varchar(16) NULL |
할인 값(예: 20% 또는 -20). 미사용이면 NULL 권장 |
| is_sellable | tinyint(1) DEFAULT 1 |
상점 판매 노출(1=판매/노출,0=비판매) |
| is_time_limited | tinyint(1) DEFAULT 0 |
기간제 여부(1=기간제,0=영구) |
| duration_days | int(11) NULL |
기간(일). 기간제일 때 사용, 영구면 NULL |
| promo_starts_at | date NULL |
프로모션 시작일(YYYY-MM-DD) |
| promo_ends_at | date NULL |
프로모션 종료일(YYYY-MM-DD) |
| sort_order | int(11) DEFAULT 0 |
정렬 순서(작을수록 먼저) |
| is_active | tinyint(1) DEFAULT 1 |
전체 활성(1=활성,0=비활성) |
| created_at | datetime DEFAULT current_timestamp() |
생성일 |
| updated_at | datetime DEFAULT current_timestamp() ON UPDATE current_timestamp() |
수정일(자동 갱신) |
키/인덱스
- PRIMARY KEY : package_code
- idx_shop : (is_active, is_sellable, sort_order, created_at)
- idx_type_active_sort : (package_type, is_active, sort_order)
- idx_promo_window : (package_type, is_active, promo_starts_at, promo_ends_at)
2) g5_emoticon_user_package (회원 보유 패키지)
역할 : 회원이 어떤 패키지를 언제 획득했고, 활성/만료 상태가 어떤지 저장합니다.
구매/프로모션 지급/관리자 지급 등 “보유 결과”는 전부 이 테이블에 기록됩니다.
구매/프로모션 지급/관리자 지급 등 “보유 결과”는 전부 이 테이블에 기록됩니다.
| 컬럼 | 타입/기본값 | 설명 |
|---|---|---|
| id | int(11) AUTO_INCREMENT |
PK (AUTO_INCREMENT) |
| mb_id | varchar(20) | 회원 아이디(그누보드 mb_id) |
| package_code | varchar(64) | 보유한 패키지 코드(g5_emoticon_package.package_code) |
| is_active | tinyint(1) DEFAULT 1 |
보유 상태(1=사용가능,0=정지/회수) |
| acquired_at | date DEFAULT curdate() |
획득일(YYYY-MM-DD) |
| expires_at | date NULL |
만료일(영구면 NULL) |
| source | varchar(16) DEFAULT 'buy' |
획득 경로(예: buy/promo/admin) |
| source_ref | varchar(64) NULL |
주문번호/프로모션코드/관리자 메모 등(선택) |
키/인덱스/제약조건
- PRIMARY KEY : id
- UNIQUE KEY uq_user_pkg : (mb_id, package_code) → 같은 회원이 같은 팩을 중복 보유하지 않도록 방지
- idx_user_active_exp : (mb_id, is_active, expires_at) → “내 보유팩” 조회/만료 체크 최적화
- idx_pkg : (package_code) → 패키지별 보유자 조회 최적화
- idx_source_ref : (source, source_ref) → 주문/프로모션 추적 최적화
- FOREIGN KEY fk_user_pkg_pkg : package_code → g5_emoticon_package(package_code), ON DELETE CASCADE
연동 동작 요약
- 상점 구매 완료 또는 프로모션 지급 완료 시 → g5_emoticon_user_package에 보유 레코드가 저장됩니다.
- 게시판 모달에서 “내가 가진 팩”만 보여주려면 → mb_id 기준 user_package 조회 후 package_code로 package 정보 결합합니다.
- 패키지 자체를 삭제하면 → FK의 ON DELETE CASCADE로 해당 팩 보유 기록도 함께 삭제됩니다.
- 기간제 만료는 expires_at 기준으로 판단하거나, 만료 시 is_active=0 처리 방식으로 운영할 수 있습니다.
감사합니다.
댓글목록 0
등록된 댓글이 없습니다.
