-- ============================================================ -- 008_assets.sql — 방제자산 테이블 (기관 + 장비 + 담당자) -- ============================================================ SET search_path TO wing; -- ============================================================ -- 1. 기관/조직 마스터 -- ============================================================ CREATE TABLE IF NOT EXISTS ASSET_ORG ( ORG_SN SERIAL PRIMARY KEY, ORG_TP VARCHAR(30) NOT NULL, -- 유형: 해경관할, 해경경찰서, 파출소, 관련기관, 해양환경공단, 업체, 지자체, 기름저장시설, 정유사, 해군, 기타 JRSD_NM VARCHAR(50) NOT NULL, -- 관할청명: 중부지방해양경찰청, 서해지방해양경찰청 등 AREA_NM VARCHAR(30) NOT NULL, -- 지역명: 인천, 여수, 부산 등 ORG_NM VARCHAR(100) NOT NULL, -- 기관명 ADDR VARCHAR(300), -- 주소 TEL VARCHAR(30), -- 대표 전화 LAT NUMERIC(9,6), -- 위도 LNG NUMERIC(10,6), -- 경도 PIN_SIZE VARCHAR(5) DEFAULT 'md', -- 지도 핀 크기: hq, lg, md VESSEL_CNT SMALLINT DEFAULT 0, -- 방제선 수 SKIMMER_CNT SMALLINT DEFAULT 0, -- 유회수기 수 PUMP_CNT SMALLINT DEFAULT 0, -- 이송펌프 수 VEHICLE_CNT SMALLINT DEFAULT 0, -- 방제차량 수 SPRAYER_CNT SMALLINT DEFAULT 0, -- 살포장치 수 TOTAL_ASSETS SMALLINT DEFAULT 0, -- 총 자산 수 USE_YN CHAR(1) DEFAULT 'Y', REG_DTM TIMESTAMPTZ DEFAULT NOW(), MDFCN_DTM TIMESTAMPTZ, CONSTRAINT CK_ASSET_ORG_PIN CHECK (PIN_SIZE IN ('hq','lg','md')) ); -- ============================================================ -- 2. 장비 상세 -- ============================================================ CREATE TABLE IF NOT EXISTS ASSET_EQUIP ( EQUIP_SN SERIAL PRIMARY KEY, ORG_SN INTEGER NOT NULL REFERENCES ASSET_ORG(ORG_SN) ON DELETE CASCADE, CTGR_NM VARCHAR(50) NOT NULL, -- 장비 카테고리: 방제선, 유회수기, 비치크리너, ... ICON VARCHAR(10), -- 이모지 아이콘 QTY SMALLINT DEFAULT 0, -- 수량 SORT_ORD SMALLINT DEFAULT 0, UNIQUE(ORG_SN, CTGR_NM) ); -- ============================================================ -- 3. 담당자 -- ============================================================ CREATE TABLE IF NOT EXISTS ASSET_CONTACT ( CONTACT_SN SERIAL PRIMARY KEY, ORG_SN INTEGER NOT NULL REFERENCES ASSET_ORG(ORG_SN) ON DELETE CASCADE, ROLE_NM VARCHAR(50), -- 역할: 방제과장, 방제담당, 담당 등 CONTACT_NM VARCHAR(50), -- 이름 TEL VARCHAR(30), -- 전화번호 SORT_ORD SMALLINT DEFAULT 0 ); -- ============================================================ -- 4. 업로드 이력 -- ============================================================ CREATE TABLE IF NOT EXISTS ASSET_UPLOAD_LOG ( LOG_SN SERIAL PRIMARY KEY, FILE_NM VARCHAR(200) NOT NULL, -- 파일명 UPLOADER_NM VARCHAR(50), -- 업로더 이름/부서 UPLOAD_CNT INTEGER DEFAULT 0, -- 처리 건수 REG_DTM TIMESTAMPTZ DEFAULT NOW() ); -- ============================================================ -- 인덱스 -- ============================================================ CREATE INDEX IF NOT EXISTS IDX_ASSET_ORG_JRSD ON ASSET_ORG(JRSD_NM); CREATE INDEX IF NOT EXISTS IDX_ASSET_ORG_TP ON ASSET_ORG(ORG_TP); CREATE INDEX IF NOT EXISTS IDX_ASSET_EQUIP_ORG ON ASSET_EQUIP(ORG_SN); CREATE INDEX IF NOT EXISTS IDX_ASSET_CONTACT_ORG ON ASSET_CONTACT(ORG_SN); -- ============================================================ -- 초기 데이터: 업로드 이력 샘플 -- ============================================================ INSERT INTO ASSET_UPLOAD_LOG (FILE_NM, UPLOADER_NM, UPLOAD_CNT, REG_DTM) VALUES ('여수서_장비자재_2601.xlsx', '남해청_방제과', 45, '2026-01-25 14:30:00+09'), ('인천서_오일펜스현황.xlsx', '중부청_방제과', 12, '2026-01-22 10:15:00+09'), ('전체_방제정_현황.xlsx', '본청_방제과', 18, '2026-01-20 09:00:00+09');