
-- ## 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 '최종 수정자';





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







