wing-ops/database/migration/002_hns_substance.sql
htlee 63645e9f85 refactor(phase4): HNS 물질정보 DB 이전 + 정적 데이터 정리
- HNS_SUBSTANCE 테이블 마이그레이션 SQL 추가 (002_hns_substance.sql)
- HNS 검색/상세 API 구현 (hnsRouter, hnsService)
- HNS 시드 스크립트 추가 (seedHns.ts, 20종 물질 데이터)
- 프론트엔드 HNSSubstanceView: 정적 HNS_SEARCH_DB → API 호출 전환
- HNSSearchSubstance 타입 common/types/hns.ts로 분리
- Mock 데이터 이동: data/ → common/mock/ (vesselMockData, backtrackMockData)
- layerDatabase.ts → common/services/layerService.ts 이동
- layerData.ts → common/data/layerData.ts 이동
- scat/index.ts 누락 수정 + .gitignore scat 규칙 수정

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 14:52:46 +09:00

47 lines
2.7 KiB
SQL

-- ================================================================
-- 002: HNS 물질정보 테이블 (프론트엔드 정적 데이터 → DB 이전)
-- ================================================================
-- 검색용 컬럼 + 상세 데이터 JSONB 구조
-- pg_trgm 인덱스로 한글/영문 물질명 검색 지원
-- ================================================================
CREATE TABLE IF NOT EXISTS HNS_SUBSTANCE (
SBST_SN SERIAL NOT NULL, -- 물질순번
ABBREVIATION VARCHAR(50), -- 약자/제품명
NM_KR VARCHAR(200) NOT NULL, -- 국문명
NM_EN VARCHAR(200), -- 영문명
UN_NO VARCHAR(10), -- UN번호
CAS_NO VARCHAR(20), -- CAS번호
SEBC VARCHAR(50), -- SEBC 거동분류
DATA JSONB NOT NULL, -- 전체 상세 데이터
USE_YN CHAR(1) NOT NULL DEFAULT 'Y', -- 사용여부
REG_DTM TIMESTAMPTZ NOT NULL DEFAULT NOW(), -- 등록일시
CONSTRAINT PK_HNS_SUBSTANCE PRIMARY KEY (SBST_SN),
CONSTRAINT CK_HNS_SBST_USE CHECK (USE_YN IN ('Y', 'N'))
);
COMMENT ON TABLE HNS_SUBSTANCE IS 'HNS물질정보 (1,316종)';
COMMENT ON COLUMN HNS_SUBSTANCE.SBST_SN IS '물질순번';
COMMENT ON COLUMN HNS_SUBSTANCE.ABBREVIATION IS '약자/제품명 (화물적부도 코드)';
COMMENT ON COLUMN HNS_SUBSTANCE.NM_KR IS '국문명';
COMMENT ON COLUMN HNS_SUBSTANCE.NM_EN IS '영문명';
COMMENT ON COLUMN HNS_SUBSTANCE.UN_NO IS 'UN번호 (위험물 식별번호)';
COMMENT ON COLUMN HNS_SUBSTANCE.CAS_NO IS 'CAS번호 (화학물질등록번호)';
COMMENT ON COLUMN HNS_SUBSTANCE.SEBC IS 'SEBC 거동분류 (G/GD/E/ED/FE/FED/F/FD/D/S/SD)';
COMMENT ON COLUMN HNS_SUBSTANCE.DATA IS '전체 상세 데이터 (JSONB)';
COMMENT ON COLUMN HNS_SUBSTANCE.USE_YN IS '사용여부 (Y:사용, N:미사용)';
COMMENT ON COLUMN HNS_SUBSTANCE.REG_DTM IS '등록일시';
-- 텍스트 검색 인덱스 (pg_trgm)
CREATE INDEX IF NOT EXISTS IDX_HNS_SBST_NM_KR ON HNS_SUBSTANCE USING GIN(NM_KR gin_trgm_ops);
CREATE INDEX IF NOT EXISTS IDX_HNS_SBST_NM_EN ON HNS_SUBSTANCE USING GIN(NM_EN gin_trgm_ops);
CREATE INDEX IF NOT EXISTS IDX_HNS_SBST_ABBR ON HNS_SUBSTANCE USING GIN(ABBREVIATION gin_trgm_ops);
-- 코드 검색 인덱스
CREATE INDEX IF NOT EXISTS IDX_HNS_SBST_UN ON HNS_SUBSTANCE(UN_NO);
CREATE INDEX IF NOT EXISTS IDX_HNS_SBST_CAS ON HNS_SUBSTANCE(CAS_NO);
CREATE INDEX IF NOT EXISTS IDX_HNS_SBST_SEBC ON HNS_SUBSTANCE(SEBC);
-- JSONB 내 cargoCodes 검색용 인덱스
CREATE INDEX IF NOT EXISTS IDX_HNS_SBST_DATA ON HNS_SUBSTANCE USING GIN(DATA jsonb_path_ops);