Files
TK-BOM-Project/PIPE_DATABASE_TABLES.md
Hyungi Ahn 8f42a1054e
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
🔧 완전한 스키마 자동화 시스템 구축
 주요 기능:
- 완전한 데이터베이스 스키마 분석 및 자동 마이그레이션 시스템
- 44개 테이블 완전 지원 (운영 서버 43개 + 1개 추가)
- 누락된 테이블/컬럼 자동 감지 및 생성

🔧 해결된 스키마 문제:
- users.status 컬럼 누락 → 자동 추가
- files 테이블 4개 컬럼 누락 → 자동 추가
- materials 테이블 22개 컬럼 누락 → 자동 추가
- support_details, purchase_requests, purchase_request_items 테이블 누락 → 자동 생성
- material_purchase_tracking.description, purchase_status 컬럼 누락 → 자동 추가

🚀 자동화 도구:
- schema_analyzer.py: 코드와 DB 스키마 비교 분석
- auto_migrator.py: 자동 마이그레이션 실행
- docker_migrator.py: Docker 환경용 간편 마이그레이션
- schema_monitor.py: 실시간 스키마 모니터링

📋 리비전 관리 시스템:
- 8개 카테고리별 리비전 페이지 구현
- PIPE Cutting Plan 관리 시스템
- PIPE Issue Management 시스템
- 완전한 리비전 비교 및 추적 기능

🎯 사용법:
docker exec tk-mp-backend python3 scripts/docker_migrator.py

앞으로 스키마 문제가 발생하면 위 명령 하나로 자동 해결!
2025-10-21 10:34:45 +09:00

7.1 KiB

🗄️ PIPE 관리 시스템 데이터베이스 테이블 가이드

📋 테이블 개요

PIPE 관리 시스템은 7개의 전용 테이블로 구성되어 있으며, 각각 고유한 역할을 담당합니다.


🔧 1. pipe_cutting_plans

용도: PIPE Cutting Plan의 단관 정보 저장

