-- 로그인 기능용 테이블 (docs/11-login-logout-development-guide.md 기준) -- 실행: mysql -h 127.0.0.1 -P 3306 -u jongryangje -p jongryangje_dev < writable/database/login_tables.sql SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- --------------------------------------------------------------------------- -- member: 로그인·권한용 회원 테이블 -- mb_state: 1=정상, 2=정지, 0=탈퇴 -- mb_level: app/Config/Roles.php 참고 -- 1=일반 사용자, 2=지정판매소, 3=지자체관리자, 4=super admin -- --------------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `member` ( `mb_idx` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '회원 PK', `mb_id` VARCHAR(50) NOT NULL COMMENT '로그인 아이디', `mb_passwd` VARCHAR(255) NOT NULL COMMENT '비밀번호 해시(password_hash)', `mb_name` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '이름', `mb_email` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '이메일', `mb_phone` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '연락처', `mb_lang` VARCHAR(10) NOT NULL DEFAULT 'ko' COMMENT '언어', `mb_level` TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '1=일반, 2=지정판매소, 3=지자체관리자, 4=super admin (Roles.php)', `mb_group` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '권한 그룹 코드(Phase 2)', `mb_lg_idx` INT UNSIGNED NULL DEFAULT NULL COMMENT '소속 지자체 PK(지자체관리자만 사용)', `mb_state` TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '1=정상, 2=정지, 0=탈퇴', `mb_regdate` DATETIME NOT NULL COMMENT '가입일시', `mb_latestdate` DATETIME NULL DEFAULT NULL COMMENT '최근 로그인 일시', `mb_leavedate` DATETIME NULL DEFAULT NULL COMMENT '탈퇴일시', PRIMARY KEY (`mb_idx`), UNIQUE KEY `uk_mb_id` (`mb_id`), KEY `idx_mb_state` (`mb_state`), KEY `idx_mb_lg_idx` (`mb_lg_idx`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='회원(로그인·권한)'; -- --------------------------------------------------------------------------- -- member_log: 로그인/로그아웃 이력 전용 -- --------------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `member_log` ( `mll_idx` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '로그 PK', `mll_success` TINYINT(1) NOT NULL COMMENT '1=성공, 0=실패', `mb_idx` INT UNSIGNED NULL DEFAULT NULL COMMENT '회원 PK(실패 시 NULL 가능)', `mb_id` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '로그인 시도 아이디', `mll_regdate` DATETIME NOT NULL COMMENT '로그 일시', `mll_ip` VARCHAR(45) NOT NULL DEFAULT '' COMMENT 'IP', `mll_msg` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '메시지(실패 사유 등)', `mll_useragent` VARCHAR(500) NOT NULL DEFAULT '' COMMENT 'User-Agent', `mll_logout_date` DATETIME NULL DEFAULT NULL COMMENT '로그아웃 일시', `mll_url` VARCHAR(500) NULL DEFAULT NULL COMMENT '요청 URL(선택)', `mll_referer` VARCHAR(500) NULL DEFAULT NULL COMMENT 'Referer(선택)', `mll_country` VARCHAR(10) NULL DEFAULT NULL COMMENT '국가 코드(선택)', `at_token` VARCHAR(100) NULL DEFAULT NULL COMMENT '세션/토큰 식별(선택)', PRIMARY KEY (`mll_idx`), KEY `idx_mll_mb_idx` (`mb_idx`), KEY `idx_mll_regdate` (`mll_regdate`), KEY `idx_mll_success` (`mll_success`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='로그인/로그아웃 이력'; -- --------------------------------------------------------------------------- -- member_approval_request: 회원가입 역할 승인 요청 이력 -- 공개 회원가입 시 생성되며, 승인 후에만 requested_level이 member.mb_level로 반영됨 -- --------------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `member_approval_request` ( `mar_idx` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '승인요청 PK', `mb_idx` INT UNSIGNED NOT NULL COMMENT '회원 FK(member.mb_idx)', `mar_requested_level` TINYINT UNSIGNED NOT NULL COMMENT '요청 역할(1,2,3)', `mar_status` VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT 'pending|approved|rejected', `mar_request_note` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '요청 메모', `mar_reject_reason` VARCHAR(255) NULL DEFAULT NULL COMMENT '반려 사유', `mar_requested_at` DATETIME NOT NULL COMMENT '요청일시', `mar_requested_by` INT UNSIGNED NULL DEFAULT NULL COMMENT '요청자 mb_idx', `mar_processed_at` DATETIME NULL DEFAULT NULL COMMENT '처리일시', `mar_processed_by` INT UNSIGNED NULL DEFAULT NULL COMMENT '처리자 mb_idx', PRIMARY KEY (`mar_idx`), KEY `idx_mar_mb_idx` (`mb_idx`), KEY `idx_mar_status_requested` (`mar_status`, `mar_requested_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='회원가입 역할 승인 요청'; -- --------------------------------------------------------------------------- -- local_government: 지자체 마스터 (테넌트 루트) -- --------------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `local_government` ( `lg_idx` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '지자체 PK', `lg_name` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '지자체명(예: OO구청)', `lg_code` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '지자체/구군 코드(행정코드)', `lg_sido` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '시/도', `lg_gugun` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '구/군', `lg_addr` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '주소', `lg_state` TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '1=사용, 0=미사용', `lg_regdate` DATETIME NOT NULL COMMENT '등록일시', PRIMARY KEY (`lg_idx`), UNIQUE KEY `uk_lg_code` (`lg_code`), KEY `idx_lg_state` (`lg_state`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='지자체(테넌트 루트)'; -- --------------------------------------------------------------------------- -- designated_shop: 지정판매소 -- --------------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `designated_shop` ( `ds_idx` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '지정판매소 PK', `ds_lg_idx` INT UNSIGNED NOT NULL COMMENT '소속 지자체 FK', `ds_mb_idx` INT UNSIGNED NULL DEFAULT NULL COMMENT '로그인 회원 FK(1:1)', `ds_shop_no` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '판매소번호', `ds_name` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '상호명', `ds_biz_no` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '사업자번호', `ds_rep_name` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '대표자명', `ds_va_number` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '고정 가상계좌 번호', `ds_zip` VARCHAR(10) NOT NULL DEFAULT '' COMMENT '우편번호', `ds_addr` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '도로명주소', `ds_addr_jibun` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '지번주소', `ds_tel` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '일반전화', `ds_rep_phone` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '개인전화', `ds_email` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '이메일', `ds_gugun_code` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '구코드', `ds_designated_at` DATE NULL DEFAULT NULL COMMENT '지정일자', `ds_state` TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '1=정상, 2=폐업, 3=직권해지', `ds_regdate` DATETIME NOT NULL COMMENT '등록일시', PRIMARY KEY (`ds_idx`), KEY `idx_ds_lg_idx` (`ds_lg_idx`), KEY `idx_ds_mb_idx` (`ds_mb_idx`), UNIQUE KEY `uk_ds_shop_no` (`ds_shop_no`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='지정판매소'; SET FOREIGN_KEY_CHECKS = 1;