-- MySQL Workbench Forward Engineering

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

-- -----------------------------------------------------
-- Schema eod_authentication
-- -----------------------------------------------------
-- 인증 데이터베이스
-- -----------------------------------------------------
-- Schema eod_game
-- -----------------------------------------------------
-- 게임 데이터베이스
-- -----------------------------------------------------
-- Schema eod_log
-- -----------------------------------------------------
-- 로그 데이터베이스
-- -----------------------------------------------------
-- Schema eod_ranking
-- -----------------------------------------------------
-- 랭킹 데이터베이스
-- -----------------------------------------------------
-- Schema eod_community
-- -----------------------------------------------------
-- 커뮤니티 데이터베이스

-- -----------------------------------------------------
-- Schema eod_community
--
-- 커뮤니티 데이터베이스
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `eod_community` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
-- -----------------------------------------------------
-- Schema eod_tool
-- -----------------------------------------------------
-- 서비스 관리도구용 데이터베이스
-- -----------------------------------------------------
-- Schema eod_configuration
-- -----------------------------------------------------
-- 서비스 설정 데이터베이스
-- -----------------------------------------------------
-- Schema eod_global
-- -----------------------------------------------------
-- 전역 서비스 관리 데이터베이스
USE `eod_community` ;

-- -----------------------------------------------------
-- Table `eod_community`.`table_guild`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `eod_community`.`table_guild` (
  `guild_id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '길드의 식별 번호\n\n- 길드의 식별 번호는 한 번 부여하면 변동되지 않는다.\n\n- 길드의 식별 번호 중 첫 6비트는 커뮤니티 DB의 고유 번호로 설정한다.\n: 이를 통해, 해당 길드가 어느 커뮤니티 DB에 속하는지 알 수 있다.',
  `name` VARCHAR(64) BINARY NOT NULL DEFAULT '' COMMENT '길드의 이름',
  `mark_code` INT(11) NOT NULL DEFAULT '0' COMMENT '길드 휘장의 타입 식별 코드',
  `mark_border_code` INT(11) NOT NULL DEFAULT '0',
  `mark_effect_code` INT(11) NOT NULL DEFAULT '0',
  `description` VARCHAR(384) NOT NULL DEFAULT '' COMMENT '길드를 나타내는 설명문',
  `level` INT(11) NOT NULL DEFAULT '1' COMMENT '길드의  레벨',
  `experience` BIGINT(20) NOT NULL DEFAULT '0' COMMENT '길드의 현재 경험치\n\n- 현재 길드 레벨에서 다음 길드 레벨까지 도달하기 위한 경험치 중에서, 현재까지 쌓은 경험치의 양이다.',
  `state` TINYINT(4) NOT NULL DEFAULT '0' COMMENT '길드의 상태값\n: enum eGuildState의 값과 같다.',
  `need_join_permission` TINYINT(1) NOT NULL DEFAULT '0',
  `master_player_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0' COMMENT '길드 마스터의 ID',
  `change_name_count` INT(11) NOT NULL DEFAULT '0' COMMENT '이름 변경 횟수',
  `change_name_datetime` DATETIME NOT NULL DEFAULT '1000-01-01 00:00:00' COMMENT '마지막으로 이름을 변경한 일시',
  `change_mark_count` INT(11) NOT NULL DEFAULT '0' COMMENT '휘장 교체 횟수',
  `change_mark_datetime` DATETIME NOT NULL DEFAULT '1000-01-01 00:00:00' COMMENT '마지막으로 휘장을 교체한 일시',
  `change_description_count` INT(11) NOT NULL DEFAULT '0' COMMENT '설명 교체 횟수',
  `change_description_datetime` DATETIME NOT NULL DEFAULT '1000-01-01 00:00:00' COMMENT '마지막으로 설명을 교체한 일시',
  `skill_reset_count` INT(11) NOT NULL DEFAULT '0' COMMENT '스킬 초기화 횟수',
  `war_count` INT(11) NOT NULL DEFAULT '0' COMMENT '길드 전쟁 횟수',
  `raid_count` INT(11) NOT NULL DEFAULT '0' COMMENT '길드 레이드 횟수',
  `generate_datetime` DATETIME NOT NULL DEFAULT '1000-01-01 00:00:00' COMMENT '생성일시',
  `update_datetime` DATETIME NOT NULL DEFAULT '1000-01-01 00:00:00' COMMENT '갱신일시',
  PRIMARY KEY (`guild_id`),
  UNIQUE INDEX `name_UNIQUE` (`name` ASC))
