프로젝트

일반

사용자정보

2025/20.개발산출물/01.DB 설계 » KOSIS_stats_data_creation.sql

이환희, 2025-12-19 05:01

 

-- ## ver 0.0.3 last update data : 2025.05.22
-- ## Only for PostgreSQL
-- ## Designing for KOSIS OpenAPI Data (연동 규격을 기준으로 )





-- ################################################
-- ## 수집된 통계 데이터 원본 저장용 테이블 생성
-- ################################################
DROP TABLE IF EXISTS public.stats_kosis_origin_data;


CREATE TABLE stats_kosis_origin_data (
id int4 GENERATED BY DEFAULT AS IDENTITY( INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START 1 CACHE 1 NO CYCLE) NOT NULL, -- system id, 고유 식별자 (자동 증가)
org_id int2 NOT NULL, -- 기관코드
tbl_id VARCHAR(40) NOT NULL, -- 통계표ID
tbl_nm VARCHAR(300) NOT NULL, -- 통계표명
c1 VARCHAR(24) NOT NULL, c2 VARCHAR(24), c3 VARCHAR(24), c4 VARCHAR(24), -- 분류값 ID1 ~ 4, 값>3자일 일경우 앞3자리로 group id를 찾아 표시해야함. c#_obj하위에 group임. c#_obj > c# group > c#, itm_id는 별도 분류'
c1_obj_nm VARCHAR(300) NOT NULL, c2_obj_nm VARCHAR(300), c3_obj_nm VARCHAR(300), c4_obj_nm VARCHAR(300), -- 분류명1 ~ 4

c1_nm VARCHAR(300) NOT NULL, c2_nm VARCHAR(300), c3_nm VARCHAR(300), c4_nm VARCHAR(300), -- 분류값 명1 ~ 4

itm_id VARCHAR(10) NOT NULL, -- 항목 ID
itm_nm VARCHAR(300) NOT NULL, -- 항목명
unit_id VARCHAR(4), -- 단위ID
unit_nm VARCHAR(20), -- 단위명
prd_se VARCHAR(2) NOT NULL, -- 수록주기
prd_de VARCHAR(10) NOT NULL, -- 수록시점
dt varchar(100) NOT NULL, -- 수치 값
lst_chn_de VARCHAR(10), -- 최종수정일
created_at timestamptz DEFAULT CURRENT_TIMESTAMP NOT NULL, -- 생성 일시
CONSTRAINT pkey_stats_kosis_origin_data PRIMARY KEY (id)
);

CREATE INDEX idx_st_kosis_origin_data_org_tlb_id ON stats_kosis_origin_data USING btree (org_id,tbl_id);
COMMENT ON TABLE stats_src_data_info IS 'KOSIS 원천 통계 데이터';


-- 필드별 COMMENT 추가
COMMENT ON COLUMN stats_kosis_origin_data.id IS 'system id, 고유 식별자 (자동 증가)';

COMMENT ON COLUMN stats_kosis_origin_data.org_id IS '기관 코드';
COMMENT ON COLUMN stats_kosis_origin_data.tbl_id IS '통계표 ID';
COMMENT ON COLUMN stats_kosis_origin_data.tbl_nm IS '통계표명';

COMMENT ON COLUMN stats_kosis_origin_data.c1 IS '분류값 ID1, 값>3자일 일경우 앞3자리로 group id를 찾아 표시해야함. c#_obj하위에 group임. c#_obj > c# group > c#, itm_id는 별도 분류';
COMMENT ON COLUMN stats_kosis_origin_data.c2 IS '분류값 ID2, 값>3자일 일경우 앞3자리로 group id를 찾아 표시해야함. c#_obj하위에 group임. c#_obj > c# group > c#, itm_id는 별도 분류';
COMMENT ON COLUMN stats_kosis_origin_data.c3 IS '분류값 ID3, 값>3자일 일경우 앞3자리로 group id를 찾아 표시해야함. c#_obj하위에 group임. c#_obj > c# group > c#, itm_id는 별도 분류';
COMMENT ON COLUMN stats_kosis_origin_data.c4 IS '분류값 ID4, 값>3자일 일경우 앞3자리로 group id를 찾아 표시해야함. c#_obj하위에 group임. c#_obj > c# group > c#, itm_id는 별도 분류';


