Files
jongryangje/docs/기본 개발계획/테이블/02-물류_판매_테이블_DDL.md
2026-04-08 00:23:55 +09:00

8.5 KiB

물류·판매 테이블 DDL

품목·단가·포장단위·발주·입고·주문·수불. 노션 ERD(Product, InboundReceipt, SalesOrder, StockTransaction) 반영.


1. product (지자체별 취급 품목)

지자체별 봉투 규격·용량. 단가는 product_price에서 적용일자별 관리.

CREATE TABLE IF NOT EXISTS `product` (
  `pr_idx`     INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '품목 PK',
  `pr_lg_idx`  INT UNSIGNED NOT NULL COMMENT '지자체 FK',
  `pr_code`    VARCHAR(30)  NOT NULL DEFAULT '' COMMENT '봉투/규격 코드',
  `pr_type`    VARCHAR(20)  NOT NULL DEFAULT '' COMMENT '일반,음식물,재사용',
  `pr_capacity` VARCHAR(20)  NOT NULL DEFAULT '' COMMENT '3L,5L,10L 등',
  `pr_name`    VARCHAR(100) NOT NULL DEFAULT '' COMMENT '품목 명칭',
  `pr_state`   TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '1=사용, 0=미사용',
  `pr_regdate` DATETIME     NOT NULL COMMENT '등록일시',
  PRIMARY KEY (`pr_idx`),
  KEY `idx_pr_lg_idx` (`pr_lg_idx`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='지자체별 취급 품목';

2. product_price (적용일자별 단가)

F-MD-02: 발주 단가, 도매가, 소비자가. 시계열 이력(적용일자 변경 시 이전 구간 보존).

CREATE TABLE IF NOT EXISTS `product_price` (
  `pp_idx`        INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '단가 PK',
  `pp_lg_idx`     INT UNSIGNED NOT NULL COMMENT '지자체 FK',
  `pp_pr_idx`     INT UNSIGNED NOT NULL COMMENT 'product FK',
  `pp_apply_from` DATE        NOT NULL COMMENT '적용 시작일',
  `pp_apply_to`   DATE        NULL     DEFAULT NULL COMMENT '적용 종료일(NULL=현재 유효)',
  `pp_purchase`   INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '발주 단가',
  `pp_wholesale`  INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '도매가',
  `pp_retail`     INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '소비자가',
  `pp_regdate`    DATETIME    NOT NULL COMMENT '등록일시',
  PRIMARY KEY (`pp_idx`),
  KEY `idx_pp_lg_idx` (`pp_lg_idx`),
  KEY `idx_pp_pr_idx` (`pp_pr_idx`),
  KEY `idx_pp_apply` (`pp_apply_from`, `pp_apply_to`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='품목별 단가(적용일자)';

3. packaging_unit (포장 단위)

F-MD-03: 박스당 팩 수, 팩당 낱장 수, 총 수량. 적용일자 이력 관리.

CREATE TABLE IF NOT EXISTS `packaging_unit` (
  `pu_idx`        INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '포장단위 PK',
  `pu_lg_idx`     INT UNSIGNED NOT NULL COMMENT '지자체 FK',
  `pu_pr_idx`     INT UNSIGNED NOT NULL COMMENT 'product FK',
  `pu_apply_from` DATE        NOT NULL COMMENT '적용 시작일',
  `pu_apply_to`   DATE        NULL     DEFAULT NULL COMMENT '적용 종료일',
  `pu_box_to_pack` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '박스당 팩 수',
  `pu_pack_to_sheet` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '팩당 낱장 수',
  `pu_total`      INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '총 수량(박스당 낱장)',
  `pu_regdate`    DATETIME    NOT NULL COMMENT '등록일시',
  PRIMARY KEY (`pu_idx`),
  KEY `idx_pu_lg_idx` (`pu_lg_idx`),
  KEY `idx_pu_pr_idx` (`pu_pr_idx`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='포장 단위';

4. purchase_order (발주)

지자체 → 제작업체 발주. 구/군·동 코드, 제작업체, 봉투 종류, 수량, LOT·버전·상태.

CREATE TABLE IF NOT EXISTS `purchase_order` (
  `po_idx`      INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '발주 PK',
  `po_lg_idx`   INT UNSIGNED NOT NULL COMMENT '지자체 FK',
  `po_uuid`     CHAR(36)     NOT NULL DEFAULT '' COMMENT '버전 관리용 UUID',
  `po_version`  INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '버전(수정 시 +1 insert)',
  `po_gugun_code` VARCHAR(20)  NOT NULL DEFAULT '' COMMENT '구/군 코드',
  `po_dong_code`  VARCHAR(20)  NOT NULL DEFAULT '' COMMENT '동 코드',
  `po_co_idx`   INT UNSIGNED NULL     DEFAULT NULL COMMENT '제작업체 company FK',
  `po_pr_idx`   INT UNSIGNED NOT NULL COMMENT '품목 FK',
  `po_unit_price` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '발주 단가',
  `po_box_qty`  INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '발주 박스 수량',
  `po_order_date` DATE       NOT NULL COMMENT '발주일',
  `po_mb_idx`   INT UNSIGNED NULL     DEFAULT NULL COMMENT '발주자 member FK',
  `po_state`    TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '1=정상, 2=취소, 0=삭제',
  `po_regdate`  DATETIME     NOT NULL COMMENT '등록일시',
  PRIMARY KEY (`po_idx`),
  KEY `idx_po_lg_idx` (`po_lg_idx`),
  KEY `idx_po_uuid_version` (`po_uuid`, `po_version`),
  KEY `idx_po_order_date` (`po_order_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='발주';

5. inbound_receipt (입고 내역)

노션 ERD InboundReceipt. LOT 번호·PDF417 바코드 연동. 발주(purchase_order) 단위 입고.

CREATE TABLE IF NOT EXISTS `inbound_receipt` (
  `ir_idx`         INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '입고 PK',
  `ir_lg_idx`      INT UNSIGNED NOT NULL COMMENT '지자체 FK',
  `ir_po_idx`      INT UNSIGNED NOT NULL COMMENT '발주 FK(LOT 단위)',
  `ir_pr_idx`      INT UNSIGNED NOT NULL COMMENT '품목 FK',
  `ir_lot_number`  VARCHAR(50)  NOT NULL DEFAULT '' COMMENT 'LOT 번호(PDF417 연동)',
  `ir_quantity`    INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '입고 수량',
  `ir_unit`        VARCHAR(10)  NOT NULL DEFAULT 'BOX' COMMENT 'BOX,PACK,SHEET',
  `ir_receipt_date` DATETIME    NOT NULL COMMENT '입고일시',
  `ir_mb_idx`      INT UNSIGNED NULL     DEFAULT NULL COMMENT '인수자 member FK',
  `ir_regdate`     DATETIME    NOT NULL COMMENT '등록일시',
  PRIMARY KEY (`ir_idx`),
  KEY `idx_ir_lg_idx` (`ir_lg_idx`),
  KEY `idx_ir_po_idx` (`ir_po_idx`),
  KEY `idx_ir_lot_number` (`ir_lot_number`),
  KEY `idx_ir_receipt_date` (`ir_receipt_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='입고 내역';

6. sales_order (판매소 주문)

노션 ERD SalesOrder. 지정판매소 주문, 결제상태. so_lg_idx = 데이터 격리용.

CREATE TABLE IF NOT EXISTS `sales_order` (
  `so_idx`           INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '주문 PK',
  `so_lg_idx`        INT UNSIGNED NOT NULL COMMENT '지자체 FK(데이터 격리)',
  `so_ds_idx`        INT UNSIGNED NOT NULL COMMENT '지정판매소 FK',
  `so_order_no`      VARCHAR(50)  NOT NULL DEFAULT '' COMMENT '접수/주문 번호',
  `so_order_date`    DATETIME     NOT NULL COMMENT '주문일시',
  `so_delivery_date` DATE         NULL     DEFAULT NULL COMMENT '배달일',
  `so_total_amount`  INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '총 금액',
  `so_payment_status` VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT '입금대기,완료,취소',
  `so_state`         TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '1=정상, 0=취소',
  `so_regdate`       DATETIME     NOT NULL COMMENT '등록일시',
  PRIMARY KEY (`so_idx`),
  KEY `idx_so_lg_idx` (`so_lg_idx`),
  KEY `idx_so_ds_idx` (`so_ds_idx`),
  KEY `idx_so_order_date` (`so_order_date`),
  KEY `idx_so_payment_status` (`so_payment_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='판매소 주문';
  • 주문 상세(품목·수량·금액)는 별도 sales_order_item 테이블로 확장 가능.

7. stock_transaction (수불)

노션 ERD StockTransaction. 입고(IN), 판매(OUT), 불출(FREE), 파기(DISCARD). reference로 주문/입고 연결.

CREATE TABLE IF NOT EXISTS `stock_transaction` (
  `st_idx`        INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '수불 PK',
  `st_lg_idx`     INT UNSIGNED NOT NULL COMMENT '지자체 FK',
  `st_pr_idx`     INT UNSIGNED NOT NULL COMMENT '품목 FK',
  `st_trans_type` VARCHAR(20)  NOT NULL DEFAULT '' COMMENT 'IN,OUT,FREE,DISCARD',
  `st_quantity`  INT NOT NULL DEFAULT 0 COMMENT '수량(+입고/-출고)',
  `st_ref_table` VARCHAR(30)  NOT NULL DEFAULT '' COMMENT '참조 테이블: inbound_receipt,sales_order 등',
  `st_ref_id`    INT UNSIGNED NULL     DEFAULT NULL COMMENT '참조 PK',
  `st_trans_date` DATETIME     NOT NULL COMMENT '수불 일시',
  `st_mb_idx`    INT UNSIGNED NULL     DEFAULT NULL COMMENT '처리자 member FK',
  `st_regdate`   DATETIME     NOT NULL COMMENT '등록일시',
  PRIMARY KEY (`st_idx`),
  KEY `idx_st_lg_idx` (`st_lg_idx`),
  KEY `idx_st_pr_idx` (`st_pr_idx`),
  KEY `idx_st_trans_type` (`st_trans_type`),
  KEY `idx_st_trans_date` (`st_trans_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='수불 내역';