-- 1. 견적서 마스터 테이블 -- 고객의 견적 요청 기본 정보와 여분 필드를 저장합니다. CREATE TABLE IF NOT EXISTS `estimate` ( `id` int NOT NULL AUTO_INCREMENT, `wr_id` int DEFAULT NULL COMMENT '원본 게시물 ID', `status` VARCHAR(20) NOT NULL DEFAULT 'requesting' COMMENT '견적 상태 (requesting:신청중, completed:작성완료, bidding:입찰중, selected:채택됨, closed:마감)', `bidding_deadline` DATETIME DEFAULT NULL COMMENT '입찰 마감일시', `consultant_id` VARCHAR(20) DEFAULT NULL COMMENT '배정된 상담가 ID', `consultant_assigned_at` DATETIME DEFAULT NULL COMMENT '상담가 배정일시', `company_name` varchar(100) DEFAULT NULL COMMENT '회사명', `site_name` varchar(100) DEFAULT NULL COMMENT '현장명', `estimate_date` varchar(30) DEFAULT NULL COMMENT '견적일자', `temp_1` varchar(255) DEFAULT NULL COMMENT '임시 필드 1', `temp_2` varchar(255) DEFAULT NULL COMMENT '임시 필드 2', `temp_3` varchar(255) DEFAULT NULL COMMENT '임시 필드 3', `temp_4` varchar(255) DEFAULT NULL COMMENT '임시 필드 4', `temp_5` varchar(255) DEFAULT NULL COMMENT '임시 필드 5', `extra_1` varchar(255) DEFAULT NULL COMMENT '여분 필드 1', `extra_2` varchar(255) DEFAULT NULL COMMENT '여분 필드 2', `extra_3` varchar(255) DEFAULT NULL COMMENT '여분 필드 3', `extra_4` varchar(255) DEFAULT NULL COMMENT '여분 필드 4', `extra_5` varchar(255) DEFAULT NULL COMMENT '여분 필드 5', `is_used` tinyint(1) NOT NULL DEFAULT '1' COMMENT '사용 여부 (1:사용, 0:미사용)', `is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '삭제 여부 (1:삭제, 0:정상)', `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '생성일시', `created_by` varchar(20) DEFAULT NULL COMMENT '생성자', `updated_at` datetime DEFAULT NULL COMMENT '수정일시', `updated_by` varchar(20) DEFAULT NULL COMMENT '수정자', PRIMARY KEY (`id`), KEY `wr_id` (`wr_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='견적서 마스터 정보'; -- 2. 견적서 상세 항목 테이블 -- 각 창의 상세 사양과 여분 필드를 저장합니다. CREATE TABLE IF NOT EXISTS `estimate_item` ( `id` int NOT NULL AUTO_INCREMENT, `estimate_id` int DEFAULT NULL COMMENT '견적서 ID (estimate.id)', `no` int DEFAULT NULL COMMENT '항목 번호', `location` varchar(50) DEFAULT NULL COMMENT '위치', `product` varchar(50) DEFAULT NULL COMMENT '품명', `window_main_type` VARCHAR(255) NULL DEFAULT NULL COMMENT '창 종류', `windowRatio` varchar(20) DEFAULT NULL COMMENT '창비율', `windowType` varchar(20) DEFAULT NULL COMMENT '창호형태', `replacePart` varchar(20) DEFAULT NULL COMMENT '교체위치', `color` varchar(20) DEFAULT NULL COMMENT '색상', `spec_width` varchar(20) DEFAULT NULL COMMENT '규격(가로)', `spec_height` varchar(20) DEFAULT NULL COMMENT '규격(세로)', `glass_thickness` varchar(20) DEFAULT NULL COMMENT '유리두께', `glass_color` varchar(20) DEFAULT NULL COMMENT '유리색상', `screen` varchar(10) DEFAULT NULL COMMENT '방충망', `handle` varchar(20) DEFAULT NULL COMMENT '손잡이(시정장치)', `door_dir` varchar(20) DEFAULT NULL COMMENT '문방향', `qty` int DEFAULT NULL COMMENT '수량', `price` int DEFAULT NULL COMMENT '단가', `amount` int DEFAULT NULL COMMENT '금액', `install` varchar(5) DEFAULT NULL COMMENT '시공여부', `brand` varchar(30) DEFAULT NULL COMMENT '브랜드', `temp_1` varchar(255) DEFAULT NULL COMMENT '임시 필드 1', `temp_2` varchar(255) DEFAULT NULL COMMENT '임시 필드 2', `temp_3` varchar(255) DEFAULT NULL COMMENT '임시 필드 3', `temp_4` varchar(255) DEFAULT NULL COMMENT '임시 필드 4', `temp_5` varchar(255) DEFAULT NULL COMMENT '임시 필드 5', `extra_1` varchar(255) DEFAULT NULL COMMENT '여분 필드 1', `extra_2` varchar(255) DEFAULT NULL COMMENT '여분 필드 2', `extra_3` varchar(255) DEFAULT NULL COMMENT '여분 필드 3', `extra_4` varchar(255) DEFAULT NULL COMMENT '여분 필드 4', `extra_5` varchar(255) DEFAULT NULL COMMENT '여분 필드 5', `is_used` tinyint(1) NOT NULL DEFAULT '1' COMMENT '사용 여부 (1:사용, 0:미사용)', `is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '삭제 여부 (1:삭제, 0:정상)', `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '생성일시', `created_by` varchar(20) DEFAULT NULL COMMENT '생성자', `updated_at` datetime DEFAULT NULL COMMENT '수정일시', `updated_by` varchar(20) DEFAULT NULL COMMENT '수정자', PRIMARY KEY (`id`), KEY `estimate_id` (`estimate_id`), CONSTRAINT `fk_item_to_estimate` FOREIGN KEY (`estimate_id`) REFERENCES `estimate` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='견적서 상세 항목'; -- 3. 견적 및 항목 변경 이력 테이블 -- 모든 데이터의 생성, 수정, 삭제 이력을 기록합니다. CREATE TABLE IF NOT EXISTS `estimate_history` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '이력 고유 ID', `estimate_id` int NOT NULL COMMENT '견적서 ID', `item_id` int DEFAULT NULL COMMENT '견적 항목 ID (항목 변경 시)', `action` varchar(20) NOT NULL COMMENT '작업 종류 (create, update, delete)', `change_details` longtext COMMENT '변경된 데이터 (JSON 형식)', `changed_by` varchar(20) NOT NULL COMMENT '변경자 ID', `changed_at` datetime NOT NULL COMMENT '변경일시', PRIMARY KEY (`id`), KEY `estimate_id` (`estimate_id`), KEY `item_id` (`item_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='견적 및 항목 변경 이력'; -- 4. 대리점 입찰 정보 테이블 -- 대리점이 고객의 견적 요청에 대해 제출한 입찰(견적) 정보를 저장합니다. CREATE TABLE IF NOT EXISTS `estimate_bidding` ( `id` int NOT NULL AUTO_INCREMENT, `estimate_id` int NOT NULL COMMENT '견적서 ID (estimate.id)', `dealer_id` varchar(20) NOT NULL COMMENT '입찰한 대리점 회원 ID', `bid_amount` int NOT NULL COMMENT '대리점 제시 금액', `bid_message` text COMMENT '대리점 메모', `status` varchar(20) NOT NULL DEFAULT 'bidding' COMMENT '입찰 상태 (bidding:입찰중, selected:채택됨, unselected:미채택)', `is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '삭제 여부 (1:삭제, 0:정상)', `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '생성일시', `updated_at` datetime DEFAULT NULL COMMENT '수정일시', `updated_by` varchar(20) DEFAULT NULL COMMENT '수정자', PRIMARY KEY (`id`), KEY `estimate_id` (`estimate_id`), KEY `dealer_id` (`dealer_id`), CONSTRAINT `fk_bidding_to_estimate` FOREIGN KEY (`estimate_id`) REFERENCES `estimate` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='대리점 입찰 정보';