-- 파이프 상세 정보 및 사용자 요구사항 테이블 생성 (PostgreSQL) -- 2024-01-XX -- 파이프 상세 정보 테이블 CREATE TABLE IF NOT EXISTS pipe_details ( id SERIAL PRIMARY KEY, file_id INTEGER NOT NULL, -- 재질 정보 material_standard VARCHAR(50), -- ASTM, KS, JIS 등 material_grade VARCHAR(50), -- A106, A53, STPG370 등 material_type VARCHAR(50), -- CARBON, STAINLESS 등 -- 파이프 특화 정보 manufacturing_method VARCHAR(50), -- SEAMLESS, WELDED, CAST end_preparation VARCHAR(50), -- BOTH_ENDS_BEVELED, ONE_END_BEVELED, NO_BEVEL schedule VARCHAR(50), -- SCH 10, 20, 40, 80 등 wall_thickness VARCHAR(50), -- 벽두께 정보 -- 치수 정보 nominal_size VARCHAR(50), -- MAIN_NOM (인치, 직경) length_mm DECIMAL(10, 3), -- LENGTH (길이) -- 신뢰도 material_confidence DECIMAL(3, 2), manufacturing_confidence DECIMAL(3, 2), end_prep_confidence DECIMAL(3, 2), schedule_confidence DECIMAL(3, 2), -- 메타데이터 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (file_id) REFERENCES files(id) ON DELETE CASCADE ); -- 요구사항 타입 마스터 테이블 CREATE TABLE IF NOT EXISTS requirement_types ( id SERIAL PRIMARY KEY, type_code VARCHAR(50) UNIQUE NOT NULL, -- 'IMPACT_TEST', 'HEAT_TREATMENT' 등 type_name VARCHAR(100) NOT NULL, -- '임팩테스트', '열처리' 등 category VARCHAR(50) NOT NULL, -- 'TEST', 'TREATMENT', 'CERTIFICATION', 'CUSTOM' 등 description TEXT, -- 타입 설명 is_active BOOLEAN DEFAULT TRUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- 사용자 추가 요구사항 테이블 CREATE TABLE IF NOT EXISTS user_requirements ( id SERIAL PRIMARY KEY, file_id INTEGER NOT NULL, -- 요구사항 타입 requirement_type VARCHAR(50) NOT NULL, -- 'IMPACT_TEST', 'HEAT_TREATMENT', 'CUSTOM_SPEC', 'CERTIFICATION' 등 -- 요구사항 내용 requirement_title VARCHAR(200) NOT NULL, -- '임팩테스트', '열처리', '인증서' 등 requirement_description TEXT, -- 상세 설명 requirement_spec TEXT, -- 구체적 스펙 (예: "Charpy V-notch -20°C") -- 상태 관리 status VARCHAR(20) DEFAULT 'PENDING', -- 'PENDING', 'IN_PROGRESS', 'COMPLETED', 'CANCELLED' priority VARCHAR(20) DEFAULT 'NORMAL', -- 'LOW', 'NORMAL', 'HIGH', 'URGENT' -- 담당자 정보 assigned_to VARCHAR(100), -- 담당자명 due_date DATE, -- 완료 예정일 -- 메타데이터 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (file_id) REFERENCES files(id) ON DELETE CASCADE ); -- 인덱스 생성 CREATE INDEX IF NOT EXISTS idx_pipe_details_file_id ON pipe_details(file_id); CREATE INDEX IF NOT EXISTS idx_user_requirements_file_id ON user_requirements(file_id); CREATE INDEX IF NOT EXISTS idx_user_requirements_status ON user_requirements(status); CREATE INDEX IF NOT EXISTS idx_user_requirements_type ON user_requirements(requirement_type); -- 기본 요구사항 타입 데이터 삽입 INSERT INTO requirement_types (type_code, type_name, category, description) VALUES ('IMPACT_TEST', '임팩테스트', 'TEST', 'Charpy V-notch, Izod 등의 충격 시험'), ('HEAT_TREATMENT', '열처리', 'TREATMENT', '정규화, 어닐링, 템퍼링 등의 열처리'), ('CERTIFICATION', '인증서', 'CERTIFICATION', '재질증명서, 시험성적서 등'), ('CUSTOM_SPEC', '특수사양', 'CUSTOM', '고객 특별 요구사항'), ('NDT_TEST', '비파괴검사', 'TEST', '초음파, 방사선, 자분탐상 등'), ('CHEMICAL_ANALYSIS', '화학분석', 'TEST', '화학성분 분석'), ('MECHANICAL_TEST', '기계적성질', 'TEST', '인장, 압축, 굽힘 시험'), ('SURFACE_TREATMENT', '표면처리', 'TREATMENT', '도금, 도장, 패시베이션 등'), ('DIMENSIONAL_CHECK', '치수검사', 'INSPECTION', '치수, 형상 검사'), ('WELDING_SPEC', '용접사양', 'SPEC', '용접 방법, 용접재 등') ON CONFLICT (type_code) DO NOTHING; -- 트리거 함수 생성 (updated_at 자동 업데이트) CREATE OR REPLACE FUNCTION update_updated_at_column() RETURNS TRIGGER AS $$ BEGIN NEW.updated_at = CURRENT_TIMESTAMP; RETURN NEW; END; $$ language 'plpgsql'; -- 트리거 생성 CREATE TRIGGER update_pipe_details_timestamp BEFORE UPDATE ON pipe_details FOR EACH ROW EXECUTE FUNCTION update_updated_at_column(); CREATE TRIGGER update_user_requirements_timestamp BEFORE UPDATE ON user_requirements FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();