Files
jongryangje/docs/기본 개발계획/테이블/01-마스터_테이블_DDL.md
2026-04-08 00:23:55 +09:00

8.6 KiB

마스터 테이블 DDL

지자체·회원·지정판매소·기본코드·대행소·담당자·업체·무료대상자.
06-데이터베이스정리구조.md 네이밍 규칙 적용.


1. 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='지자체(테넌트 루트)';

2. member (회원) — 기존 테이블 확장

기존 member 테이블에 지자체 FK 추가.

ALTER TABLE `member`
  ADD COLUMN `mb_lg_idx` INT UNSIGNED NULL DEFAULT NULL COMMENT '소속 지자체 PK(지자체관리자만 사용)' AFTER `mb_group`,
  ADD KEY `idx_mb_lg_idx` (`mb_lg_idx`);
mb_level mb_lg_idx 비고
4 (super admin) NULL 전체 지자체 접근
3 (지자체관리자) 지자체 PK 해당 지자체만
2 (지정판매소) NULL 소속은 designated_shop.ds_lg_idx 로 판단
1 (일반) NULL 지자체 필터 없음

3. designated_shop (지정 판매소)

노션 ERD의 Retailer. 고정 가상계좌(ds_va_number) 보유.

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='지정판매소';

4. code_kind / code_detail (기본코드)

기능목록 F-MD-01: 도/특별시/광역시, 구군 코드, 봉투 구분(일반·재사용·음식물), 용량별 코드, 작업 권한 등.

CREATE TABLE IF NOT EXISTS `code_kind` (
  `ck_idx`     INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '코드종류 PK',
  `ck_code`    VARCHAR(20)  NOT NULL DEFAULT '' COMMENT '종류 코드(A~Y 등)',
  `ck_name`    VARCHAR(100) NOT NULL DEFAULT '' COMMENT '종류 명칭',
  `ck_state`   TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '1=사용, 0=미사용',
  `ck_regdate` DATETIME     NOT NULL COMMENT '등록일시',
  PRIMARY KEY (`ck_idx`),
  UNIQUE KEY `uk_ck_code` (`ck_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='기본코드 종류';

CREATE TABLE IF NOT EXISTS `code_detail` (
  `cd_idx`     INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '세부코드 PK',
  `cd_ck_idx`  INT UNSIGNED NOT NULL COMMENT 'code_kind FK',
  `cd_code`    VARCHAR(50)  NOT NULL DEFAULT '' COMMENT '세부 코드',
  `cd_name`    VARCHAR(100) NOT NULL DEFAULT '' COMMENT '세부 명칭',
  `cd_sort`    INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '정렬 순서',
  `cd_state`   TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '1=사용, 0=미사용',
  `cd_regdate` DATETIME     NOT NULL COMMENT '등록일시',
  PRIMARY KEY (`cd_idx`),
  KEY `idx_cd_ck_idx` (`cd_ck_idx`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='세부 기본코드';

5. agent (판매 대행소)

F-MD-04: 새마을금고, 우체국, 농협 등. 지자체별 소속 설정.

CREATE TABLE IF NOT EXISTS `agent` (
  `ag_idx`     INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '대행소 PK',
  `ag_lg_idx`  INT UNSIGNED NOT NULL COMMENT '소속 지자체 FK',
  `ag_code`    VARCHAR(20)  NOT NULL DEFAULT '' COMMENT '대행소 코드',
  `ag_name`    VARCHAR(100) NOT NULL DEFAULT '' COMMENT '대행소 명칭',
  `ag_state`   TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '1=사용, 0=미사용',
  `ag_regdate` DATETIME     NOT NULL COMMENT '등록일시',
  PRIMARY KEY (`ag_idx`),
  KEY `idx_ag_lg_idx` (`ag_lg_idx`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='판매 대행소';

6. contact (담당자)

F-MD-05: 지자체별 소속(구/군/대행소/제작업체), 담당자명, 전화번호.

CREATE TABLE IF NOT EXISTS `contact` (
  `ct_idx`       INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '담당자 PK',
  `ct_lg_idx`    INT UNSIGNED NOT NULL COMMENT '지자체 FK',
  `ct_affinity`  VARCHAR(20)  NOT NULL DEFAULT '' COMMENT '소속 구분: 구군,대행소,제작업체',
  `ct_name`      VARCHAR(50)  NOT NULL DEFAULT '' COMMENT '담당자명',
  `ct_phone`     VARCHAR(20)  NOT NULL DEFAULT '' COMMENT '전화번호',
  `ct_ref_id`    INT UNSIGNED NULL     DEFAULT NULL COMMENT '소속 대상 ID(업체/대행소 등)',
  `ct_state`     TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '1=사용, 0=미사용',
  `ct_regdate`   DATETIME     NOT NULL COMMENT '등록일시',
  PRIMARY KEY (`ct_idx`),
  KEY `idx_ct_lg_idx` (`ct_lg_idx`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='담당자';

7. company (업체)

F-MD-05: 제작업체, 협회, 회수업체. 지자체별.

CREATE TABLE IF NOT EXISTS `company` (
  `co_idx`      INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '업체 PK',
  `co_lg_idx`  INT UNSIGNED NOT NULL COMMENT '지자체 FK',
  `co_type`    VARCHAR(20)  NOT NULL DEFAULT '' COMMENT '협회,제작업체,회수업체',
  `co_name`    VARCHAR(100) NOT NULL DEFAULT '' COMMENT '업체명',
  `co_rep`     VARCHAR(50)  NOT NULL DEFAULT '' COMMENT '대표자명',
  `co_addr`    VARCHAR(255) NOT NULL DEFAULT '' COMMENT '주소',
  `co_tel`     VARCHAR(20)  NOT NULL DEFAULT '' COMMENT '전화',
  `co_biz_no`  VARCHAR(20)  NOT NULL DEFAULT '' COMMENT '사업자번호',
  `co_state`   TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '1=사용, 0=미사용',
  `co_regdate` DATETIME     NOT NULL COMMENT '등록일시',
  PRIMARY KEY (`co_idx`),
  KEY `idx_co_lg_idx` (`co_lg_idx`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='업체';

8. beneficiary (무료용 대상자)

F-MD-06 무료 대상자: 읍/면/동 사무소, 무료대상자, 기타. 구분별 명칭·종료일·상태.

CREATE TABLE IF NOT EXISTS `beneficiary` (
  `bf_idx`       INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '무료대상자 PK',
  `bf_lg_idx`    INT UNSIGNED NOT NULL COMMENT '지자체 FK',
  `bf_kind`      VARCHAR(20)  NOT NULL DEFAULT '' COMMENT '읍면동사무소,무료대상자,기타',
  `bf_name`      VARCHAR(100) NOT NULL DEFAULT '' COMMENT '명칭',
  `bf_end_date`  DATE         NULL     DEFAULT NULL COMMENT '종료일자',
  `bf_memo`      VARCHAR(255) NOT NULL DEFAULT '' COMMENT '비고',
  `bf_state`     TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '1=정상, 0=삭제',
  `bf_regdate`   DATETIME     NOT NULL COMMENT '등록일시',
  PRIMARY KEY (`bf_idx`),
  KEY `idx_bf_lg_idx` (`bf_lg_idx`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='무료용 대상자';