COMMENT ON COLUMN stats_kosis_origin_data.c1_obj_nm IS '분류명1';
COMMENT ON COLUMN stats_kosis_origin_data.c2_obj_nm IS '분류명2';
COMMENT ON COLUMN stats_kosis_origin_data.c3_obj_nm IS '분류명3';
COMMENT ON COLUMN stats_kosis_origin_data.c4_obj_nm IS '분류명4';


COMMENT ON COLUMN stats_kosis_origin_data.c1_nm IS '분류값 명1';
COMMENT ON COLUMN stats_kosis_origin_data.c2_nm IS '분류값 명2';
COMMENT ON COLUMN stats_kosis_origin_data.c3_nm IS '분류값 명3';
COMMENT ON COLUMN stats_kosis_origin_data.c4_nm IS '분류값 명4';

COMMENT ON COLUMN stats_kosis_origin_data.itm_id IS '항목 ID';
COMMENT ON COLUMN stats_kosis_origin_data.itm_nm IS '항목명';

COMMENT ON COLUMN stats_kosis_origin_data.unit_id IS '단위 ID';
COMMENT ON COLUMN stats_kosis_origin_data.unit_nm IS '단위명';

COMMENT ON COLUMN stats_kosis_origin_data.prd_se IS '수록주기';
COMMENT ON COLUMN stats_kosis_origin_data.prd_de IS '수록시점';

COMMENT ON COLUMN stats_kosis_origin_data.dt IS '수치 값';

COMMENT ON COLUMN stats_kosis_origin_data.lst_chn_de IS '최종 수정일';

COMMENT ON COLUMN stats_kosis_origin_data.created_at IS '생성 일시';




-- ################################################
-- ## 수집된 통계 데이터의 분류/항목 정보 원본 저장용 테이블 생성
-- ################################################

CREATE TABLE kosis_item_meta_code (
id int4 GENERATED BY DEFAULT AS IDENTITY( INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START 1 CACHE 1 NO CYCLE) NOT NULL, -- system id, 고유 식별자 (자동 증가)
obj_id VARCHAR(24) NOT NULL,
obj_nm VARCHAR(300) NOT NULL,
itm_id VARCHAR(24) NOT NULL,
itm_nm VARCHAR(300) NOT NULL,
up_itm_id VARCHAR(40),
obj_id_sn SMALLINT,
unit_id VARCHAR(4),
unit_nm VARCHAR(20),
created_at timestamptz DEFAULT CURRENT_TIMESTAMP NOT NULL,
updated_at timestamptz DEFAULT CURRENT_TIMESTAMP,
created_by VARCHAR(50),
updated_by VARCHAR(50),
CONSTRAINT pkey_kosis_item_meta_code PRIMARY KEY (id)
);

CREATE UNIQUE INDEX uidx_kosis_item_meta_code_obj_itm_id ON kosis_item_meta_code USING btree (obj_id, itm_id );
COMMENT ON TABLE kosis_item_meta_code IS 'KOSIS 원천 데이터 의 분류/항목 코드 정보';

COMMENT ON COLUMN kosis_item_meta_code.id IS 'PK: 내부 고유 ID (자동 생성)';
COMMENT ON COLUMN kosis_item_meta_code.obj_id IS '분류 ID';
COMMENT ON COLUMN kosis_item_meta_code.obj_nm IS '분류명 (한글)';
;
COMMENT ON COLUMN kosis_item_meta_code.itm_id IS '자료코드 ID';
COMMENT ON COLUMN kosis_item_meta_code.itm_nm IS '자료코드명 (한글)';

