feat: 최종 완전 통합 DB 스키마 - 사용자 요구사항 시스템 추가
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled

🔬 추가된 마지막 테이블들:
- requirement_types (요구사항 타입 마스터)
- user_requirements (사용자 추가 요구사항)
- 임팩테스트, 열처리, 인증서, 비파괴검사 등 10종 기본 타입

📊 최종 통계 (정확한 수치):
- 총 테이블: 38개 (모든 backend/scripts 파일 통합 완료)
- 총 인덱스: 107개 (복합, GIN, 조건부 인덱스 포함)
- 총 뷰: 5개 (통계 및 성능 모니터링)
- 총 함수: 15개 이상 (트리거, 해시 생성 등)

 완전성 검증:
- 21개 SQL 파일 모두 통합 완료
- 성능 최적화 인덱스 전체 적용
- 자동화 트리거 및 함수 모두 포함
- 기본 데이터 자동 생성 완료

🚀 배포 준비 완료:
- 다른 환경에서 한 번에 모든 테이블 생성 가능
- 기본 계정, 프로젝트, 권한, 요구사항 타입 자동 설정
This commit is contained in:
Hyungi Ahn
2025-09-10 07:48:45 +09:00
parent 389a4c2026
commit fe3fd76112

View File

@@ -956,7 +956,51 @@ CREATE TABLE IF NOT EXISTS material_tubing_mapping (
);
-- ================================
-- 10. 사용자 활동 로그 테이블 (19_add_user_tracking_fields.sql)
-- 10. 사용자 요구사항 테이블 (05_create_pipe_details_and_requirements_postgres.sql)
-- ================================
-- 요구사항 타입 마스터 테이블
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
);
-- ================================
-- 11. 사용자 활동 로그 테이블 (19_add_user_tracking_fields.sql)
-- ================================
CREATE TABLE IF NOT EXISTS user_activity_logs (
@@ -1146,6 +1190,11 @@ CREATE INDEX IF NOT EXISTS idx_files_job_no ON files(job_no);
-- 프로젝트 타입 인덱스 (17_add_project_type_column.sql)
CREATE INDEX IF NOT EXISTS idx_jobs_project_type ON jobs(project_type);
-- 사용자 요구사항 테이블 인덱스 (05_create_pipe_details_and_requirements_postgres.sql)
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);
-- ================================
-- 8. 트리거 함수 및 트리거 생성
-- ================================
@@ -1357,6 +1406,20 @@ INSERT INTO tubing_manufacturers (manufacturer_code, manufacturer_name, country)
('AS_ONE', 'AS ONE Corporation', 'Japan')
ON CONFLICT (manufacturer_code) DO NOTHING;
-- 기본 요구사항 타입 데이터 삽입 (05_create_pipe_details_and_requirements_postgres.sql)
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;
-- ================================
-- 10. 뷰 생성
-- ================================
@@ -1488,14 +1551,16 @@ BEGIN
RAISE NOTICE ' - 특수재질: special_materials, special_material_grades, special_material_patterns';
RAISE NOTICE ' - 비교시스템: material_revisions_comparison, material_comparison_details';
RAISE NOTICE ' - Tubing: tubing_categories, tubing_specifications, tubing_manufacturers, tubing_products, material_tubing_mapping';
RAISE NOTICE ' - 요구사항: requirement_types, user_requirements';
RAISE NOTICE ' - 로그: user_activity_logs';
RAISE NOTICE '👤 기본 계정: admin/admin123, system/admin123';
RAISE NOTICE '🏗️ 기본 프로젝트: TK-MP-DEV-001, TK-MP-DEMO-001, TK-MP-TEST-001';
RAISE NOTICE '🏭 기본 Tubing 제조사: SWAGELOK, PARKER, HAM_LET, SUPERLOK, FITOK, DK_LOK, GYROLOK, AS_ONE';
RAISE NOTICE '🔐 권한 시스템: 5단계 역할 + 모듈별 세분화된 권한';
RAISE NOTICE '📊 성능 최적화: 복합인덱스, GIN인덱스, 조건부인덱스 포함 50+ 인덱스 적용';
RAISE NOTICE '📊 성능 최적화: 복합인덱스, GIN인덱스, 조건부인덱스 포함 107개 인덱스 적용';
RAISE NOTICE '🔄 자동화: updated_at 트리거, 해시 자동생성, 기본 데이터 자동 생성';
RAISE NOTICE '📈 통계뷰: classification_summary, classification_performance, material_inventory_status';
RAISE NOTICE '🔧 함수: generate_material_hash, auto_generate_material_hash';
RAISE NOTICE '📝 총 테이블 수: 30+개, 인덱스: 50+개, 뷰: 6개, 함수: 10+개';
RAISE NOTICE '🔬 기본 요구사항 타입: 임팩테스트, 열처리, 인증서, 비파괴검사, 화학분석 등 10';
RAISE NOTICE '📝 총 테이블 수: 38개, 인덱스: 107개, 뷰: 5개, 함수: 15개 이상';
END $$;