ENGINE = InnoDB
COMMENT = '길드 정보';


-- -----------------------------------------------------
-- Table `eod_community`.`table_guild_join_request`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `eod_community`.`table_guild_join_request` (
  `guild_id` BIGINT(20) UNSIGNED NOT NULL COMMENT '길드 ID',
  `request_player_id` BIGINT(20) UNSIGNED NOT NULL COMMENT '가입을 요청한 플레이어의 ID',
  `request_character_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0' COMMENT '가입을 요청한 캐릭터의 ID\n\n- 길드에 가입하기 위한 캐릭터의 레벨에 제한이 있기 때문에, 어떤 캐릭터로 가입을 요청했는지에 대한 정보도 필요하다.',
  `state` TINYINT(4) NOT NULL DEFAULT '0' COMMENT '가입 진행 상태\n\n 0 = Requested (신청 중)\n 1 = Approved (승인됨)\n 2 = Refused (거절됨)\n 3 = Completed (완료됨. 신청자 - 길드 마스터 양자가 모두 확인했고, 어느 쪽이든 길드 가입이 완료되었으므로 메시지를 더 유지할 필요가 없다.)',
  `update_datetime` DATETIME NULL DEFAULT '1000-01-01 00:00:00' COMMENT '갱신일시',
  PRIMARY KEY (`guild_id`, `request_player_id`),
  INDEX `tb_guild_join_request1_idx` (`request_player_id` ASC))
ENGINE = InnoDB
COMMENT = '길드 가입 신청 정보';


-- -----------------------------------------------------
-- Table `eod_community`.`table_guild_skill`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `eod_community`.`table_guild_skill` (
  `guild_id` BIGINT(20) UNSIGNED NOT NULL COMMENT '길드 ID',
  `skill_code` INT(11) NOT NULL COMMENT '길드 스킬의 타입 식별 코드',
  `enhance_level` INT(11) NOT NULL DEFAULT '0' COMMENT '스킬의 강화 단계',
  `update_datetime` DATETIME NOT NULL DEFAULT '1000-01-01 00:00:00' COMMENT '갱신일시',
  PRIMARY KEY (`guild_id`, `skill_code`))
ENGINE = InnoDB
COMMENT = '길드 스킬 정보';


-- -----------------------------------------------------
-- Table `eod_community`.`table_guild_membership`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `eod_community`.`table_guild_membership` (
  `player_id` BIGINT(20) UNSIGNED NOT NULL COMMENT '플레이어의 ID',
  `guild_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0' COMMENT '플레이어가 가입한 길드의 ID\n\n- 길드에서 탈퇴한 경우에는 이 값은 0 (= Eod.Define.Guild.InvalidID)이 된다.',
  `membership` TINYINT(4) NOT NULL DEFAULT '0' COMMENT '길드 멤버의 상태\n\n 0 = NotMember (멤버 아님)\n 1 = Banished (추방된 상태)\n 2 = Withdrawal (탈퇴한 상태)\n 3 = Member (일반 멤버)\n 4 = Elder (장로)\n 5 = Master (마스터)',
  `guild_war_contribution_point` INT(11) UNSIGNED NOT NULL DEFAULT '0',
  `guild_war_straight_win_count` INT(11) NOT NULL DEFAULT '0',
  `join_datetime` DATETIME NOT NULL DEFAULT '1000-01-01 00:00:00' COMMENT '길드에 가입한 일시',
  `update_datetime` DATETIME NOT NULL DEFAULT '1000-01-01 00:00:00' COMMENT '갱신일시',
  PRIMARY KEY (`player_id`),
  INDEX `tb_guild_membership_guild_id_idx` (`guild_id` ASC))
ENGINE = InnoDB
COMMENT = '길드 멤버쉽 정보';


