-- ================================================================ -- WING 해양환경 위기대응 통합시스템 데이터베이스 -- 공공데이터베이스 표준화 관리 매뉴얼(2021.06) 기준 적용 -- PostgreSQL 16 + PostGIS 3.4 -- ================================================================ -- -- [표준화 적용 원칙] -- 1. 표준단어: 한글명 → 영문약어명 매핑 (별도 사전 참조) -- 2. 표준도메인: 분류명 + 데이터타입 + 길이 규칙 -- 3. 표준용어: 컬럼 물리명 = 영문약어명 조합 (언더스코어 구분, 30자 이내) -- 4. 저장형식: 날짜 YYYYMMDD(C8), 일시 TIMESTAMP, 여부 Y/N(C1) -- 5. 표준코드: 공통코드 테이블로 관리 -- -- ================================================================ -- 표준단어 사전 (WING 도메인) -- ================================================================ -- | 한글명 | 영문약어명 | 영문전체명 | -- |-------------|----------|----------------------| -- | 사고 | ACDNT | Accident | -- | 활성 | ACTV | Active | -- | 알고리즘 | ALGO | Algorithm | -- | 시작 | BGNG | Beginning | -- | 오일펜스 | BOOM | Boom | -- | 코드 | CD | Code | -- | 공통 | CMN | Common | -- | 완료 | CMPL | Completion | -- | 내용 | CN | Content | -- | 해안 | CST | Coast | -- | 설명 | DC | Description | -- | 배치 | DPLY | Deployment | -- | 일시 | DTM | DateTime | -- | 효율 | EFCNC | Efficiency | -- | 오류 | ERR | Error | -- | 실행 | EXEC | Execution | -- | 예측 | FCST | Forecast | -- | 지오메트리 | GEOM | Geometry | -- | 그룹 | GRP | Group | -- | 시간 | HR | Hour | -- | 아이디 | ID | Identifier | -- | 정보 | INFO | Information | -- | 길이 | LEN | Length | -- | 라인 | LINE | Line | -- | 위치 | LOC | Location | -- | 미터 | M | Meter | -- | 수정 | MDFCN | Modification | -- | 메시지 | MSG | Message | -- | 명 | NM | Name | -- | 번호 | NO | Number | -- | 발생 | OCCRN | Occurrence | -- | 유종 | OILTP | OilType | -- | 조직 | ORG | Organization | -- | 비밀번호 | PSWD | Password | -- | 퍼센트 | PCT | Percent | -- | 사진 | PHOTO | Photo | -- | 예측 | PRED | Prediction | -- | 우선순위 | PRIORT | Priority | -- | 양 | QTY | Quantity | -- | 등록 | REG | Registration | -- | 등록자 | RGTR | Registrant | -- | 직급 | RNKP | RankPosition | -- | 역할 | ROLE | Role | -- | 보고 | RPT | Report | -- | 책임 | RSPNS | Responsible | -- | 결과 | RSLT | Result | -- | SCAT | SCAT | SCAT | -- | 초 | SEC | Second | -- | 구간 | SECT | Section | -- | 순번 | SN | SequenceNumber | -- | 유출 | SPIL | Spill | -- | 조사 | SRVY | Survey | -- | 상태 | STTS | Status | -- | 심각도 | SVRT | Severity | -- | 촬영 | TAKNG | Taking | -- | 유형 | TP | Type | -- | 단위 | UNIT | Unit | -- | 상위 | UPPER | Upper | -- | 사용자 | USER | User | -- | 계정 | ACNT | Account | -- | 여부 | YN | YesNo | -- | 일자 | YMD | YearMonthDay | -- | 구역 | ZONE | Zone | -- | 민감도 | SNSTVT | Sensitivity | -- | 오염 | POLUT | Pollution | -- | 정렬 | SORT | Sort | -- | 순서 | ORD | Order | -- | 사용 | USE | Use | -- | 해시 | HASH | Hash | -- | 약칭 | ABBR | Abbreviation | -- | 데이터 | DATA | Data | -- | 소요 | REQD | Required | -- | 경로 | PATH | Path | -- | 파일 | FILE | File | -- | 비고 | RMK | Remark | -- | 관할 | JRSD | Jurisdiction | -- | 기관 | INST | Institution | -- | 위도 | LAT | Latitude | -- | 경도 | LON | Longitude | -- ================================================================ -- 표준도메인 정의 -- ================================================================ -- | 도메인명 | 데이터타입 | 설명 | -- |-----------------|-------------------|------------------------| -- | 순번N10 | SERIAL/INTEGER | 순차번호 10자리 | -- | 아이디V36 | UUID | UUID 식별자 36자리 | -- | 코드V10 | VARCHAR(10) | 코드 10자리 이내 | -- | 코드V20 | VARCHAR(20) | 코드 20자리 이내 | -- | 코드V50 | VARCHAR(50) | 코드 50자리 이내 | -- | 명칭V20 | VARCHAR(20) | 명칭 20자리 이내 | -- | 명칭V30 | VARCHAR(30) | 명칭 30자리 이내 | -- | 명칭V50 | VARCHAR(50) | 명칭 50자리 이내 | -- | 명칭V100 | VARCHAR(100) | 명칭 100자리 이내 | -- | 명칭V200 | VARCHAR(200) | 명칭 200자리 이내 | -- | 내용V255 | VARCHAR(255) | 내용 255자리 이내 | -- | 내용V500 | VARCHAR(500) | 내용 500자리 이내 | -- | 내용TEXT | TEXT | 대용량 텍스트 | -- | 수량N5,2 | NUMERIC(5,2) | 수량 소수점2자리 | -- | 수량N10 | INTEGER | 정수 수량 | -- | 수량N10,2 | NUMERIC(10,2) | 수량 소수점2자리 | -- | 수량N12,2 | NUMERIC(12,2) | 수량 소수점2자리 | -- | 여부C1 | CHAR(1) | Y/N 여부 | -- | 연월일C8 | CHAR(8) | YYYYMMDD | -- | 연월일시분초D | TIMESTAMPTZ | 타임스탬프(시간대포함) | -- | 경도N13,10 | NUMERIC(13,10) | 경도 소수점10자리 | -- | 위도N12,10 | NUMERIC(12,10) | 위도 소수점10자리 | -- | 지오메트리PNT | GEOMETRY(Point) | 포인트 공간정보 | -- | 지오메트리LINE | GEOMETRY(LineStr) | 라인 공간정보 | -- | JSON | JSONB | JSON 바이너리 | -- | 정렬순서N5 | INTEGER | 정렬순서 5자리 | -- ================================================================ -- ============================================================ -- 확장 설치 -- ============================================================ CREATE EXTENSION IF NOT EXISTS postgis; CREATE EXTENSION IF NOT EXISTS postgis_topology; CREATE EXTENSION IF NOT EXISTS pg_trgm; CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; -- ============================================================ -- 1. 공통코드 관리 -- ============================================================ -- 공통코드그룹 (CMN_CD_GRP) -- 시스템 전체에서 사용되는 코드를 그룹 단위로 관리 CREATE TABLE CMN_CD_GRP ( CMN_CD_GRP_ID VARCHAR(20) NOT NULL, -- 공통코드그룹아이디 CMN_CD_GRP_NM VARCHAR(100) NOT NULL, -- 공통코드그룹명 GRP_DC VARCHAR(500), -- 그룹설명 USE_YN CHAR(1) NOT NULL DEFAULT 'Y', -- 사용여부 REG_DTM TIMESTAMPTZ NOT NULL DEFAULT NOW(), -- 등록일시 CONSTRAINT PK_CMN_CD_GRP PRIMARY KEY (CMN_CD_GRP_ID), CONSTRAINT CK_CMN_CD_GRP_USE_YN CHECK (USE_YN IN ('Y','N')) ); COMMENT ON TABLE CMN_CD_GRP IS '공통코드그룹'; COMMENT ON COLUMN CMN_CD_GRP.CMN_CD_GRP_ID IS '공통코드그룹아이디'; COMMENT ON COLUMN CMN_CD_GRP.CMN_CD_GRP_NM IS '공통코드그룹명'; COMMENT ON COLUMN CMN_CD_GRP.GRP_DC IS '그룹설명'; COMMENT ON COLUMN CMN_CD_GRP.USE_YN IS '사용여부 (Y:사용, N:미사용)'; COMMENT ON COLUMN CMN_CD_GRP.REG_DTM IS '등록일시'; -- 공통코드 (CMN_CD) -- 각 그룹 내 개별 코드값을 관리 CREATE TABLE CMN_CD ( CMN_CD_GRP_ID VARCHAR(20) NOT NULL, -- 공통코드그룹아이디 CMN_CD VARCHAR(20) NOT NULL, -- 공통코드 CMN_CD_NM VARCHAR(100) NOT NULL, -- 공통코드명 CD_DC VARCHAR(500), -- 코드설명 SORT_ORD INTEGER DEFAULT 0, -- 정렬순서 USE_YN CHAR(1) NOT NULL DEFAULT 'Y', -- 사용여부 REG_DTM TIMESTAMPTZ NOT NULL DEFAULT NOW(), -- 등록일시 CONSTRAINT PK_CMN_CD PRIMARY KEY (CMN_CD_GRP_ID, CMN_CD), CONSTRAINT FK_CMN_CD_GRP FOREIGN KEY (CMN_CD_GRP_ID) REFERENCES CMN_CD_GRP(CMN_CD_GRP_ID), CONSTRAINT CK_CMN_CD_USE_YN CHECK (USE_YN IN ('Y','N')) ); COMMENT ON TABLE CMN_CD IS '공통코드'; COMMENT ON COLUMN CMN_CD.CMN_CD_GRP_ID IS '공통코드그룹아이디'; COMMENT ON COLUMN CMN_CD.CMN_CD IS '공통코드'; COMMENT ON COLUMN CMN_CD.CMN_CD_NM IS '공통코드명'; COMMENT ON COLUMN CMN_CD.CD_DC IS '코드설명'; COMMENT ON COLUMN CMN_CD.SORT_ORD IS '정렬순서'; COMMENT ON COLUMN CMN_CD.USE_YN IS '사용여부 (Y:사용, N:미사용)'; COMMENT ON COLUMN CMN_CD.REG_DTM IS '등록일시'; -- ============================================================ -- 2. 조직 (ORG) -- ============================================================ CREATE TABLE ORG ( ORG_SN SERIAL NOT NULL, -- 조직순번 ORG_NM VARCHAR(100) NOT NULL, -- 조직명 ORG_ABBR_NM VARCHAR(20) NOT NULL, -- 조직약칭명 ORG_TP_CD VARCHAR(20) NOT NULL, -- 조직유형코드 UPPER_ORG_SN INTEGER, -- 상위조직순번 REG_DTM TIMESTAMPTZ NOT NULL DEFAULT NOW(), -- 등록일시 CONSTRAINT PK_ORG PRIMARY KEY (ORG_SN), CONSTRAINT FK_ORG_UPPER FOREIGN KEY (UPPER_ORG_SN) REFERENCES ORG(ORG_SN) ); COMMENT ON TABLE ORG IS '조직'; COMMENT ON COLUMN ORG.ORG_SN IS '조직순번'; COMMENT ON COLUMN ORG.ORG_NM IS '조직명 (기관 전체 명칭)'; COMMENT ON COLUMN ORG.ORG_ABBR_NM IS '조직약칭명 (기관 약칭)'; COMMENT ON COLUMN ORG.ORG_TP_CD IS '조직유형코드 (ORG_TP: headquarters, regional, station, agency)'; COMMENT ON COLUMN ORG.UPPER_ORG_SN IS '상위조직순번 (상위 기관 참조)'; COMMENT ON COLUMN ORG.REG_DTM IS '등록일시'; -- ============================================================ -- 3. 사용자 (USER_INFO) -- ※ USER는 PostgreSQL 예약어이므로 USER_INFO 사용 -- ============================================================ CREATE TABLE USER_INFO ( USER_ID UUID NOT NULL DEFAULT uuid_generate_v4(), -- 사용자아이디 USER_ACNT VARCHAR(50) NOT NULL, -- 사용자계정 PSWD_HASH VARCHAR(255) NOT NULL, -- 비밀번호해시 USER_NM VARCHAR(50) NOT NULL, -- 사용자명 RNKP_NM VARCHAR(30), -- 직급명 ORG_SN INTEGER, -- 조직순번 ROLE_CD VARCHAR(20) NOT NULL DEFAULT 'USER', -- 역할코드 ACTV_YN CHAR(1) NOT NULL DEFAULT 'Y', -- 활성여부 REG_DTM TIMESTAMPTZ NOT NULL DEFAULT NOW(), -- 등록일시 CONSTRAINT PK_USER_INFO PRIMARY KEY (USER_ID), CONSTRAINT UK_USER_ACNT UNIQUE (USER_ACNT), CONSTRAINT FK_USER_ORG FOREIGN KEY (ORG_SN) REFERENCES ORG(ORG_SN), CONSTRAINT CK_USER_ROLE_CD CHECK (ROLE_CD IN ('ADMIN','MANAGER','USER')), CONSTRAINT CK_USER_ACTV_YN CHECK (ACTV_YN IN ('Y','N')) ); COMMENT ON TABLE USER_INFO IS '사용자정보'; COMMENT ON COLUMN USER_INFO.USER_ID IS '사용자아이디 (UUID)'; COMMENT ON COLUMN USER_INFO.USER_ACNT IS '사용자계정 (로그인 ID)'; COMMENT ON COLUMN USER_INFO.PSWD_HASH IS '비밀번호해시 (bcrypt 해시값)'; COMMENT ON COLUMN USER_INFO.USER_NM IS '사용자명'; COMMENT ON COLUMN USER_INFO.RNKP_NM IS '직급명'; COMMENT ON COLUMN USER_INFO.ORG_SN IS '조직순번 (소속 조직)'; COMMENT ON COLUMN USER_INFO.ROLE_CD IS '역할코드 (ADMIN, MANAGER, USER)'; COMMENT ON COLUMN USER_INFO.ACTV_YN IS '활성여부 (Y:활성, N:비활성)'; COMMENT ON COLUMN USER_INFO.REG_DTM IS '등록일시'; -- ============================================================ -- 4. 사고 (ACDNT) -- ============================================================ CREATE TABLE ACDNT ( ACDNT_SN SERIAL NOT NULL, -- 사고순번 ACDNT_CD VARCHAR(20) NOT NULL, -- 사고코드 ACDNT_NM VARCHAR(200) NOT NULL, -- 사고명 ACDNT_TP_CD VARCHAR(50) NOT NULL, -- 사고유형코드 ACDNT_STTS_CD VARCHAR(20) NOT NULL DEFAULT 'ACTIVE', -- 사고상태코드 LOC_GEOM GEOMETRY(Point, 4326) NOT NULL, -- 위치지오메트리 LOC_DC VARCHAR(200), -- 위치설명 OCCRN_DTM TIMESTAMPTZ NOT NULL, -- 발생일시 RPT_DTM TIMESTAMPTZ, -- 보고일시 RSPNS_ORG_SN INTEGER, -- 책임조직순번 SVRT_CD VARCHAR(10), -- 심각도코드 RGTR_ID UUID, -- 등록자아이디 REG_DTM TIMESTAMPTZ NOT NULL DEFAULT NOW(), -- 등록일시 MDFCN_DTM TIMESTAMPTZ NOT NULL DEFAULT NOW(), -- 수정일시 CONSTRAINT PK_ACDNT PRIMARY KEY (ACDNT_SN), CONSTRAINT UK_ACDNT_CD UNIQUE (ACDNT_CD), CONSTRAINT FK_ACDNT_ORG FOREIGN KEY (RSPNS_ORG_SN) REFERENCES ORG(ORG_SN), CONSTRAINT FK_ACDNT_RGTR FOREIGN KEY (RGTR_ID) REFERENCES USER_INFO(USER_ID), CONSTRAINT CK_ACDNT_STTS CHECK (ACDNT_STTS_CD IN ('ACTIVE','MONITORING','CLOSED')), CONSTRAINT CK_ACDNT_SVRT CHECK (SVRT_CD IN ('DANGER','ALERT','CAUTION','INTEREST')) ); COMMENT ON TABLE ACDNT IS '사고'; COMMENT ON COLUMN ACDNT.ACDNT_SN IS '사고순번'; COMMENT ON COLUMN ACDNT.ACDNT_CD IS '사고코드 (예: INC-2025-0042)'; COMMENT ON COLUMN ACDNT.ACDNT_NM IS '사고명'; COMMENT ON COLUMN ACDNT.ACDNT_TP_CD IS '사고유형코드 (ACDNT_TP: 유조선충돌, 좌초 등)'; COMMENT ON COLUMN ACDNT.ACDNT_STTS_CD IS '사고상태코드 (ACTIVE:진행, MONITORING:감시, CLOSED:종료)'; COMMENT ON COLUMN ACDNT.LOC_GEOM IS '위치지오메트리 (EPSG:4326 Point)'; COMMENT ON COLUMN ACDNT.LOC_DC IS '위치설명 (텍스트 위치 표기)'; COMMENT ON COLUMN ACDNT.OCCRN_DTM IS '발생일시'; COMMENT ON COLUMN ACDNT.RPT_DTM IS '보고일시'; COMMENT ON COLUMN ACDNT.RSPNS_ORG_SN IS '책임조직순번 (담당 기관)'; COMMENT ON COLUMN ACDNT.SVRT_CD IS '심각도코드 (DANGER:위험, ALERT:경계, CAUTION:주의, INTEREST:관심)'; COMMENT ON COLUMN ACDNT.RGTR_ID IS '등록자아이디'; COMMENT ON COLUMN ACDNT.REG_DTM IS '등록일시'; COMMENT ON COLUMN ACDNT.MDFCN_DTM IS '수정일시'; -- ============================================================ -- 5. 유출정보 (SPIL_DATA) -- ============================================================ CREATE TABLE SPIL_DATA ( SPIL_DATA_SN SERIAL NOT NULL, -- 유출정보순번 ACDNT_SN INTEGER NOT NULL, -- 사고순번 OIL_TP_CD VARCHAR(50) NOT NULL, -- 유종코드 SPIL_QTY NUMERIC(12,2), -- 유출량 SPIL_UNIT_CD VARCHAR(10) DEFAULT 'KL', -- 유출단위코드 SPIL_TP_CD VARCHAR(20), -- 유출유형코드 SPIL_LOC_GEOM GEOMETRY(Point, 4326), -- 유출위치지오메트리 FCST_HR INTEGER, -- 예측시간 REG_DTM TIMESTAMPTZ NOT NULL DEFAULT NOW(), -- 등록일시 CONSTRAINT PK_SPIL_DATA PRIMARY KEY (SPIL_DATA_SN), CONSTRAINT FK_SPIL_ACDNT FOREIGN KEY (ACDNT_SN) REFERENCES ACDNT(ACDNT_SN) ON DELETE CASCADE ); COMMENT ON TABLE SPIL_DATA IS '유출정보'; COMMENT ON COLUMN SPIL_DATA.SPIL_DATA_SN IS '유출정보순번'; COMMENT ON COLUMN SPIL_DATA.ACDNT_SN IS '사고순번 (사고 참조)'; COMMENT ON COLUMN SPIL_DATA.OIL_TP_CD IS '유종코드 (OIL_TP: 벙커C유, 경유, 원유 등)'; COMMENT ON COLUMN SPIL_DATA.SPIL_QTY IS '유출량'; COMMENT ON COLUMN SPIL_DATA.SPIL_UNIT_CD IS '유출단위코드 (KL:킬로리터, L:리터, BBL:배럴)'; COMMENT ON COLUMN SPIL_DATA.SPIL_TP_CD IS '유출유형코드 (SPIL_TP: 연속유출, 순간유출 등)'; COMMENT ON COLUMN SPIL_DATA.SPIL_LOC_GEOM IS '유출위치지오메트리 (EPSG:4326 Point)'; COMMENT ON COLUMN SPIL_DATA.FCST_HR IS '예측시간 (시간 단위)'; COMMENT ON COLUMN SPIL_DATA.REG_DTM IS '등록일시'; -- ============================================================ -- 6. 예측실행 (PRED_EXEC) -- ============================================================ CREATE TABLE PRED_EXEC ( PRED_EXEC_SN SERIAL NOT NULL, -- 예측실행순번 SPIL_DATA_SN INTEGER, -- 유출정보순번 (NULL 허용 — 사고 미연결 단독 실행 대응) ACDNT_SN INTEGER NOT NULL, -- 사고순번 (사고 참조, 유출정보 미연결 시에도 사고는 필수) ALGO_CD VARCHAR(20) NOT NULL, -- 알고리즘코드 EXEC_STTS_CD VARCHAR(20) NOT NULL DEFAULT 'PENDING', -- 실행상태코드 BGNG_DTM TIMESTAMPTZ, -- 시작일시 CMPL_DTM TIMESTAMPTZ, -- 완료일시 REQD_SEC INTEGER, -- 소요시간초 RSLT_DATA JSONB, -- 결과데이터 ERR_MSG TEXT, -- 오류메시지 EXEC_NM VARCHAR(100), -- 실행명 CONSTRAINT PK_PRED_EXEC PRIMARY KEY (PRED_EXEC_SN), CONSTRAINT FK_PRED_SPIL FOREIGN KEY (SPIL_DATA_SN) REFERENCES SPIL_DATA(SPIL_DATA_SN) ON DELETE CASCADE, CONSTRAINT CK_PRED_STTS CHECK (EXEC_STTS_CD IN ('PENDING','RUNNING','COMPLETED','FAILED')) ); COMMENT ON TABLE PRED_EXEC IS '예측실행'; COMMENT ON COLUMN PRED_EXEC.PRED_EXEC_SN IS '예측실행순번'; COMMENT ON COLUMN PRED_EXEC.SPIL_DATA_SN IS '유출정보순번 (FK → SPIL_DATA, NULL 허용)'; COMMENT ON COLUMN PRED_EXEC.ACDNT_SN IS '사고순번 (사고 참조)'; COMMENT ON COLUMN PRED_EXEC.ALGO_CD IS '알고리즘코드 (ALGO: GNOME, OSCAR, OPENDRIFT 등)'; COMMENT ON COLUMN PRED_EXEC.EXEC_STTS_CD IS '실행상태코드 (PENDING:대기, RUNNING:실행중, COMPLETED:완료, FAILED:실패)'; COMMENT ON COLUMN PRED_EXEC.BGNG_DTM IS '시작일시'; COMMENT ON COLUMN PRED_EXEC.CMPL_DTM IS '완료일시'; COMMENT ON COLUMN PRED_EXEC.REQD_SEC IS '소요시간초 (실행 소요 시간, 초 단위)'; COMMENT ON COLUMN PRED_EXEC.RSLT_DATA IS '결과데이터 (JSON 형식 예측 결과)'; COMMENT ON COLUMN PRED_EXEC.ERR_MSG IS '오류메시지'; COMMENT ON COLUMN PRED_EXEC.EXEC_NM IS '실행명 (EXPC_{timestamp} 형식, OpenDrift 연동용)'; -- ============================================================ -- 7. 오일펜스배치 (BOOM_LINE) -- ============================================================ CREATE TABLE BOOM_LINE ( BOOM_SN SERIAL NOT NULL, -- 오일펜스순번 ACDNT_SN INTEGER NOT NULL, -- 사고순번 BOOM_NM VARCHAR(100) NOT NULL, -- 오일펜스명 PRIORT_CD VARCHAR(20), -- 우선순위코드 LEN_M NUMERIC(10,2), -- 길이미터 LINE_GEOM GEOMETRY(LineString, 4326), -- 라인지오메트리 DPLY_STTS_CD VARCHAR(20) NOT NULL DEFAULT 'PLANNED', -- 배치상태코드 EFCNC_PCT NUMERIC(5,2), -- 효율퍼센트 REG_DTM TIMESTAMPTZ NOT NULL DEFAULT NOW(), -- 등록일시 MDFCN_DTM TIMESTAMPTZ NOT NULL DEFAULT NOW(), -- 수정일시 CONSTRAINT PK_BOOM_LINE PRIMARY KEY (BOOM_SN), CONSTRAINT FK_BOOM_ACDNT FOREIGN KEY (ACDNT_SN) REFERENCES ACDNT(ACDNT_SN) ON DELETE CASCADE, CONSTRAINT CK_BOOM_PRIORT CHECK (PRIORT_CD IN ('CRITICAL','HIGH','MEDIUM','LOW')), CONSTRAINT CK_BOOM_STTS CHECK (DPLY_STTS_CD IN ('PLANNED','DEPLOYING','DEPLOYED','REMOVED')) ); COMMENT ON TABLE BOOM_LINE IS '오일펜스배치'; COMMENT ON COLUMN BOOM_LINE.BOOM_SN IS '오일펜스순번'; COMMENT ON COLUMN BOOM_LINE.ACDNT_SN IS '사고순번 (사고 참조)'; COMMENT ON COLUMN BOOM_LINE.BOOM_NM IS '오일펜스명'; COMMENT ON COLUMN BOOM_LINE.PRIORT_CD IS '우선순위코드 (CRITICAL:긴급, HIGH:높음, MEDIUM:보통, LOW:낮음)'; COMMENT ON COLUMN BOOM_LINE.LEN_M IS '길이미터 (오일펜스 총 길이, 미터)'; COMMENT ON COLUMN BOOM_LINE.LINE_GEOM IS '라인지오메트리 (EPSG:4326 LineString)'; COMMENT ON COLUMN BOOM_LINE.DPLY_STTS_CD IS '배치상태코드 (PLANNED:계획, DEPLOYING:배치중, DEPLOYED:배치완료, REMOVED:회수)'; COMMENT ON COLUMN BOOM_LINE.EFCNC_PCT IS '효율퍼센트 (방제 효율, %)'; COMMENT ON COLUMN BOOM_LINE.REG_DTM IS '등록일시'; COMMENT ON COLUMN BOOM_LINE.MDFCN_DTM IS '수정일시'; -- ============================================================ -- 8. 해안조사구역 (CST_SRVY_ZONE) -- ============================================================ CREATE TABLE CST_SRVY_ZONE ( CST_SRVY_ZONE_SN SERIAL NOT NULL, -- 해안조사구역순번 ZONE_CD VARCHAR(20) NOT NULL, -- 구역코드 ZONE_NM VARCHAR(100) NOT NULL, -- 구역명 JRSD_ORG_SN INTEGER, -- 관할조직순번 ZONE_DC VARCHAR(500), -- 구역설명 REG_DTM TIMESTAMPTZ NOT NULL DEFAULT NOW(), -- 등록일시 CONSTRAINT PK_CST_SRVY_ZONE PRIMARY KEY (CST_SRVY_ZONE_SN), CONSTRAINT UK_ZONE_CD UNIQUE (ZONE_CD), CONSTRAINT FK_ZONE_ORG FOREIGN KEY (JRSD_ORG_SN) REFERENCES ORG(ORG_SN) ); COMMENT ON TABLE CST_SRVY_ZONE IS '해안조사구역'; COMMENT ON COLUMN CST_SRVY_ZONE.CST_SRVY_ZONE_SN IS '해안조사구역순번'; COMMENT ON COLUMN CST_SRVY_ZONE.ZONE_CD IS '구역코드 (예: JJAW, JJAN 등)'; COMMENT ON COLUMN CST_SRVY_ZONE.ZONE_NM IS '구역명 (예: 제주시 서부, 서귀포시 동부 등)'; COMMENT ON COLUMN CST_SRVY_ZONE.JRSD_ORG_SN IS '관할조직순번 (관할 해경 기관)'; COMMENT ON COLUMN CST_SRVY_ZONE.ZONE_DC IS '구역설명'; COMMENT ON COLUMN CST_SRVY_ZONE.REG_DTM IS '등록일시'; -- ============================================================ -- 9. 해안구간 (CST_SECT) -- ============================================================ CREATE TABLE CST_SECT ( CST_SECT_SN SERIAL NOT NULL, -- 해안구간순번 CST_SRVY_ZONE_SN INTEGER NOT NULL, -- 해안조사구역순번 SECT_CD VARCHAR(20) NOT NULL, -- 구간코드 SECT_NM VARCHAR(100), -- 구간명 CST_TP_CD VARCHAR(20), -- 해안유형코드 LEN_M NUMERIC(10,2), -- 길이미터 SNSTVT_CD VARCHAR(10), -- 민감도코드 SRVY_STTS_CD VARCHAR(20) DEFAULT 'PENDING', -- 조사상태코드 BGNG_LAT NUMERIC(12,10), -- 시작위도 BGNG_LON NUMERIC(13,10), -- 시작경도 END_LAT NUMERIC(12,10), -- 종료위도 END_LON NUMERIC(13,10), -- 종료경도 BGNG_LOC_GEOM GEOMETRY(Point, 4326), -- 시작위치지오메트리 END_LOC_GEOM GEOMETRY(Point, 4326), -- 종료위치지오메트리 REG_DTM TIMESTAMPTZ NOT NULL DEFAULT NOW(), -- 등록일시 MDFCN_DTM TIMESTAMPTZ NOT NULL DEFAULT NOW(), -- 수정일시 CONSTRAINT PK_CST_SECT PRIMARY KEY (CST_SECT_SN), CONSTRAINT UK_SECT_CD UNIQUE (SECT_CD), CONSTRAINT FK_SECT_ZONE FOREIGN KEY (CST_SRVY_ZONE_SN) REFERENCES CST_SRVY_ZONE(CST_SRVY_ZONE_SN) ); COMMENT ON TABLE CST_SECT IS '해안구간'; COMMENT ON COLUMN CST_SECT.CST_SECT_SN IS '해안구간순번'; COMMENT ON COLUMN CST_SECT.CST_SRVY_ZONE_SN IS '해안조사구역순번 (구역 참조)'; COMMENT ON COLUMN CST_SECT.SECT_CD IS '구간코드 (예: JJAW-1, JJAW-2 등)'; COMMENT ON COLUMN CST_SECT.SECT_NM IS '구간명'; COMMENT ON COLUMN CST_SECT.CST_TP_CD IS '해안유형코드 (CST_TP: 암반, 자갈, 모래, 혼합 등)'; COMMENT ON COLUMN CST_SECT.LEN_M IS '길이미터 (해안구간 길이, 미터)'; COMMENT ON COLUMN CST_SECT.SNSTVT_CD IS '민감도코드 (SNSTVT: HIGH, MEDIUM, LOW)'; COMMENT ON COLUMN CST_SECT.SRVY_STTS_CD IS '조사상태코드 (PENDING:미조사, PROGRESS:진행중, COMPLETED:완료)'; COMMENT ON COLUMN CST_SECT.BGNG_LAT IS '시작위도'; COMMENT ON COLUMN CST_SECT.BGNG_LON IS '시작경도'; COMMENT ON COLUMN CST_SECT.END_LAT IS '종료위도'; COMMENT ON COLUMN CST_SECT.END_LON IS '종료경도'; COMMENT ON COLUMN CST_SECT.BGNG_LOC_GEOM IS '시작위치지오메트리 (EPSG:4326 Point)'; COMMENT ON COLUMN CST_SECT.END_LOC_GEOM IS '종료위치지오메트리 (EPSG:4326 Point)'; COMMENT ON COLUMN CST_SECT.REG_DTM IS '등록일시'; COMMENT ON COLUMN CST_SECT.MDFCN_DTM IS '수정일시'; -- ============================================================ -- 10. SCAT조사 (SCAT_SRVY) -- ============================================================ CREATE TABLE SCAT_SRVY ( SCAT_SRVY_SN SERIAL NOT NULL, -- SCAT조사순번 CST_SECT_SN INTEGER NOT NULL, -- 해안구간순번 ACDNT_SN INTEGER, -- 사고순번 SRVY_YMD CHAR(8), -- 조사일자 (YYYYMMDD) SRVY_TP_CD VARCHAR(20), -- 조사유형코드 SRVY_PHASE_CD VARCHAR(20), -- 조사단계코드 POLUT_CD VARCHAR(20), -- 오염도코드 SRVYR_ID UUID, -- 조사자아이디 RMK VARCHAR(500), -- 비고 REG_DTM TIMESTAMPTZ NOT NULL DEFAULT NOW(), -- 등록일시 CONSTRAINT PK_SCAT_SRVY PRIMARY KEY (SCAT_SRVY_SN), CONSTRAINT FK_SCAT_SECT FOREIGN KEY (CST_SECT_SN) REFERENCES CST_SECT(CST_SECT_SN), CONSTRAINT FK_SCAT_ACDNT FOREIGN KEY (ACDNT_SN) REFERENCES ACDNT(ACDNT_SN), CONSTRAINT FK_SCAT_SRVYR FOREIGN KEY (SRVYR_ID) REFERENCES USER_INFO(USER_ID) ); COMMENT ON TABLE SCAT_SRVY IS 'SCAT조사'; COMMENT ON COLUMN SCAT_SRVY.SCAT_SRVY_SN IS 'SCAT조사순번'; COMMENT ON COLUMN SCAT_SRVY.CST_SECT_SN IS '해안구간순번 (해안구간 참조)'; COMMENT ON COLUMN SCAT_SRVY.ACDNT_SN IS '사고순번 (관련 사고 참조)'; COMMENT ON COLUMN SCAT_SRVY.SRVY_YMD IS '조사일자 (YYYYMMDD 저장형식)'; COMMENT ON COLUMN SCAT_SRVY.SRVY_TP_CD IS '조사유형코드 (SRVY_TP: Pre-SCAT, SCAT, Post-SCAT)'; COMMENT ON COLUMN SCAT_SRVY.SRVY_PHASE_CD IS '조사단계코드 (SRVY_PHASE: 1차, 2차, 3차 등)'; COMMENT ON COLUMN SCAT_SRVY.POLUT_CD IS '오염도코드 (POLUT: HEAVY, MODERATE, LIGHT, CLEAN)'; COMMENT ON COLUMN SCAT_SRVY.SRVYR_ID IS '조사자아이디'; COMMENT ON COLUMN SCAT_SRVY.RMK IS '비고'; COMMENT ON COLUMN SCAT_SRVY.REG_DTM IS '등록일시'; -- ============================================================ -- 11. SCAT조사사진 (SCAT_SRVY_PHOTO) -- ============================================================ CREATE TABLE SCAT_SRVY_PHOTO ( SCAT_PHOTO_SN SERIAL NOT NULL, -- SCAT조사사진순번 SCAT_SRVY_SN INTEGER NOT NULL, -- SCAT조사순번 PHOTO_FILE_PATH VARCHAR(500) NOT NULL, -- 사진파일경로 PHOTO_DC VARCHAR(200), -- 사진설명 TAKNG_DTM TIMESTAMPTZ, -- 촬영일시 SORT_ORD INTEGER DEFAULT 0, -- 정렬순서 REG_DTM TIMESTAMPTZ NOT NULL DEFAULT NOW(), -- 등록일시 CONSTRAINT PK_SCAT_PHOTO PRIMARY KEY (SCAT_PHOTO_SN), CONSTRAINT FK_PHOTO_SRVY FOREIGN KEY (SCAT_SRVY_SN) REFERENCES SCAT_SRVY(SCAT_SRVY_SN) ON DELETE CASCADE ); COMMENT ON TABLE SCAT_SRVY_PHOTO IS 'SCAT조사사진'; COMMENT ON COLUMN SCAT_SRVY_PHOTO.SCAT_PHOTO_SN IS 'SCAT조사사진순번'; COMMENT ON COLUMN SCAT_SRVY_PHOTO.SCAT_SRVY_SN IS 'SCAT조사순번 (SCAT조사 참조)'; COMMENT ON COLUMN SCAT_SRVY_PHOTO.PHOTO_FILE_PATH IS '사진파일경로'; COMMENT ON COLUMN SCAT_SRVY_PHOTO.PHOTO_DC IS '사진설명'; COMMENT ON COLUMN SCAT_SRVY_PHOTO.TAKNG_DTM IS '촬영일시'; COMMENT ON COLUMN SCAT_SRVY_PHOTO.SORT_ORD IS '정렬순서'; COMMENT ON COLUMN SCAT_SRVY_PHOTO.REG_DTM IS '등록일시'; -- ============================================================ -- 12. HNS물질정보 (HNS_SBST) -- ============================================================ CREATE TABLE HNS_SBST ( HNS_SBST_SN SERIAL NOT NULL, -- HNS물질순번 SBST_NM VARCHAR(200) NOT NULL, -- 물질명 SBST_ENG_NM VARCHAR(200), -- 물질영문명 CAS_NO VARCHAR(20), -- CAS번호 UN_NO VARCHAR(10), -- UN번호 RISK_GRD_CD VARCHAR(10), -- 위험등급코드 PHYS_STATE_CD VARCHAR(20), -- 물리상태코드 DNST NUMERIC(10,4), -- 밀도 VAPOR_PRSR NUMERIC(12,4), -- 증기압 WATER_SLBLT_CD VARCHAR(20), -- 수용성코드 TOXICITY_CD VARCHAR(20), -- 독성코드 SBST_DC TEXT, -- 물질설명 REG_DTM TIMESTAMPTZ NOT NULL DEFAULT NOW(), -- 등록일시 CONSTRAINT PK_HNS_SBST PRIMARY KEY (HNS_SBST_SN) ); COMMENT ON TABLE HNS_SBST IS 'HNS물질정보'; COMMENT ON COLUMN HNS_SBST.HNS_SBST_SN IS 'HNS물질순번'; COMMENT ON COLUMN HNS_SBST.SBST_NM IS '물질명 (한글명)'; COMMENT ON COLUMN HNS_SBST.SBST_ENG_NM IS '물질영문명'; COMMENT ON COLUMN HNS_SBST.CAS_NO IS 'CAS번호 (화학물질등록번호)'; COMMENT ON COLUMN HNS_SBST.UN_NO IS 'UN번호 (위험물 식별번호)'; COMMENT ON COLUMN HNS_SBST.RISK_GRD_CD IS '위험등급코드'; COMMENT ON COLUMN HNS_SBST.PHYS_STATE_CD IS '물리상태코드 (SOLID, LIQUID, GAS)'; COMMENT ON COLUMN HNS_SBST.DNST IS '밀도 (g/cm³)'; COMMENT ON COLUMN HNS_SBST.VAPOR_PRSR IS '증기압 (mmHg)'; COMMENT ON COLUMN HNS_SBST.WATER_SLBLT_CD IS '수용성코드 (SOLUBLE, PARTIAL, INSOLUBLE)'; COMMENT ON COLUMN HNS_SBST.TOXICITY_CD IS '독성코드 (HIGH, MEDIUM, LOW)'; COMMENT ON COLUMN HNS_SBST.SBST_DC IS '물질설명'; COMMENT ON COLUMN HNS_SBST.REG_DTM IS '등록일시'; -- ============================================================ -- 13. 인덱스 -- ============================================================ -- 공간 인덱스 (GIST) CREATE INDEX IDX_ACDNT_LOC_GEOM ON ACDNT USING GIST(LOC_GEOM); CREATE INDEX IDX_SPIL_LOC_GEOM ON SPIL_DATA USING GIST(SPIL_LOC_GEOM); CREATE INDEX IDX_BOOM_LINE_GEOM ON BOOM_LINE USING GIST(LINE_GEOM); CREATE INDEX IDX_SECT_BGNG_GEOM ON CST_SECT USING GIST(BGNG_LOC_GEOM); CREATE INDEX IDX_SECT_END_GEOM ON CST_SECT USING GIST(END_LOC_GEOM); -- 상태 코드 인덱스 CREATE INDEX IDX_ACDNT_STTS ON ACDNT (ACDNT_STTS_CD); CREATE INDEX IDX_PRED_STTS ON PRED_EXEC (EXEC_STTS_CD); CREATE INDEX IDX_BOOM_STTS ON BOOM_LINE (DPLY_STTS_CD); CREATE INDEX IDX_SECT_SRVY_STTS ON CST_SECT (SRVY_STTS_CD); -- 외래키 인덱스 CREATE INDEX IDX_USER_ORG_SN ON USER_INFO (ORG_SN); CREATE INDEX IDX_ACDNT_RSPNS_ORG ON ACDNT (RSPNS_ORG_SN); CREATE INDEX IDX_SPIL_ACDNT_SN ON SPIL_DATA (ACDNT_SN); CREATE INDEX IDX_PRED_SPIL_SN ON PRED_EXEC (SPIL_DATA_SN); CREATE INDEX IDX_BOOM_ACDNT_SN ON BOOM_LINE (ACDNT_SN); CREATE INDEX IDX_SECT_ZONE_SN ON CST_SECT (CST_SRVY_ZONE_SN); CREATE INDEX IDX_SCAT_SECT_SN ON SCAT_SRVY (CST_SECT_SN); CREATE INDEX IDX_SCAT_ACDNT_SN ON SCAT_SRVY (ACDNT_SN); CREATE INDEX IDX_PHOTO_SRVY_SN ON SCAT_SRVY_PHOTO (SCAT_SRVY_SN); -- 코드 테이블 인덱스 CREATE INDEX IDX_CMN_CD_GRP_USE ON CMN_CD_GRP (USE_YN); CREATE INDEX IDX_CMN_CD_USE ON CMN_CD (USE_YN); -- 텍스트 검색 인덱스 CREATE INDEX IDX_ACDNT_NM_TRGM ON ACDNT USING GIN(ACDNT_NM gin_trgm_ops); CREATE INDEX IDX_HNS_SBST_NM_TRGM ON HNS_SBST USING GIN(SBST_NM gin_trgm_ops); -- ============================================================ -- 14. 공통코드 데이터 -- ============================================================ -- 조직유형 (ORG_TP) INSERT INTO CMN_CD_GRP (CMN_CD_GRP_ID, CMN_CD_GRP_NM, GRP_DC) VALUES ('ORG_TP', '조직유형', '조직의 유형을 구분하는 코드'); INSERT INTO CMN_CD (CMN_CD_GRP_ID, CMN_CD, CMN_CD_NM, SORT_ORD) VALUES ('ORG_TP', 'HEADQUARTERS', '본청', 1), ('ORG_TP', 'REGIONAL', '지방청', 2), ('ORG_TP', 'STATION', '해양경찰서', 3), ('ORG_TP', 'AGENCY', '유관기관', 4); -- 사용자역할 (USER_ROLE) INSERT INTO CMN_CD_GRP (CMN_CD_GRP_ID, CMN_CD_GRP_NM, GRP_DC) VALUES ('USER_ROLE', '사용자역할', '사용자의 시스템 역할을 구분하는 코드'); INSERT INTO CMN_CD (CMN_CD_GRP_ID, CMN_CD, CMN_CD_NM, SORT_ORD) VALUES ('USER_ROLE', 'ADMIN', '관리자', 1), ('USER_ROLE', 'MANAGER', '운영자', 2), ('USER_ROLE', 'USER', '일반사용자', 3); -- 사고유형 (ACDNT_TP) INSERT INTO CMN_CD_GRP (CMN_CD_GRP_ID, CMN_CD_GRP_NM, GRP_DC) VALUES ('ACDNT_TP', '사고유형', '해양사고의 유형을 구분하는 코드'); INSERT INTO CMN_CD (CMN_CD_GRP_ID, CMN_CD, CMN_CD_NM, SORT_ORD) VALUES ('ACDNT_TP', 'COLLISION', '충돌', 1), ('ACDNT_TP', 'GROUNDING', '좌초', 2), ('ACDNT_TP', 'SINKING', '침몰', 3), ('ACDNT_TP', 'LEAK', '누출', 4), ('ACDNT_TP', 'EXPLOSION', '폭발', 5), ('ACDNT_TP', 'ETC', '기타', 99); -- 사고상태 (ACDNT_STTS) INSERT INTO CMN_CD_GRP (CMN_CD_GRP_ID, CMN_CD_GRP_NM, GRP_DC) VALUES ('ACDNT_STTS', '사고상태', '사고의 진행 상태를 구분하는 코드'); INSERT INTO CMN_CD (CMN_CD_GRP_ID, CMN_CD, CMN_CD_NM, SORT_ORD) VALUES ('ACDNT_STTS', 'ACTIVE', '진행중', 1), ('ACDNT_STTS', 'MONITORING', '감시중', 2), ('ACDNT_STTS', 'CLOSED', '종료', 3); -- 심각도 (SVRT) INSERT INTO CMN_CD_GRP (CMN_CD_GRP_ID, CMN_CD_GRP_NM, GRP_DC) VALUES ('SVRT', '심각도', '사고의 심각도를 구분하는 코드'); INSERT INTO CMN_CD (CMN_CD_GRP_ID, CMN_CD, CMN_CD_NM, SORT_ORD) VALUES ('SVRT', 'DANGER', '위험', 1), ('SVRT', 'ALERT', '경계', 2), ('SVRT', 'CAUTION', '주의', 3), ('SVRT', 'INTEREST', '관심', 4); -- 유종 (OIL_TP) INSERT INTO CMN_CD_GRP (CMN_CD_GRP_ID, CMN_CD_GRP_NM, GRP_DC) VALUES ('OIL_TP', '유종', '유출유의 종류를 구분하는 코드'); INSERT INTO CMN_CD (CMN_CD_GRP_ID, CMN_CD, CMN_CD_NM, SORT_ORD) VALUES ('OIL_TP', 'CRUDE', '원유', 1), ('OIL_TP', 'BUNKER_C', '벙커C유', 2), ('OIL_TP', 'DIESEL', '경유', 3), ('OIL_TP', 'GASOLINE', '휘발유', 4), ('OIL_TP', 'KEROSENE', '등유', 5), ('OIL_TP', 'LUBE', '윤활유', 6), ('OIL_TP', 'ETC', '기타', 99); -- 유출단위 (SPIL_UNIT) INSERT INTO CMN_CD_GRP (CMN_CD_GRP_ID, CMN_CD_GRP_NM, GRP_DC) VALUES ('SPIL_UNIT', '유출단위', '유출량의 측정 단위를 구분하는 코드'); INSERT INTO CMN_CD (CMN_CD_GRP_ID, CMN_CD, CMN_CD_NM, SORT_ORD) VALUES ('SPIL_UNIT', 'KL', '킬로리터', 1), ('SPIL_UNIT', 'L', '리터', 2), ('SPIL_UNIT', 'BBL', '배럴', 3), ('SPIL_UNIT', 'TON', '톤', 4); -- 유출유형 (SPIL_TP) INSERT INTO CMN_CD_GRP (CMN_CD_GRP_ID, CMN_CD_GRP_NM, GRP_DC) VALUES ('SPIL_TP', '유출유형', '유출의 형태를 구분하는 코드'); INSERT INTO CMN_CD (CMN_CD_GRP_ID, CMN_CD, CMN_CD_NM, SORT_ORD) VALUES ('SPIL_TP', 'CONTINUOUS', '연속유출', 1), ('SPIL_TP', 'INSTANTANEOUS','순간유출', 2); -- 예측알고리즘 (ALGO) INSERT INTO CMN_CD_GRP (CMN_CD_GRP_ID, CMN_CD_GRP_NM, GRP_DC) VALUES ('ALGO', '예측알고리즘', '유출 확산 예측에 사용되는 알고리즘 코드'); INSERT INTO CMN_CD (CMN_CD_GRP_ID, CMN_CD, CMN_CD_NM, SORT_ORD) VALUES ('ALGO', 'GNOME', 'GNOME 모델', 1), ('ALGO', 'OSCAR', 'OSCAR 모델', 2), ('ALGO', 'MOHID', 'MOHID 모델', 3); -- 실행상태 (EXEC_STTS) INSERT INTO CMN_CD_GRP (CMN_CD_GRP_ID, CMN_CD_GRP_NM, GRP_DC) VALUES ('EXEC_STTS', '실행상태', '예측 실행의 상태를 구분하는 코드'); INSERT INTO CMN_CD (CMN_CD_GRP_ID, CMN_CD, CMN_CD_NM, SORT_ORD) VALUES ('EXEC_STTS', 'PENDING', '대기', 1), ('EXEC_STTS', 'RUNNING', '실행중', 2), ('EXEC_STTS', 'COMPLETED', '완료', 3), ('EXEC_STTS', 'FAILED', '실패', 4); -- 오일펜스우선순위 (BOOM_PRIORT) INSERT INTO CMN_CD_GRP (CMN_CD_GRP_ID, CMN_CD_GRP_NM, GRP_DC) VALUES ('BOOM_PRIORT', '오일펜스우선순위', '오일펜스 배치 우선순위를 구분하는 코드'); INSERT INTO CMN_CD (CMN_CD_GRP_ID, CMN_CD, CMN_CD_NM, SORT_ORD) VALUES ('BOOM_PRIORT', 'CRITICAL', '긴급', 1), ('BOOM_PRIORT', 'HIGH', '높음', 2), ('BOOM_PRIORT', 'MEDIUM', '보통', 3), ('BOOM_PRIORT', 'LOW', '낮음', 4); -- 오일펜스배치상태 (DPLY_STTS) INSERT INTO CMN_CD_GRP (CMN_CD_GRP_ID, CMN_CD_GRP_NM, GRP_DC) VALUES ('DPLY_STTS', '배치상태', '오일펜스의 배치 상태를 구분하는 코드'); INSERT INTO CMN_CD (CMN_CD_GRP_ID, CMN_CD, CMN_CD_NM, SORT_ORD) VALUES ('DPLY_STTS', 'PLANNED', '계획', 1), ('DPLY_STTS', 'DEPLOYING', '배치중', 2), ('DPLY_STTS', 'DEPLOYED', '배치완료', 3), ('DPLY_STTS', 'REMOVED', '회수', 4); -- 해안유형 (CST_TP) INSERT INTO CMN_CD_GRP (CMN_CD_GRP_ID, CMN_CD_GRP_NM, GRP_DC) VALUES ('CST_TP', '해안유형', '해안의 지형 유형을 구분하는 코드'); INSERT INTO CMN_CD (CMN_CD_GRP_ID, CMN_CD, CMN_CD_NM, SORT_ORD) VALUES ('CST_TP', 'ROCK', '암반해안', 1), ('CST_TP', 'GRAVEL', '자갈해안', 2), ('CST_TP', 'SAND', '모래해안', 3), ('CST_TP', 'MUD', '갯벌', 4), ('CST_TP', 'MIXED', '혼합해안', 5), ('CST_TP', 'SEAWALL', '인공구조물', 6), ('CST_TP', 'TETRAPOD', '테트라포드', 7); -- 민감도 (SNSTVT) INSERT INTO CMN_CD_GRP (CMN_CD_GRP_ID, CMN_CD_GRP_NM, GRP_DC) VALUES ('SNSTVT', '민감도', '해안구간의 환경 민감도를 구분하는 코드'); INSERT INTO CMN_CD (CMN_CD_GRP_ID, CMN_CD, CMN_CD_NM, SORT_ORD) VALUES ('SNSTVT', 'HIGH', '고', 1), ('SNSTVT', 'MEDIUM', '중', 2), ('SNSTVT', 'LOW', '저', 3); -- 조사상태 (SRVY_STTS) INSERT INTO CMN_CD_GRP (CMN_CD_GRP_ID, CMN_CD_GRP_NM, GRP_DC) VALUES ('SRVY_STTS', '조사상태', '해안구간 조사의 진행 상태를 구분하는 코드'); INSERT INTO CMN_CD (CMN_CD_GRP_ID, CMN_CD, CMN_CD_NM, SORT_ORD) VALUES ('SRVY_STTS', 'PENDING', '미조사', 1), ('SRVY_STTS', 'PROGRESS', '진행중', 2), ('SRVY_STTS', 'COMPLETED', '완료', 3); -- 조사유형 (SRVY_TP) INSERT INTO CMN_CD_GRP (CMN_CD_GRP_ID, CMN_CD_GRP_NM, GRP_DC) VALUES ('SRVY_TP', '조사유형', 'SCAT 조사의 유형을 구분하는 코드'); INSERT INTO CMN_CD (CMN_CD_GRP_ID, CMN_CD, CMN_CD_NM, SORT_ORD) VALUES ('SRVY_TP', 'PRE_SCAT', 'Pre-SCAT', 1), ('SRVY_TP', 'SCAT', 'SCAT', 2), ('SRVY_TP', 'POST_SCAT', 'Post-SCAT', 3); -- 조사단계 (SRVY_PHASE) INSERT INTO CMN_CD_GRP (CMN_CD_GRP_ID, CMN_CD_GRP_NM, GRP_DC) VALUES ('SRVY_PHASE', '조사단계', 'SCAT 조사의 단계를 구분하는 코드'); INSERT INTO CMN_CD (CMN_CD_GRP_ID, CMN_CD, CMN_CD_NM, SORT_ORD) VALUES ('SRVY_PHASE', 'PHASE_1', '1차 조사', 1), ('SRVY_PHASE', 'PHASE_2', '2차 조사', 2), ('SRVY_PHASE', 'PHASE_3', '3차 조사', 3); -- 오염도 (POLUT) INSERT INTO CMN_CD_GRP (CMN_CD_GRP_ID, CMN_CD_GRP_NM, GRP_DC) VALUES ('POLUT', '오염도', '해안구간의 오염 정도를 구분하는 코드'); INSERT INTO CMN_CD (CMN_CD_GRP_ID, CMN_CD, CMN_CD_NM, SORT_ORD) VALUES ('POLUT', 'HEAVY', '심각', 1), ('POLUT', 'MODERATE', '보통', 2), ('POLUT', 'LIGHT', '경미', 3), ('POLUT', 'CLEAN', '깨끗', 4); -- 물리상태 (PHYS_STATE) INSERT INTO CMN_CD_GRP (CMN_CD_GRP_ID, CMN_CD_GRP_NM, GRP_DC) VALUES ('PHYS_STATE', '물리상태', '화학물질의 물리적 상태를 구분하는 코드'); INSERT INTO CMN_CD (CMN_CD_GRP_ID, CMN_CD, CMN_CD_NM, SORT_ORD) VALUES ('PHYS_STATE', 'SOLID', '고체', 1), ('PHYS_STATE', 'LIQUID', '액체', 2), ('PHYS_STATE', 'GAS', '기체', 3); -- 수용성 (WATER_SLBLT) INSERT INTO CMN_CD_GRP (CMN_CD_GRP_ID, CMN_CD_GRP_NM, GRP_DC) VALUES ('WATER_SLBLT', '수용성', '화학물질의 수용성 정도를 구분하는 코드'); INSERT INTO CMN_CD (CMN_CD_GRP_ID, CMN_CD, CMN_CD_NM, SORT_ORD) VALUES ('WATER_SLBLT', 'SOLUBLE', '수용성', 1), ('WATER_SLBLT', 'PARTIAL', '부분용해', 2), ('WATER_SLBLT', 'INSOLUBLE', '불용성', 3); -- 독성 (TOXICITY) INSERT INTO CMN_CD_GRP (CMN_CD_GRP_ID, CMN_CD_GRP_NM, GRP_DC) VALUES ('TOXICITY', '독성', '화학물질의 독성 수준을 구분하는 코드'); INSERT INTO CMN_CD (CMN_CD_GRP_ID, CMN_CD, CMN_CD_NM, SORT_ORD) VALUES ('TOXICITY', 'HIGH', '고독성', 1), ('TOXICITY', 'MEDIUM', '중독성', 2), ('TOXICITY', 'LOW', '저독성', 3); -- ============================================================ -- 15. 샘플 데이터 -- ============================================================ -- 조직 INSERT INTO ORG (ORG_NM, ORG_ABBR_NM, ORG_TP_CD) VALUES ('해양경찰청', '해경청', 'HEADQUARTERS'), ('남해지방해양경찰청', '남해청', 'REGIONAL'), ('제주지방해양경찰청', '제주청', 'REGIONAL'), ('여수해양경찰서', '여수서', 'STATION'), ('서귀포해양경찰서', '서귀포서', 'STATION'), ('제주해양경찰서', '제주서', 'STATION'); -- 상위조직 설정 UPDATE ORG SET UPPER_ORG_SN = 1 WHERE ORG_SN IN (2, 3); UPDATE ORG SET UPPER_ORG_SN = 2 WHERE ORG_SN = 4; UPDATE ORG SET UPPER_ORG_SN = 3 WHERE ORG_SN IN (5, 6); -- 관리자 (비밀번호: admin1234) INSERT INTO USER_INFO (USER_ACNT, PSWD_HASH, USER_NM, RNKP_NM, ORG_SN, ROLE_CD) VALUES ('admin', '$2b$10$rN3qJ9qZ5yH.KfxYvYvW0.VxJ8K5vN8qJ9qZ5yH.KfxYvYvW0.VxJ8', '관리자', '경정', 1, 'ADMIN'); -- 샘플 사고 (여수 앞바다) INSERT INTO ACDNT (ACDNT_CD, ACDNT_NM, ACDNT_TP_CD, LOC_GEOM, LOC_DC, OCCRN_DTM, RSPNS_ORG_SN, SVRT_CD) VALUES ('INC-2025-0042', '여수 앞바다 유조선 충돌', 'COLLISION', ST_SetSRID(ST_MakePoint(127.8, 34.5), 4326), '여수 돌산 남방 5NM', '2025-02-10 06:30:00+09', 4, 'DANGER'); -- ============================================================ -- 데이터베이스 코멘트 -- ============================================================ COMMENT ON DATABASE wing IS 'WING 해양환경 위기대응 통합시스템 - 공공데이터베이스 표준화 관리 매뉴얼(2021.06) 적용';