-- 1. [핵심] UI 리소스 마스터 테이블 -- 이 테이블은 웹사이트의 모든 UI 요소(라벨, 데이터)의 '설계도' 역할을 합니다. CREATE TABLE IF NOT EXISTS `g5_ui_manager` ( `um_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '고유 ID', `screen_code` varchar(50) NOT NULL COMMENT '화면 코드 (e.g. order_form)', `group_code` varchar(50) NOT NULL COMMENT '화면 내 그룹 코드 (e.g. address_info)', `resource_code` varchar(50) NOT NULL COMMENT '리소스 코드 (개발자가 사용)', `resource_type` enum('LABEL','DATA') NOT NULL COMMENT '리소스 타입 (라벨, 데이터)', `resource_desc` varchar(255) DEFAULT NULL COMMENT '리소스에 대한 설명 (관리자용)', `is_used` tinyint(1) NOT NULL DEFAULT '1' COMMENT '사용 여부', `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성일', `created_by` varchar(20) NOT NULL COMMENT '생성자', `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '수정일', `updated_by` varchar(20) NOT NULL COMMENT '수정자', PRIMARY KEY (`um_id`), UNIQUE KEY `resource_identifier` (`screen_code`,`group_code`,`resource_code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='[솔루션] UI 리소스 관리자'; -- 2. 계층형 카테고리 테이블 ('DATA' 타입 리소스가 사용할 데이터) -- um_id를 통해 어떤 리소스에 속한 데이터인지 명시합니다. CREATE TABLE IF NOT EXISTS `g5_form_category` ( `fc_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '카테고리 고유 ID', `um_id` int(11) NOT NULL COMMENT 'UI 리소스 ID (g5_ui_manager.um_id)', `parent_id` int(11) NOT NULL DEFAULT '0' COMMENT '부모 카테고리 ID (0이면 최상위)', `fc_key` varchar(255) NOT NULL COMMENT 'DB에 저장될 값 (고유값)', `fc_order` int(11) NOT NULL DEFAULT '0' COMMENT '정렬 순서', `is_used` tinyint(1) NOT NULL DEFAULT '1' COMMENT '사용 여부', `is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '삭제 여부', `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성일', `created_by` varchar(20) NOT NULL COMMENT '생성자', `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '수정일', `updated_by` varchar(20) NOT NULL COMMENT '수정자', PRIMARY KEY (`fc_id`), KEY `um_id` (`um_id`), KEY `parent_id` (`parent_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='[솔루션] 계층형 폼 카테고리'; -- 3. 공용 다국어 정보 테이블 -- 'LABEL' 타입의 실제 텍스트와 'DATA' 타입의 카테고리 이름을 모두 저장합니다. CREATE TABLE IF NOT EXISTS `g5_common_lang` ( `cl_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '고유 ID', `target_table` varchar(50) NOT NULL COMMENT '대상 테이블명', `target_id` int(11) NOT NULL COMMENT '대상 레코드 ID', `lang_code` varchar(10) NOT NULL COMMENT '언어 코드', `cl_name` varchar(255) NOT NULL COMMENT '화면에 표시될 이름/값', `cl_description` text COMMENT '부가 설명 (툴팁 등)', `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '수정일', `updated_by` varchar(20) NOT NULL COMMENT '수정자', PRIMARY KEY (`cl_id`), UNIQUE KEY `target_lang` (`target_table`,`target_id`,`lang_code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='[솔루션] 공용 다국어 정보'; -- 4. 변경 이력 테이블 CREATE TABLE IF NOT EXISTS `g5_form_option_history` ( `fh_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '고유 ID', `table_name` varchar(50) NOT NULL COMMENT '변경된 테이블명', `record_id` int(11) NOT NULL COMMENT '변경된 레코드 ID', `action_type` varchar(10) NOT NULL COMMENT '작업 종류', `change_data` longtext COMMENT '변경된 데이터 (JSON)', `changed_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '변경일', `changed_by` varchar(20) NOT NULL COMMENT '변경자', PRIMARY KEY (`fh_id`), KEY `table_name_record_id` (`table_name`,`record_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='[솔루션] 폼 옵션 변경 이력';