CREATE TABLE gift_category ( id BIGINT NOT NULL AUTO_INCREMENT COMMENT '내부 기본키', classification_number VARCHAR(3) NOT NULL COMMENT '신청번호에 사용하는 3자리 분류번호', category_code VARCHAR(50) NOT NULL COMMENT '내부 범용코드', name VARCHAR(50) NOT NULL COMMENT '분류명', receipt_code VARCHAR(9) NOT NULL COMMENT '신청번호에 사용하는 접수코드', representative_item VARCHAR(100) NOT NULL COMMENT '대표품목', requires_damage_waiver TINYINT(1) NOT NULL COMMENT '파손면책 동의 필요 여부', is_active TINYINT(1) NOT NULL COMMENT '활성 여부', created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성 시각', updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '수정 시각', PRIMARY KEY (id), UNIQUE KEY uk_gift_category_classification_number (classification_number), UNIQUE KEY uk_gift_category_code (category_code), UNIQUE KEY uk_gift_category_receipt_code (receipt_code) ) COMMENT='선물 카테고리'; CREATE TABLE gift_mailbox ( id BIGINT NOT NULL COMMENT '전역 단일 설정 ID. 항상 1', name VARCHAR(50) NOT NULL COMMENT '받을 사람 이름', phone_number VARCHAR(30) NOT NULL COMMENT '받을 연락처', zip_code VARCHAR(20) NOT NULL COMMENT '받을 우편번호', address VARCHAR(255) NOT NULL COMMENT '받을 주소', address_detail VARCHAR(255) NULL COMMENT '받을 상세주소', PRIMARY KEY (id) ) COMMENT='선물 받을 주소 전역 설정'; CREATE TABLE gift ( id BIGINT NOT NULL AUTO_INCREMENT COMMENT '내부 기본키', application_no VARCHAR(40) NOT NULL COMMENT '신청번호', sender_member_id BIGINT NOT NULL COMMENT '보내는 팬 회원번호', recipient_member_id BIGINT NOT NULL COMMENT '받는 크리에이터 회원번호', status VARCHAR(30) NOT NULL COMMENT '선물 상태', size_code VARCHAR(20) NOT NULL COMMENT '선물 사이즈 코드', category_id BIGINT NOT NULL COMMENT '신청 시 카테고리 ID', category_name_snapshot VARCHAR(50) NOT NULL COMMENT '신청 시 카테고리명 스냅샷', sale_price_can INT NOT NULL COMMENT '신청 시 결제 금액 스냅샷', can_usage_id BIGINT NOT NULL COMMENT '캔 사용내역 ID', sender_terms_agreed TINYINT(1) NOT NULL COMMENT '팬 이용약관 동의 여부', sender_privacy_agreed TINYINT(1) NOT NULL COMMENT '팬 개인정보 동의 여부', sender_terms_agreed_at TIMESTAMP NOT NULL COMMENT '팬 이용약관 동의 시각', sender_privacy_agreed_at TIMESTAMP NOT NULL COMMENT '팬 개인정보 동의 시각', recipient_terms_agreed TINYINT(1) NOT NULL COMMENT '크리에이터 이용약관 동의 여부', recipient_privacy_agreed TINYINT(1) NOT NULL COMMENT '크리에이터 개인정보 동의 여부', recipient_terms_agreed_at TIMESTAMP NULL COMMENT '크리에이터 이용약관 동의 시각', recipient_privacy_agreed_at TIMESTAMP NULL COMMENT '크리에이터 개인정보 동의 시각', damage_waiver_agreed TINYINT(1) NOT NULL COMMENT '파손면책 동의 여부', created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성 시각', updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '수정 시각', PRIMARY KEY (id), UNIQUE KEY uk_gift_application_no (application_no), CONSTRAINT fk_gift_sender_member FOREIGN KEY (sender_member_id) REFERENCES member (id), CONSTRAINT fk_gift_recipient_member FOREIGN KEY (recipient_member_id) REFERENCES member (id), CONSTRAINT fk_gift_category FOREIGN KEY (category_id) REFERENCES gift_category (id), CONSTRAINT fk_gift_can_usage FOREIGN KEY (can_usage_id) REFERENCES use_can (id) ) COMMENT='선물 신청'; CREATE TABLE gift_delivery ( id BIGINT NOT NULL AUTO_INCREMENT COMMENT '내부 기본키', gift_id BIGINT NOT NULL COMMENT '선물 ID', sender_name VARCHAR(50) NOT NULL COMMENT '발신자 이름', sender_phone_number VARCHAR(30) NOT NULL COMMENT '발신자 휴대폰 번호', sender_zip_code VARCHAR(20) NOT NULL COMMENT '발신자 우편번호', sender_address VARCHAR(255) NOT NULL COMMENT '발신자 주소', sender_address_detail VARCHAR(255) NULL COMMENT '발신자 상세주소', recipient_name VARCHAR(50) NULL COMMENT '수신자 이름', recipient_phone_number VARCHAR(30) NULL COMMENT '수신자 휴대폰 번호', recipient_zip_code VARCHAR(20) NULL COMMENT '수신자 우편번호', recipient_address VARCHAR(255) NULL COMMENT '수신자 주소', recipient_address_detail VARCHAR(255) NULL COMMENT '수신자 상세주소', courier_company_name VARCHAR(50) NULL COMMENT '택배사 한글 표시명', tracking_number VARCHAR(100) NULL COMMENT '운송장 번호', tracking_deadline_at TIMESTAMP NOT NULL COMMENT '운송장 등록 기한', recipient_address_deadline_at TIMESTAMP NULL COMMENT '수신자 배송지 입력 기한', tracking_deadline_reminder_sent_at TIMESTAMP NULL COMMENT '운송장 등록 기한 안내 발송 시각', recipient_address_deadline_reminder_sent_at TIMESTAMP NULL COMMENT '수신자 배송지 입력 기한 안내 발송 시각', tracking_registered_at TIMESTAMP NULL COMMENT '운송장 등록 시각', arrived_at_mailbox_at TIMESTAMP NULL COMMENT '사서함 도착 시각', inspection_completed_at TIMESTAMP NULL COMMENT '검수완료 시각', delivered_at TIMESTAMP NULL COMMENT '전달완료 시각', canceled_at TIMESTAMP NULL COMMENT '취소 시각', undeliverable_at TIMESTAMP NULL COMMENT '전달불가 시각', undeliverable_reason VARCHAR(255) NULL COMMENT '전달불가 사유', created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성 시각', updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '수정 시각', PRIMARY KEY (id), UNIQUE KEY uk_gift_delivery_gift_id (gift_id), CONSTRAINT fk_gift_delivery_gift FOREIGN KEY (gift_id) REFERENCES gift (id) ) COMMENT='선물 배송 정보'; CREATE TABLE gift_size_price ( id BIGINT NOT NULL AUTO_INCREMENT COMMENT '내부 기본키', size_code VARCHAR(20) NOT NULL COMMENT '선물 사이즈 코드', base_price_can INT NOT NULL COMMENT '기본 금액', sale_price_can INT NOT NULL COMMENT '결제 금액', is_active TINYINT(1) NOT NULL COMMENT '활성 여부', created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성 시각', updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '수정 시각', PRIMARY KEY (id), UNIQUE KEY uk_gift_size_price_size_code (size_code) ) COMMENT='선물 사이즈별 가격'; CREATE TABLE gift_review ( id BIGINT NOT NULL AUTO_INCREMENT COMMENT '내부 기본키', gift_id BIGINT NOT NULL COMMENT '선물 ID', sender_member_id BIGINT NOT NULL COMMENT '리뷰 작성 팬 회원번호', rating INT NOT NULL COMMENT '별점', keywords TEXT NULL COMMENT '리뷰 키워드 목록', comment VARCHAR(255) NULL COMMENT '추가의견', created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성 시각', updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '수정 시각', PRIMARY KEY (id), UNIQUE KEY uk_gift_review_gift_id (gift_id), CONSTRAINT fk_gift_review_gift FOREIGN KEY (gift_id) REFERENCES gift (id), CONSTRAINT fk_gift_review_sender_member FOREIGN KEY (sender_member_id) REFERENCES member (id) ) COMMENT='선물 리뷰'; CREATE TABLE gift_application_no_sequence ( id BIGINT NOT NULL AUTO_INCREMENT COMMENT '내부 기본키', category_id BIGINT NOT NULL COMMENT '채번 기준 카테고리 ID', sequence_date VARCHAR(6) NOT NULL COMMENT '채번 기준일 yyMMdd', last_sequence INT NOT NULL COMMENT '마지막 일련번호', created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성 시각', updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '수정 시각', PRIMARY KEY (id), UNIQUE KEY uk_gift_application_no_sequence_category_date (category_id, sequence_date), CONSTRAINT fk_gift_application_no_sequence_category FOREIGN KEY (category_id) REFERENCES gift_category (id) ) COMMENT='선물 신청번호 날짜별 채번';