- 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>
131 lines
4.8 KiB
SQL
131 lines
4.8 KiB
SQL
-- WING-OPS Database Schema: Asset Management Tables
|
|
-- wing 스키마: asset_org, asset_equip, asset_contact, asset_upload_log
|
|
|
|
-- ============================================================
|
|
-- 1. 자산 기관 (asset_org)
|
|
-- ============================================================
|
|
CREATE TABLE wing.asset_org (
|
|
org_sn integer NOT NULL,
|
|
org_tp character varying(30) NOT NULL,
|
|
jrsd_nm character varying(50) NOT NULL,
|
|
area_nm character varying(30) NOT NULL,
|
|
org_nm character varying(100) NOT NULL,
|
|
addr character varying(300),
|
|
tel character varying(30),
|
|
lat numeric(9,6),
|
|
lng numeric(10,6),
|
|
pin_size character varying(5) DEFAULT 'md'::character varying,
|
|
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 character(1) DEFAULT 'Y'::bpchar,
|
|
reg_dtm timestamp with time zone DEFAULT now(),
|
|
mdfcn_dtm timestamp with time zone,
|
|
geom public.geometry(Point, 4326),
|
|
CONSTRAINT asset_org_pkey PRIMARY KEY (org_sn),
|
|
CONSTRAINT ck_asset_org_pin CHECK (
|
|
((pin_size)::text = ANY ((ARRAY['hq'::character varying, 'lg'::character varying, 'md'::character varying])::text[]))
|
|
)
|
|
);
|
|
|
|
CREATE SEQUENCE wing.asset_org_org_sn_seq
|
|
AS integer
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
ALTER SEQUENCE wing.asset_org_org_sn_seq OWNED BY wing.asset_org.org_sn;
|
|
ALTER TABLE ONLY wing.asset_org ALTER COLUMN org_sn SET DEFAULT nextval('wing.asset_org_org_sn_seq'::regclass);
|
|
|
|
|
|
-- ============================================================
|
|
-- 2. 자산 장비 (asset_equip)
|
|
-- ============================================================
|
|
CREATE TABLE wing.asset_equip (
|
|
equip_sn integer NOT NULL,
|
|
org_sn integer NOT NULL,
|
|
ctgr_nm character varying(50) NOT NULL,
|
|
icon character varying(10),
|
|
qty smallint DEFAULT 0,
|
|
sort_ord smallint DEFAULT 0,
|
|
CONSTRAINT asset_equip_pkey PRIMARY KEY (equip_sn),
|
|
CONSTRAINT asset_equip_org_sn_ctgr_nm_key UNIQUE (org_sn, ctgr_nm)
|
|
);
|
|
|
|
CREATE SEQUENCE wing.asset_equip_equip_sn_seq
|
|
AS integer
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
ALTER SEQUENCE wing.asset_equip_equip_sn_seq OWNED BY wing.asset_equip.equip_sn;
|
|
ALTER TABLE ONLY wing.asset_equip ALTER COLUMN equip_sn SET DEFAULT nextval('wing.asset_equip_equip_sn_seq'::regclass);
|
|
|
|
|
|
-- ============================================================
|
|
-- 3. 자산 연락처 (asset_contact)
|
|
-- ============================================================
|
|
CREATE TABLE wing.asset_contact (
|
|
contact_sn integer NOT NULL,
|
|
org_sn integer NOT NULL,
|
|
role_nm character varying(50),
|
|
contact_nm character varying(50),
|
|
tel character varying(30),
|
|
sort_ord smallint DEFAULT 0,
|
|
CONSTRAINT asset_contact_pkey PRIMARY KEY (contact_sn)
|
|
);
|
|
|
|
CREATE SEQUENCE wing.asset_contact_contact_sn_seq
|
|
AS integer
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
ALTER SEQUENCE wing.asset_contact_contact_sn_seq OWNED BY wing.asset_contact.contact_sn;
|
|
ALTER TABLE ONLY wing.asset_contact ALTER COLUMN contact_sn SET DEFAULT nextval('wing.asset_contact_contact_sn_seq'::regclass);
|
|
|
|
|
|
-- ============================================================
|
|
-- 4. 자산 업로드 로그 (asset_upload_log)
|
|
-- ============================================================
|
|
CREATE TABLE wing.asset_upload_log (
|
|
log_sn integer NOT NULL,
|
|
file_nm character varying(200) NOT NULL,
|
|
uploader_nm character varying(50),
|
|
upload_cnt integer DEFAULT 0,
|
|
reg_dtm timestamp with time zone DEFAULT now(),
|
|
CONSTRAINT asset_upload_log_pkey PRIMARY KEY (log_sn)
|
|
);
|
|
|
|
CREATE SEQUENCE wing.asset_upload_log_log_sn_seq
|
|
AS integer
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
ALTER SEQUENCE wing.asset_upload_log_log_sn_seq OWNED BY wing.asset_upload_log.log_sn;
|
|
ALTER TABLE ONLY wing.asset_upload_log ALTER COLUMN log_sn SET DEFAULT nextval('wing.asset_upload_log_log_sn_seq'::regclass);
|
|
|
|
|
|
-- ============================================================
|
|
-- FK 제약조건
|
|
-- ============================================================
|
|
ALTER TABLE ONLY wing.asset_equip
|
|
ADD CONSTRAINT asset_equip_org_sn_fkey
|
|
FOREIGN KEY (org_sn) REFERENCES wing.asset_org(org_sn) ON DELETE CASCADE;
|
|
|
|
ALTER TABLE ONLY wing.asset_contact
|
|
ADD CONSTRAINT asset_contact_org_sn_fkey
|
|
FOREIGN KEY (org_sn) REFERENCES wing.asset_org(org_sn) ON DELETE CASCADE;
|