-- -----------------------------------------------------
-- Table `eod_community`.`table_friend`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `eod_community`.`table_friend` (
  `user_id` BIGINT(20) UNSIGNED NOT NULL COMMENT '플레이어의 사용자 ID',
  `friend_user_id` BIGINT(20) UNSIGNED NOT NULL COMMENT '친구의 사용자 ID',
  `trophy_send_datetime` DATETIME NOT NULL DEFAULT '1000-01-01 00:00:00' COMMENT '우정 점수를 보낸 일시',
  PRIMARY KEY (`user_id`, `friend_user_id`))
ENGINE = InnoDB
COMMENT = '친구 관계 정보';


-- -----------------------------------------------------
-- Table `eod_community`.`table_coupon`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `eod_community`.`table_coupon` (
  `serial_number` VARCHAR(20) NOT NULL,
  `reward1` INT(11) NOT NULL DEFAULT '0',
  `count1` INT(11) NOT NULL DEFAULT '0',
  `reward2` INT(11) NOT NULL DEFAULT '0',
  `count2` INT(11) NOT NULL DEFAULT '0',
  `reward3` INT(11) NOT NULL DEFAULT '0',
  `count3` INT(11) NOT NULL DEFAULT '0',
  `reward4` INT(11) NOT NULL DEFAULT '0',
  `count4` INT(11) NOT NULL DEFAULT '0',
  `reward5` INT(11) NOT NULL DEFAULT '0',
  `count5` INT(11) NOT NULL DEFAULT '0',
  `expiration_date` DATE NOT NULL DEFAULT '1000-01-01',
  PRIMARY KEY (`serial_number`))
ENGINE = InnoDB
COMMENT = '쿠폰 정보';