COMMENT ON COLUMN kosis_item_meta_code.up_itm_id IS '상위 자료코드 ID';
COMMENT ON COLUMN kosis_item_meta_code.obj_id_sn IS '분류값 순번';
COMMENT ON COLUMN kosis_item_meta_code.unit_id IS '단위 ID';
COMMENT ON COLUMN kosis_item_meta_code.unit_nm IS '단위명 (한글)';

COMMENT ON COLUMN kosis_item_meta_code.created_at IS '생성 일시';
COMMENT ON COLUMN kosis_item_meta_code.created_by IS '생성자';
COMMENT ON COLUMN kosis_item_meta_code.updated_at IS '최종 수정 일시';
COMMENT ON COLUMN kosis_item_meta_code.updated_by IS '최종 수정자';




/* ORG Table -------------------------------------------------------------
-- ################################################
-- ## 수집된 통계 데이터 원본 저장용 테이블 생성
-- ################################################

CREATE TABLE stats_kosis_origin_data (
id int4 GENERATED BY DEFAULT AS IDENTITY( INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START 1 CACHE 1 NO CYCLE) NOT NULL, -- system id, 고유 식별자 (자동 증가)
org_id VARCHAR(40) NOT NULL, -- 기관코드
tbl_id VARCHAR(40) NOT NULL, -- 통계표ID
tbl_nm VARCHAR(300) NOT NULL, -- 통계표명
c1 VARCHAR(40) NOT NULL, c2 VARCHAR(40), c3 VARCHAR(40), c4 VARCHAR(40), -- 분류값 ID1 ~ 4 , 값>3자일 일경우 앞3자리로 group id를 찾아 표시해야함. c#_obj하위에 group임. c#_obj > c# group > c#, itm_id는 별도 분류'
c5 VARCHAR(40), c6 VARCHAR(40), c7 VARCHAR(40), c8 VARCHAR(40), -- 분류값 ID5 ~ 8, 값>3자일 일경우 앞3자리로 group id를 찾아 표시해야함. c#_obj하위에 group임. c#_obj > c# group > c#, itm_id는 별도 분류'
c1_obj_nm VARCHAR(3000) NOT NULL, c2_obj_nm VARCHAR(3000), c3_obj_nm VARCHAR(3000), c4_obj_nm VARCHAR(3000), -- 분류명1 ~ 4
c5_obj_nm VARCHAR(3000), c6_obj_nm VARCHAR(3000), c7_obj_nm VARCHAR(3000), c8_obj_nm VARCHAR(3000), -- 분류명5 ~ 8
c1_obj_nm_eng VARCHAR(3000), c2_obj_nm_eng VARCHAR(3000), c3_obj_nm_eng VARCHAR(3000), c4_obj_nm_eng VARCHAR(3000), -- 분류 영문명1 ~ 4
c5_obj_nm_eng VARCHAR(3000), c6_obj_nm_eng VARCHAR(3000), c7_obj_nm_eng VARCHAR(3000), c8_obj_nm_eng VARCHAR(3000), -- 분류 영문명5 ~ 8
c1_nm VARCHAR(3000) NOT NULL, c2_nm VARCHAR(3000), c3_nm VARCHAR(3000), c4_nm VARCHAR(3000), -- 분류값 명1 ~ 4
c5_nm VARCHAR(3000), c6_nm VARCHAR(3000), c7_nm VARCHAR(3000), c8_nm VARCHAR(3000), -- 분류값 명5 ~ 8
c1_nm_eng VARCHAR(3000), c2_nm_eng VARCHAR(3000), c3_nm_eng VARCHAR(3000), c4_nm_eng VARCHAR(3000), -- 분류값 영문명1 ~ 4
c5_nm_eng VARCHAR(3000), c6_nm_eng VARCHAR(3000), c7_nm_eng VARCHAR(3000), c8_nm_eng VARCHAR(3000), -- 분류값 영문명5 ~ 8
itm_id VARCHAR(40) NOT NULL, -- 항목 ID
itm_nm VARCHAR(3000) NOT NULL, -- 항목명
itm_nm_eng VARCHAR(3000), -- 항목영문명
unit_id VARCHAR(40), -- 단위ID
unit_nm VARCHAR(1000), -- 단위명
unit_nm_eng VARCHAR(1000), -- 단위영문명
prd_se VARCHAR(20) NOT NULL, -- 수록주기
prd_de VARCHAR(40) NOT NULL, -- 수록시점
dt VARCHAR(100) DEFAULT null, -- 수치 값
lst_chn_de VARCHAR(20), -- 최종수정일
created_at timestamptz DEFAULT CURRENT_TIMESTAMP NOT NULL, -- 생성 일시
CONSTRAINT pkey_stats_kosis_origin_data PRIMARY KEY (id)
);

CREATE INDEX idx_st_kosis_origin_data_org_tlb_id ON stats_kosis_origin_data USING btree (org_id,tbl_id);
COMMENT ON TABLE stats_src_data_info IS 'KOSIS 원천 통계 데이터';


-- 필드별 COMMENT 추가
COMMENT ON COLUMN stats_kosis_origin_data.id IS 'system id, 고유 식별자 (자동 증가)';

COMMENT ON COLUMN stats_kosis_origin_data.org_id IS '기관 코드';
COMMENT ON COLUMN stats_kosis_origin_data.tbl_id IS '통계표 ID';
COMMENT ON COLUMN stats_kosis_origin_data.tbl_nm IS '통계표명';
COMMENT ON COLUMN stats_kosis_origin_data.c1 IS '분류값 ID1, 값>3자일 일경우 앞3자리로 group id를 찾아 표시해야함. c#_obj하위에 group임. c#_obj > c# group > c#, itm_id는 별도 분류';
COMMENT ON COLUMN stats_kosis_origin_data.c2 IS '분류값 ID2, 값>3자일 일경우 앞3자리로 group id를 찾아 표시해야함. c#_obj하위에 group임. c#_obj > c# group > c#, itm_id는 별도 분류';
COMMENT ON COLUMN stats_kosis_origin_data.c3 IS '분류값 ID3, 값>3자일 일경우 앞3자리로 group id를 찾아 표시해야함. c#_obj하위에 group임. c#_obj > c# group > c#, itm_id는 별도 분류';
COMMENT ON COLUMN stats_kosis_origin_data.c4 IS '분류값 ID4, 값>3자일 일경우 앞3자리로 group id를 찾아 표시해야함. c#_obj하위에 group임. c#_obj > c# group > c#, itm_id는 별도 분류';
COMMENT ON COLUMN stats_kosis_origin_data.c5 IS '분류값 ID5, 값>3자일 일경우 앞3자리로 group id를 찾아 표시해야함. c#_obj하위에 group임. c#_obj > c# group > c#, itm_id는 별도 분류';
COMMENT ON COLUMN stats_kosis_origin_data.c6 IS '분류값 ID6, 값>3자일 일경우 앞3자리로 group id를 찾아 표시해야함. c#_obj하위에 group임. c#_obj > c# group > c#, itm_id는 별도 분류';
COMMENT ON COLUMN stats_kosis_origin_data.c7 IS '분류값 ID7, 값>3자일 일경우 앞3자리로 group id를 찾아 표시해야함. c#_obj하위에 group임. c#_obj > c# group > c#, itm_id는 별도 분류';
COMMENT ON COLUMN stats_kosis_origin_data.c8 IS '분류값 ID8, 값>3자일 일경우 앞3자리로 group id를 찾아 표시해야함. c#_obj하위에 group임. c#_obj > c# group > c#, itm_id는 별도 분류';
COMMENT ON COLUMN stats_kosis_origin_data.c1_obj_nm IS '분류명1';
COMMENT ON COLUMN stats_kosis_origin_data.c2_obj_nm IS '분류명2';
COMMENT ON COLUMN stats_kosis_origin_data.c3_obj_nm IS '분류명3';
COMMENT ON COLUMN stats_kosis_origin_data.c4_obj_nm IS '분류명4';
COMMENT ON COLUMN stats_kosis_origin_data.c5_obj_nm IS '분류명5';
COMMENT ON COLUMN stats_kosis_origin_data.c6_obj_nm IS '분류명6';
COMMENT ON COLUMN stats_kosis_origin_data.c7_obj_nm IS '분류명7';
COMMENT ON COLUMN stats_kosis_origin_data.c8_obj_nm IS '분류명8';
COMMENT ON COLUMN stats_kosis_origin_data.c1_obj_nm_eng IS '분류 영문명1';
COMMENT ON COLUMN stats_kosis_origin_data.c2_obj_nm_eng IS '분류 영문명2';
COMMENT ON COLUMN stats_kosis_origin_data.c3_obj_nm_eng IS '분류 영문명3';
COMMENT ON COLUMN stats_kosis_origin_data.c4_obj_nm_eng IS '분류 영문명4';
COMMENT ON COLUMN stats_kosis_origin_data.c5_obj_nm_eng IS '분류 영문명5';
COMMENT ON COLUMN stats_kosis_origin_data.c6_obj_nm_eng IS '분류 영문명6';
COMMENT ON COLUMN stats_kosis_origin_data.c7_obj_nm_eng IS '분류 영문명7';
COMMENT ON COLUMN stats_kosis_origin_data.c8_obj_nm_eng IS '분류 영문명8';
COMMENT ON COLUMN stats_kosis_origin_data.c1_nm IS '분류값 명1';
COMMENT ON COLUMN stats_kosis_origin_data.c2_nm IS '분류값 명2';
COMMENT ON COLUMN stats_kosis_origin_data.c3_nm IS '분류값 명3';
COMMENT ON COLUMN stats_kosis_origin_data.c4_nm IS '분류값 명4';
COMMENT ON COLUMN stats_kosis_origin_data.c5_nm IS '분류값 명5';
COMMENT ON COLUMN stats_kosis_origin_data.c6_nm IS '분류값 명6';
COMMENT ON COLUMN stats_kosis_origin_data.c7_nm IS '분류값 명7';
COMMENT ON COLUMN stats_kosis_origin_data.c8_nm IS '분류값 명8';
COMMENT ON COLUMN stats_kosis_origin_data.c1_nm_eng IS '분류값 영문명1';
COMMENT ON COLUMN stats_kosis_origin_data.c2_nm_eng IS '분류값 영문명2';
COMMENT ON COLUMN stats_kosis_origin_data.c3_nm_eng IS '분류값 영문명3';
COMMENT ON COLUMN stats_kosis_origin_data.c4_nm_eng IS '분류값 영문명4';
COMMENT ON COLUMN stats_kosis_origin_data.c5_nm_eng IS '분류값 영문명5';
COMMENT ON COLUMN stats_kosis_origin_data.c6_nm_eng IS '분류값 영문명6';
COMMENT ON COLUMN stats_kosis_origin_data.c7_nm_eng IS '분류값 영문명7';
COMMENT ON COLUMN stats_kosis_origin_data.c8_nm_eng IS '분류값 영문명8';
COMMENT ON COLUMN stats_kosis_origin_data.itm_id IS '항목 ID';
COMMENT ON COLUMN stats_kosis_origin_data.itm_nm IS '항목명';
COMMENT ON COLUMN stats_kosis_origin_data.itm_nm_eng IS '항목영문명';
COMMENT ON COLUMN stats_kosis_origin_data.unit_id IS '단위 ID';
COMMENT ON COLUMN stats_kosis_origin_data.unit_nm IS '단위명';
COMMENT ON COLUMN stats_kosis_origin_data.unit_nm_eng IS '단위 영문명';
COMMENT ON COLUMN stats_kosis_origin_data.prd_se IS '수록주기';
COMMENT ON COLUMN stats_kosis_origin_data.prd_de IS '수록시점';
COMMENT ON COLUMN stats_kosis_origin_data.dt IS '수치 값';
COMMENT ON COLUMN stats_kosis_origin_data.lst_chn_de IS '최종 수정일';
COMMENT ON COLUMN stats_kosis_origin_data.created_at IS '생성 일시';


-- ################################################
-- ## 수집된 통계 데이터의 분류/항목 정보 원본 저장용 테이블 생성
-- ################################################

CREATE TABLE kosis_item_meta_code (
id int4 GENERATED BY DEFAULT AS IDENTITY( INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START 1 CACHE 1 NO CYCLE) NOT NULL, -- system id, 고유 식별자 (자동 증가)
obj_id VARCHAR(40) NOT NULL,
obj_nm VARCHAR(300) NOT NULL,
obj_nm_eng VARCHAR(300),
itm_id VARCHAR(40) NOT NULL,
itm_nm VARCHAR(500) NOT NULL,
itm_nm_eng VARCHAR(500),
up_itm_id VARCHAR(40),
obj_id_sn SMALLINT,
unit_id VARCHAR(40),
unit_nm VARCHAR(100),
unit_eng_nm VARCHAR(100),
created_at timestamptz DEFAULT CURRENT_TIMESTAMP NOT NULL, -- 생성 일시
created_by VARCHAR(50),
updated_at TIMESTAMP,
updated_by VARCHAR(50),
CONSTRAINT pkey_kosis_item_meta_code PRIMARY KEY (id)
);

CREATE UNIQUE INDEX uidx_kosis_item_meta_code_obj_itm_id ON kosis_item_meta_code USING btree (obj_id, itm_id );
COMMENT ON TABLE kosis_item_meta_code IS 'KOSIS OpenAPI 연동용 분류/항목/단위 코드 테이블';

COMMENT ON COLUMN kosis_item_meta_code.id IS 'PK: 내부 고유 ID (자동 생성)';
COMMENT ON COLUMN kosis_item_meta_code.obj_id IS '분류 ID';
COMMENT ON COLUMN kosis_item_meta_code.obj_nm IS '분류명 (한글)';
COMMENT ON COLUMN kosis_item_meta_code.obj_nm_eng IS '분류명 (영문)';
COMMENT ON COLUMN kosis_item_meta_code.itm_id IS '자료코드 ID';
COMMENT ON COLUMN kosis_item_meta_code.itm_nm IS '자료코드명 (한글)';
COMMENT ON COLUMN kosis_item_meta_code.itm_nm_eng IS '자료코드명 (영문)';
COMMENT ON COLUMN kosis_item_meta_code.up_itm_id IS '상위 자료코드 ID';
COMMENT ON COLUMN kosis_item_meta_code.obj_id_sn IS '분류값 순번';
COMMENT ON COLUMN kosis_item_meta_code.unit_id IS '단위 ID';
COMMENT ON COLUMN kosis_item_meta_code.unit_nm IS '단위명 (한글)';
COMMENT ON COLUMN kosis_item_meta_code.unit_eng_nm IS '단위명 (영문)';
COMMENT ON COLUMN kosis_item_meta_code.created_at IS '생성 일시';
COMMENT ON COLUMN kosis_item_meta_code.created_by IS '생성자';
COMMENT ON COLUMN kosis_item_meta_code.updated_at IS '최종 수정 일시';
COMMENT ON COLUMN kosis_item_meta_code.updated_by IS '최종 수정자';





---------------------------------------------------------------------- */







(10-10/11)