- database/schema/ 14개 DDL 파일 신규 생성 (운영 DB pg_dump 기반) - database/seed/ 14개 초기 데이터 파일 분리 - database/_deprecated/로 구 init.sql, auth_init.sql 이동 - database/README.md 신규 작성 (DB 아키텍처, 설치 절차) - docs/ 6개 가이드 문서 wing_auth→auth 스키마 구조로 수정 - README.md, CLAUDE.md wing 단일 DB 구조 반영 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
218 lines
8.2 KiB
SQL
218 lines
8.2 KiB
SQL
-- WING-OPS Database Schema: Aerial & Rescue Tables
|
|
-- wing 스키마: aerial_media, cctv_camera, sat_request, rescue_ops, rescue_scenario
|
|
-- FK 의존성: rescue_scenario → rescue_ops
|
|
|
|
-- ============================================================
|
|
-- 1. 항공 미디어 (aerial_media)
|
|
-- ============================================================
|
|
CREATE TABLE wing.aerial_media (
|
|
aerial_media_sn integer NOT NULL,
|
|
acdnt_sn integer,
|
|
file_nm character varying(200) NOT NULL,
|
|
orgnl_nm character varying(200),
|
|
file_path character varying(500),
|
|
lon numeric(10,6),
|
|
lat numeric(9,6),
|
|
geom public.geometry(Point, 4326),
|
|
loc_dc character varying(100),
|
|
equip_tp_cd character varying(20),
|
|
equip_nm character varying(50),
|
|
media_tp_cd character varying(20),
|
|
takng_dtm timestamp with time zone,
|
|
file_sz character varying(20),
|
|
resolution character varying(30),
|
|
use_yn character(1) DEFAULT 'Y'::bpchar,
|
|
reg_dtm timestamp with time zone DEFAULT now(),
|
|
CONSTRAINT aerial_media_pkey PRIMARY KEY (aerial_media_sn)
|
|
);
|
|
|
|
CREATE SEQUENCE wing.aerial_media_aerial_media_sn_seq
|
|
AS integer
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
ALTER SEQUENCE wing.aerial_media_aerial_media_sn_seq OWNED BY wing.aerial_media.aerial_media_sn;
|
|
ALTER TABLE ONLY wing.aerial_media ALTER COLUMN aerial_media_sn SET DEFAULT nextval('wing.aerial_media_aerial_media_sn_seq'::regclass);
|
|
|
|
|
|
-- ============================================================
|
|
-- 2. CCTV 카메라 (cctv_camera)
|
|
-- ============================================================
|
|
CREATE TABLE wing.cctv_camera (
|
|
cctv_sn integer NOT NULL,
|
|
camera_nm character varying(100) NOT NULL,
|
|
region_nm character varying(20),
|
|
lon numeric(10,6),
|
|
lat numeric(9,6),
|
|
geom public.geometry(Point, 4326),
|
|
loc_dc character varying(200),
|
|
coord_dc character varying(50),
|
|
stts_cd character varying(20) DEFAULT 'LIVE'::character varying,
|
|
ptz_yn character(1) DEFAULT 'N'::bpchar,
|
|
source_nm character varying(50),
|
|
stream_url character varying(500),
|
|
use_yn character(1) DEFAULT 'Y'::bpchar,
|
|
reg_dtm timestamp with time zone DEFAULT now(),
|
|
CONSTRAINT cctv_camera_pkey PRIMARY KEY (cctv_sn)
|
|
);
|
|
|
|
CREATE SEQUENCE wing.cctv_camera_cctv_sn_seq
|
|
AS integer
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
ALTER SEQUENCE wing.cctv_camera_cctv_sn_seq OWNED BY wing.cctv_camera.cctv_sn;
|
|
ALTER TABLE ONLY wing.cctv_camera ALTER COLUMN cctv_sn SET DEFAULT nextval('wing.cctv_camera_cctv_sn_seq'::regclass);
|
|
|
|
|
|
-- ============================================================
|
|
-- 3. 위성 촬영 요청 (sat_request)
|
|
-- ============================================================
|
|
CREATE TABLE wing.sat_request (
|
|
sat_req_sn integer NOT NULL,
|
|
req_cd character varying(20) NOT NULL,
|
|
acdnt_sn integer,
|
|
lon numeric(10,6),
|
|
lat numeric(9,6),
|
|
geom public.geometry(Point, 4326),
|
|
zone_dc character varying(200),
|
|
coord_dc character varying(50),
|
|
zone_area_km2 numeric(8,2),
|
|
sat_nm character varying(50),
|
|
provider_nm character varying(50),
|
|
resolution character varying(20),
|
|
purpose_dc character varying(200),
|
|
reqstr_nm character varying(50),
|
|
req_dtm timestamp with time zone,
|
|
expected_rcv_dtm timestamp with time zone,
|
|
stts_cd character varying(20) DEFAULT 'PENDING'::character varying,
|
|
use_yn character(1) DEFAULT 'Y'::bpchar,
|
|
reg_dtm timestamp with time zone DEFAULT now(),
|
|
CONSTRAINT sat_request_pkey PRIMARY KEY (sat_req_sn),
|
|
CONSTRAINT sat_request_req_cd_key UNIQUE (req_cd),
|
|
CONSTRAINT ck_sat_stts CHECK (
|
|
((stts_cd)::text = ANY ((ARRAY['PENDING'::character varying, 'SHOOTING'::character varying, 'COMPLETED'::character varying, 'CANCELLED'::character varying])::text[]))
|
|
)
|
|
);
|
|
|
|
CREATE SEQUENCE wing.sat_request_sat_req_sn_seq
|
|
AS integer
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
ALTER SEQUENCE wing.sat_request_sat_req_sn_seq OWNED BY wing.sat_request.sat_req_sn;
|
|
ALTER TABLE ONLY wing.sat_request ALTER COLUMN sat_req_sn SET DEFAULT nextval('wing.sat_request_sat_req_sn_seq'::regclass);
|
|
|
|
|
|
-- ============================================================
|
|
-- 4. 구조 작전 (rescue_ops)
|
|
-- ============================================================
|
|
CREATE TABLE wing.rescue_ops (
|
|
rescue_ops_sn integer NOT NULL,
|
|
acdnt_sn integer,
|
|
ops_cd character varying(20) NOT NULL,
|
|
acdnt_tp_cd character varying(20),
|
|
vessel_nm character varying(100),
|
|
commander_nm character varying(50),
|
|
lon numeric(10,6),
|
|
lat numeric(9,6),
|
|
geom public.geometry(Point, 4326),
|
|
loc_dc character varying(100),
|
|
depth_m numeric(6,1),
|
|
current_dc character varying(50),
|
|
gm_m numeric(5,2),
|
|
list_deg numeric(5,1),
|
|
trim_m numeric(5,2),
|
|
buoyancy_pct numeric(5,1),
|
|
oil_rate_lpm numeric(8,1),
|
|
bm_ratio_pct numeric(5,1),
|
|
total_crew integer,
|
|
survivors integer,
|
|
missing integer,
|
|
hydro_data jsonb,
|
|
gmdss_data jsonb,
|
|
stts_cd character varying(20) DEFAULT 'ACTIVE'::character varying,
|
|
use_yn character(1) DEFAULT 'Y'::bpchar,
|
|
reg_dtm timestamp with time zone DEFAULT now(),
|
|
mdfcn_dtm timestamp with time zone DEFAULT now(),
|
|
CONSTRAINT rescue_ops_pkey PRIMARY KEY (rescue_ops_sn),
|
|
CONSTRAINT rescue_ops_ops_cd_key UNIQUE (ops_cd)
|
|
);
|
|
|
|
CREATE SEQUENCE wing.rescue_ops_rescue_ops_sn_seq
|
|
AS integer
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
ALTER SEQUENCE wing.rescue_ops_rescue_ops_sn_seq OWNED BY wing.rescue_ops.rescue_ops_sn;
|
|
ALTER TABLE ONLY wing.rescue_ops ALTER COLUMN rescue_ops_sn SET DEFAULT nextval('wing.rescue_ops_rescue_ops_sn_seq'::regclass);
|
|
|
|
|
|
-- ============================================================
|
|
-- 5. 구조 시나리오 (rescue_scenario)
|
|
-- 의존: rescue_ops
|
|
-- ============================================================
|
|
CREATE TABLE wing.rescue_scenario (
|
|
scenario_sn integer NOT NULL,
|
|
rescue_ops_sn integer NOT NULL,
|
|
time_step character varying(10) NOT NULL,
|
|
scenario_dtm timestamp with time zone,
|
|
svrt_cd character varying(20),
|
|
gm_m numeric(5,2),
|
|
list_deg numeric(5,1),
|
|
trim_m numeric(5,2),
|
|
buoyancy_pct numeric(5,1),
|
|
oil_rate_lpm numeric(8,1),
|
|
bm_ratio_pct numeric(5,1),
|
|
description text,
|
|
compartments jsonb,
|
|
assessment jsonb,
|
|
actions jsonb,
|
|
sort_ord integer DEFAULT 0,
|
|
reg_dtm timestamp with time zone DEFAULT now(),
|
|
CONSTRAINT rescue_scenario_pkey PRIMARY KEY (scenario_sn)
|
|
);
|
|
|
|
CREATE SEQUENCE wing.rescue_scenario_scenario_sn_seq
|
|
AS integer
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
ALTER SEQUENCE wing.rescue_scenario_scenario_sn_seq OWNED BY wing.rescue_scenario.scenario_sn;
|
|
ALTER TABLE ONLY wing.rescue_scenario ALTER COLUMN scenario_sn SET DEFAULT nextval('wing.rescue_scenario_scenario_sn_seq'::regclass);
|
|
|
|
|
|
-- ============================================================
|
|
-- FK 제약조건
|
|
-- ============================================================
|
|
ALTER TABLE ONLY wing.aerial_media
|
|
ADD CONSTRAINT aerial_media_acdnt_sn_fkey
|
|
FOREIGN KEY (acdnt_sn) REFERENCES wing.acdnt(acdnt_sn);
|
|
|
|
ALTER TABLE ONLY wing.sat_request
|
|
ADD CONSTRAINT sat_request_acdnt_sn_fkey
|
|
FOREIGN KEY (acdnt_sn) REFERENCES wing.acdnt(acdnt_sn);
|
|
|
|
ALTER TABLE ONLY wing.rescue_ops
|
|
ADD CONSTRAINT rescue_ops_acdnt_sn_fkey
|
|
FOREIGN KEY (acdnt_sn) REFERENCES wing.acdnt(acdnt_sn);
|
|
|
|
ALTER TABLE ONLY wing.rescue_scenario
|
|
ADD CONSTRAINT rescue_scenario_rescue_ops_sn_fkey
|
|
FOREIGN KEY (rescue_ops_sn) REFERENCES wing.rescue_ops(rescue_ops_sn) ON DELETE CASCADE;
|