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

256 lines
7.1 KiB
Markdown

# 🗄️ 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개 테이블 자동 생성
- ✅ 모든 인덱스 자동 생성
- ✅ 외래키 제약조건 설정
- ✅ 기본값 및 제약조건 설정
### **배포 시 자동 실행**
```bash
# Docker 컨테이너 시작 시 자동 실행
./start.sh → analyze_and_fix_schema.py → PIPE 테이블 생성
```
---
## 🎉 **핵심 장점**
1. **완전한 리비전 보호**: 확정 후 데이터 변경 불가
2. **체계적 이슈 관리**: 도면별/단관별 구분 관리
3. **자동 마이그레이션**: 배포 시 자동 테이블 생성
4. **성능 최적화**: 모든 주요 컬럼에 인덱스 설정
5. **데이터 무결성**: 외래키 제약조건으로 관계 보장
이제 **완벽한 PIPE 관리 시스템**의 데이터베이스 기반이 구축되었습니다! 🚀