-- ============================================================ -- 027: 민감자원 테이블 생성 -- 모든 민감자원(양식장, 해수욕장, 무역항 등)을 단일 테이블로 관리 -- properties는 JSONB로 유연하게 저장 -- ============================================================ SET search_path TO wing, public; CREATE EXTENSION IF NOT EXISTS postgis; -- ============================================================ -- 민감자원 테이블 -- ============================================================ CREATE TABLE IF NOT EXISTS SENSITIVE_RESOURCE ( SR_ID BIGSERIAL PRIMARY KEY, CATEGORY VARCHAR(50) NOT NULL, -- 민감자원 유형 (양식장, 해수욕장, 무역항 등) GEOM public.geometry(Geometry, 4326) NOT NULL, -- 공간 데이터 (Point, LineString, Polygon 모두 수용) PROPERTIES JSONB NOT NULL DEFAULT '{}', -- 원본 GeoJSON properties REG_DT TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, MOD_DT TIMESTAMP ); -- 공간 인덱스 CREATE INDEX IF NOT EXISTS IDX_SR_GEOM ON SENSITIVE_RESOURCE USING GIST(GEOM); -- 카테고리 인덱스 (유형별 필터링) CREATE INDEX IF NOT EXISTS IDX_SR_CATEGORY ON SENSITIVE_RESOURCE (CATEGORY); -- JSONB 인덱스 (properties 내부 검색용) CREATE INDEX IF NOT EXISTS IDX_SR_PROPERTIES ON SENSITIVE_RESOURCE USING GIN(PROPERTIES); -- 카테고리 + 공간 복합 조회 최적화 CREATE INDEX IF NOT EXISTS IDX_SR_CATEGORY_GEOM ON SENSITIVE_RESOURCE USING GIST(GEOM) WHERE CATEGORY IS NOT NULL; COMMENT ON TABLE SENSITIVE_RESOURCE IS '민감자원 통합 테이블'; COMMENT ON COLUMN SENSITIVE_RESOURCE.SR_ID IS '민감자원 ID'; COMMENT ON COLUMN SENSITIVE_RESOURCE.CATEGORY IS '민감자원 유형 (양식장, 해수욕장, 무역항, 어항, 해안선_ESI 등)'; COMMENT ON COLUMN SENSITIVE_RESOURCE.GEOM IS '공간 데이터 (EPSG:4326)'; COMMENT ON COLUMN SENSITIVE_RESOURCE.PROPERTIES IS '원본 GeoJSON properties (JSONB)'; COMMENT ON COLUMN SENSITIVE_RESOURCE.REG_DT IS '등록일시'; COMMENT ON COLUMN SENSITIVE_RESOURCE.MOD_DT IS '수정일시';