-- -----------------------------------------------------
-- Table `eod_community`.`table_coupon_temp`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `eod_community`.`table_coupon_temp` (
  `serial_number` VARCHAR(20) NOT NULL,
  PRIMARY KEY (`serial_number`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `eod_community`.`table_keyword_coupon_log`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `eod_community`.`table_keyword_coupon_log` (
  `keyword` VARCHAR(20) NOT NULL,
  `user_id` BIGINT(20) UNSIGNED NOT NULL,
  `used_datetime` DATETIME NOT NULL DEFAULT '1000-01-01 00:00:00',
  PRIMARY KEY (`keyword`, `user_id`))
ENGINE = InnoDB
COMMENT = '키워드 쿠폰 발행 정보 로그';


-- -----------------------------------------------------
-- Table `eod_community`.`table_keyword_coupon`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `eod_community`.`table_keyword_coupon` (
  `keyword` VARCHAR(20) NOT NULL,
  `reward1` INT(11) NOT NULL DEFAULT '0',
  `count1` INT(11) NOT NULL DEFAULT '0',
  `reward2` INT(11) NOT NULL DEFAULT '0',
  `count2` INT(11) NOT NULL DEFAULT '0',
  `reward3` INT(11) NOT NULL DEFAULT '0',
  `count3` INT(11) NOT NULL DEFAULT '0',
  `reward4` INT(11) NOT NULL DEFAULT '0',
  `count4` INT(11) NOT NULL DEFAULT '0',
  `reward5` INT(11) NOT NULL DEFAULT '0',
  `count5` INT(11) NOT NULL DEFAULT '0',
  `expiration_date` DATE NOT NULL DEFAULT '1000-01-01',
  PRIMARY KEY (`keyword`))
ENGINE = InnoDB
COMMENT = '키워드 쿠폰 정보';


-- -----------------------------------------------------
-- Table `eod_community`.`table_coupon_log`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `eod_community`.`table_coupon_log` (
  `coupon_group` VARCHAR(4) NOT NULL,
  `user_id` BIGINT(20) UNSIGNED NOT NULL,
  `serial_number` VARCHAR(20) NOT NULL DEFAULT '',
  `used_datetime` DATETIME NOT NULL DEFAULT '1000-01-01 00:00:00',
  PRIMARY KEY (`coupon_group`, `user_id`))
ENGINE = InnoDB
COMMENT = '쿠폰 발행 정보 로그';


-- -----------------------------------------------------
-- Table `eod_community`.`table_in_game_event`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `eod_community`.`table_in_game_event` (
  `no` BIGINT(20) UNSIGNED NOT NULL,
  `type` INT(11) NOT NULL DEFAULT '0',
  `addition` INT(11) NOT NULL DEFAULT '0',
  `start_date` DATETIME NOT NULL DEFAULT '1000-01-01 00:00:00',
  `end_date` DATETIME NOT NULL DEFAULT '1000-01-01 00:00:00',
  PRIMARY KEY (`no`),
  INDEX `start_date_end_date_INDEX` (`start_date` ASC, `end_date` ASC))
ENGINE = InnoDB
COMMENT = '게임 서비스 이벤트(기간 제한) 정보';


-- -----------------------------------------------------
-- Table `eod_community`.`table_connect_event`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `eod_community`.`table_connect_event` (
  `no` BIGINT(20) UNSIGNED NOT NULL,
  `reward1` INT(11) NOT NULL DEFAULT '0',
  `count1` INT(11) NOT NULL DEFAULT '0',
  `reward2` INT(11) NOT NULL DEFAULT '0',
  `count2` INT(11) NOT NULL DEFAULT '0',
  `reward3` INT(11) NOT NULL DEFAULT '0',
  `count3` INT(11) NOT NULL DEFAULT '0',
  `reward4` INT(11) NOT NULL DEFAULT '0',
  `count4` INT(11) NOT NULL DEFAULT '0',
  `reward5` INT(11) NOT NULL DEFAULT '0',
  `count5` INT(11) NOT NULL DEFAULT '0',
  `start_date` DATETIME NOT NULL DEFAULT '1000-01-01 00:00:00',
  `end_date` DATETIME NOT NULL DEFAULT '1000-01-01 00:00:00',
  PRIMARY KEY (`no`),
  INDEX `start_date_end_date_INDEX` (`start_date` ASC, `end_date` ASC))
ENGINE = InnoDB
COMMENT = '접속 이벤트';


-- -----------------------------------------------------
-- Table `eod_community`.`table_connect_event_log`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `eod_community`.`table_connect_event_log` (
  `user_id` BIGINT(20) UNSIGNED NOT NULL,
  `no` BIGINT(20) UNSIGNED NOT NULL,
  `reward_date` DATETIME NOT NULL DEFAULT '1000-01-01 00:00:00',
  PRIMARY KEY (`user_id`, `no`))
ENGINE = InnoDB
COMMENT = '접속 이벤트 로그';


-- -----------------------------------------------------
-- Table `eod_community`.`table_in_game_always_event`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `eod_community`.`table_in_game_always_event` (
  `no` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  `type` INT(11) NOT NULL DEFAULT '0',
  `value` INT(11) NOT NULL DEFAULT '0',
  `include_day_of_week` VARCHAR(13) NOT NULL DEFAULT '',
  `start_time` TIME NOT NULL DEFAULT '00:00:00',
  `end_time` TIME NOT NULL DEFAULT '00:00:00',
  PRIMARY KEY (`no`))
ENGINE = InnoDB
COMMENT = '게임 서비스 상시 이벤트 정보';


-- -----------------------------------------------------
-- Table `eod_community`.`table_party_squad`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `eod_community`.`table_party_squad` (
  `player_id` BIGINT(20) UNSIGNED NOT NULL COMMENT '플레이어의 ID',
  `joined_player_id` BIGINT(20) UNSIGNED NOT NULL COMMENT '참여한 다른 플레이어의 ID',
  `last_joined_datetime_guardian_raid` DATETIME NOT NULL DEFAULT '1000-01-01 00:00:00' COMMENT '마지막으로 파티 플레이에 참여한 일시\n: 수호 레이드',
  `last_joined_datetime_guild_war` DATETIME NOT NULL DEFAULT '1000-01-01 00:00:00' COMMENT '마지막으로 파티 플레이에 참여한 일시\n: 길드전',
  PRIMARY KEY (`player_id`, `joined_player_id`))
ENGINE = InnoDB
COMMENT = '컨텐츠 별 파티 구성에 대한 정보';


-- -----------------------------------------------------
-- Table `eod_community`.`table_guild_war_record`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `eod_community`.`table_guild_war_record` (
  `guild_id` BIGINT(20) UNSIGNED NOT NULL,
  `war_point` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
  `war_count` INT(11) UNSIGNED NOT NULL DEFAULT 0,
  `win_count` INT(11) UNSIGNED NOT NULL DEFAULT 0,
  `lose_count` INT(11) UNSIGNED NOT NULL DEFAULT 0,
  PRIMARY KEY (`guild_id`))
ENGINE = InnoDB;


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