주요 컬럼

  • job_no: 작업 번호
  • area: 구역 정보 (#01, #02 등)
  • drawing_name: 도면명 (P&ID-001)
  • line_no: 라인번호 (LINE-A-001)
  • material_grade: 재질 (A106 GR.B)
  • schedule_spec: 스케줄 (SCH40, SCH80)
  • nominal_size: 호칭 크기 (4", 6")
  • length_mm: 길이 (mm 단위)
  • end_preparation: 끝단 가공 (무개선, 한개선, 양개선)

사용 시점

  • Cutting Plan 작성 시 단관 정보 저장
  • 구역별 도면 할당 완료 후
  • 라인번호 입력 완료 후

🔄 2. pipe_revision_comparisons

용도: PIPE 리비전 비교 결과 및 통계 저장

주요 컬럼

  • job_no: 작업 번호
  • current_file_id: 현재 파일 ID
  • previous_cutting_plan_id: 이전 Cutting Plan ID
  • total_drawings: 전체 도면 수
  • changed_drawings: 변경된 도면 수
  • total_segments: 전체 단관 수
  • added_segments: 추가된 단관 수
  • removed_segments: 삭제된 단관 수
  • modified_segments: 수정된 단관 수

사용 시점

  • 새로운 BOM 업로드 시 (Cutting Plan 작성 후)
  • 기존 Cutting Plan과 신규 BOM 비교 시
  • 리비전 변경사항 분석 시

📝 3. pipe_revision_changes

용도: PIPE 리비전 변경사항 상세 정보 저장

주요 컬럼

  • comparison_id: 비교 결과 ID (pipe_revision_comparisons 참조)
  • drawing_name: 도면명
  • change_type: 변경 유형 (added, removed, modified, unchanged)
  • old_*: 이전 데이터 (라인번호, 재질, 길이 등)
  • new_*: 새로운 데이터 (라인번호, 재질, 길이 등)
  • change_reason: 변경 사유

사용 시점

  • 리비전 비교 수행 시 각 단관별 변경사항 기록
  • 변경사항 상세 분석 시
  • 리비전 이력 추적 시

📸 4. pipe_issue_snapshots

용도: 이슈 관리용 스냅샷 메타데이터 저장

주요 컬럼

  • job_no: 작업 번호
  • snapshot_name: 스냅샷 이름
  • is_active: 활성 상태
  • is_locked: 잠금 상태 (이슈 관리 시작 시 true)
  • total_segments: 총 단관 수
  • total_drawings: 총 도면 수
  • created_at: 생성 시간
  • locked_at: 잠금 시간

사용 시점

  • Cutting Plan 확정 시 자동 생성
  • 이슈 관리 시작 시 잠금
  • 리비전 보호 활성화 시

🔒 5. pipe_issue_segments

용도: 스냅샷된 단관 정보 저장 (고정 데이터)

주요 컬럼

  • snapshot_id: 스냅샷 ID (pipe_issue_snapshots 참조)
  • area: 구역 정보
  • drawing_name: 도면명
  • line_no: 라인번호
  • material_grade: 재질
  • length_mm: 길이
  • end_preparation: 끝단 가공
  • original_cutting_plan_id: 원본 Cutting Plan ID

사용 시점

  • Cutting Plan 확정 시 현재 데이터 복사
  • 이슈 관리 페이지에서 기준 데이터로 사용
  • 리비전과 무관하게 고정된 데이터 제공

📋 6. pipe_drawing_issues

용도: 도면 전반적인 이슈 저장

주요 컬럼

  • snapshot_id: 스냅샷 ID (pipe_issue_snapshots 참조)
  • area: 구역 정보
  • drawing_name: 도면명
  • issue_description: 이슈 설명 (자유 텍스트)
  • severity: 심각도 (low, medium, high, critical)
  • status: 상태 (open, in_progress, resolved)
  • resolution_notes: 해결 방법
  • reported_by: 보고자

사용 시점

  • 현장에서 도면 전체에 대한 문제 발견 시
  • 배관 간섭, 라우팅 변경 등 전반적 이슈 기록
  • 설계 변경 요청 시

예시

구역: #01
도면: P&ID-001
이슈: "도면 A 전체적으로 배관 간섭이 심함. 현장 여건상 일부 루트 변경 필요"

🔧 7. pipe_segment_issues

용도: 개별 단관별 이슈 저장

주요 컬럼

  • snapshot_id: 스냅샷 ID (pipe_issue_snapshots 참조)
  • segment_id: 단관 ID (pipe_issue_segments 참조)
  • issue_description: 이슈 설명
  • issue_type: 이슈 유형 (cutting, installation, material, routing, other)
  • length_change: 길이 변경량 (+/- mm)
  • new_length: 최종 길이
  • material_change: 재질 변경 정보
  • severity: 심각도
  • status: 상태

사용 시점

  • 개별 단관에서 문제 발견 시
  • 현장 절단, 설치 문제 등 구체적 이슈 기록
  • 단관별 수정사항 추적

예시

구역: #01
도면: P&ID-001
라인번호: LINE-A-001
이슈: "설치가 힘들어 30mm 절단함"
길이 변경: -30mm
최종 길이: 1470mm

🔗 테이블 관계도

pipe_cutting_plans (단관 정보)
    ↓
pipe_revision_comparisons (리비전 비교)
    ↓
pipe_revision_changes (변경사항 상세)

pipe_cutting_plans (단관 정보)
    ↓ (확정 시 스냅샷)
pipe_issue_snapshots (스냅샷 메타)
    ↓
pipe_issue_segments (고정된 단관 정보)
    ↓
pipe_segment_issues (단관별 이슈)

pipe_issue_snapshots (스냅샷 메타)
    ↓
pipe_drawing_issues (도면별 이슈)

🎯 데이터 흐름

1. Cutting Plan 작성

BOM 업로드 → PIPE 데이터 추출 → pipe_cutting_plans 저장

2. 리비전 발생

새 BOM 업로드 → 기존 데이터 비교 → pipe_revision_comparisons + pipe_revision_changes 저장

3. Cutting Plan 확정

확정 버튼 클릭 → pipe_issue_snapshots 생성 → pipe_issue_segments 복사 (고정)

4. 이슈 관리

현장 이슈 발생 → pipe_drawing_issues (도면별) 또는 pipe_segment_issues (단관별) 저장

🔒 리비전 보호 메커니즘

확정 전

  • pipe_cutting_plans: 리비전 시 변경됨
  • Excel 내보내기: 현재 데이터 기준 (변동 가능)

확정 후

  • pipe_issue_snapshots: 잠금 상태 🔒
  • pipe_issue_segments: 고정된 데이터
  • Excel 내보내기: 스냅샷 데이터 기준 (고정)
  • 이슈 관리: 고정된 데이터 기준으로 진행

📊 자동 마이그레이션

모든 PIPE 관련 테이블은 backend/scripts/analyze_and_fix_schema.py에 포함되어 있어 자동으로 생성됩니다.

마이그레이션 포함 사항

  • 7개 테이블 자동 생성
  • 모든 인덱스 자동 생성
  • 외래키 제약조건 설정
  • 기본값 및 제약조건 설정

배포 시 자동 실행

# Docker 컨테이너 시작 시 자동 실행
./start.sh → analyze_and_fix_schema.py → PIPE 테이블 생성

🎉 핵심 장점

  1. 완전한 리비전 보호: 확정 후 데이터 변경 불가
  2. 체계적 이슈 관리: 도면별/단관별 구분 관리
  3. 자동 마이그레이션: 배포 시 자동 테이블 생성
  4. 성능 최적화: 모든 주요 컬럼에 인덱스 설정
  5. 데이터 무결성: 외래키 제약조건으로 관계 보장

이제 완벽한 PIPE 관리 시스템의 데이터베이스 기반이 구축되었습니다! 🚀