- 삭제된 DB 테이블들과 관련 코드 정리: * 12개 사용하지 않는 테이블 삭제 (activity_logs, CuttingPlan, DailyIssueReports 등) * 관련 모델, 컨트롤러, 라우트 파일들 삭제 * index.js에서 삭제된 라우트들 제거 - 웹 UI 페이지 정리: * 21개 사용하지 않는 페이지 삭제 * issue-reports 폴더 전체 삭제 * 모든 사용자 권한을 그룹장 대시보드로 통일 - 데이터베이스 스키마 정리: * v1 스키마로 통일 (daily_work_reports 테이블) * JSON 데이터 임포트 스크립트 구현 * 외래키 관계 정리 및 데이터 일관성 확보 - 통합 Docker Compose 설정: * 모든 서비스를 단일 docker-compose.yml로 통합 * 20000번대 포트 유지 * JWT 시크릿 및 환경변수 설정 - 문서화: * DATABASE_SCHEMA.md: 현재 DB 스키마 문서화 * DELETED_TABLES.md: 삭제된 테이블 목록 * DELETED_PAGES.md: 삭제된 페이지 목록
167 lines
4.7 KiB
Markdown
167 lines
4.7 KiB
Markdown
# TK-FB 프로젝트 데이터베이스 스키마
|
|
|
|
**업데이트 날짜**: 2025-11-03
|
|
**데이터베이스**: hyungi
|
|
**구조**: v1 (원본 JSON 데이터 호환)
|
|
|
|
## 📊 메인 테이블
|
|
|
|
### `daily_work_reports` - 일일 작업 보고서
|
|
```sql
|
|
- id (PK, AUTO_INCREMENT)
|
|
- report_date (DATE, NOT NULL) - 작업 날짜
|
|
- worker_id (INT, NOT NULL) - 작업자 ID
|
|
- project_id (INT, NOT NULL) - 프로젝트 ID
|
|
- work_type_id (INT, NOT NULL) - 작업 유형 ID
|
|
- work_status_id (INT, DEFAULT 1) - 작업 상태 ID (1:정규, 2:에러)
|
|
- error_type_id (INT, NULL) - 에러 유형 ID
|
|
- work_hours (DECIMAL(4,2), NOT NULL) - 작업 시간
|
|
- created_at, updated_at (TIMESTAMP)
|
|
- created_by (INT, DEFAULT 1) - 작성자 user_id
|
|
- updated_by (INT, NULL) - 수정자 user_id
|
|
```
|
|
|
|
## 👥 마스터 데이터 테이블
|
|
|
|
### `workers` - 작업자 정보
|
|
```sql
|
|
- worker_id (PK, AUTO_INCREMENT)
|
|
- worker_name (VARCHAR(100), NOT NULL) - 작업자명
|
|
- join_date (DATE) - 입사일
|
|
- job_type (VARCHAR(100)) - 직종
|
|
- salary (DECIMAL(10,2)) - 급여
|
|
- annual_leave (INT) - 연차
|
|
- status (TEXT, DEFAULT 'active') - 상태
|
|
- created_at, updated_at (TIMESTAMP)
|
|
```
|
|
|
|
### `projects` - 프로젝트 정보
|
|
```sql
|
|
- project_id (PK, AUTO_INCREMENT)
|
|
- job_no (VARCHAR(50), NOT NULL) - 작업 번호
|
|
- project_name (VARCHAR(255), NOT NULL) - 프로젝트명
|
|
- contract_date (DATE) - 계약일
|
|
- due_date (DATE) - 완료 예정일
|
|
- delivery_method (VARCHAR(100)) - 납품 방법
|
|
- site (VARCHAR(100)) - 현장
|
|
- pm (VARCHAR(100)) - 프로젝트 매니저
|
|
- created_at, updated_at (TIMESTAMP)
|
|
```
|
|
|
|
### `users` - 사용자 정보
|
|
```sql
|
|
- user_id (PK, AUTO_INCREMENT)
|
|
- username (VARCHAR(100), UNIQUE, NOT NULL) - 사용자명
|
|
- password (VARCHAR(255), NOT NULL) - 비밀번호 (해시)
|
|
- role (VARCHAR(30)) - 역할
|
|
- name (VARCHAR(50)) - 실명
|
|
- email (VARCHAR(255), UNIQUE) - 이메일
|
|
- worker_id (INT, FK) - 연결된 작업자 ID
|
|
- is_active (TINYINT(1), DEFAULT 1) - 활성 상태
|
|
- access_level (VARCHAR(30)) - 접근 레벨
|
|
- last_login_at (DATETIME) - 마지막 로그인
|
|
- password_changed_at (DATETIME) - 비밀번호 변경일
|
|
- failed_login_attempts (INT, DEFAULT 0) - 로그인 실패 횟수
|
|
- locked_until (DATETIME) - 잠금 해제 시간
|
|
- created_at, updated_at (TIMESTAMP)
|
|
```
|
|
|
|
## 📋 코드 테이블
|
|
|
|
### `work_types` - 작업 유형
|
|
```sql
|
|
- id (PK, AUTO_INCREMENT)
|
|
- name (VARCHAR(100), NOT NULL) - 유형명
|
|
- description (TEXT) - 설명
|
|
- category (VARCHAR(50)) - 카테고리
|
|
- created_at, updated_at (TIMESTAMP)
|
|
|
|
데이터:
|
|
1. Base(구조물)
|
|
2. Vessel(용기)
|
|
3. Piping Assembly(배관)
|
|
4. 작업대기
|
|
```
|
|
|
|
### `work_status_types` - 작업 상태 유형
|
|
```sql
|
|
- id (PK, AUTO_INCREMENT)
|
|
- name (VARCHAR(50), NOT NULL) - 상태명
|
|
- description (TEXT) - 설명
|
|
- is_error (TINYINT(1), DEFAULT 0) - 에러 여부
|
|
- created_at (TIMESTAMP)
|
|
|
|
데이터:
|
|
1. 정규 (is_error: 0)
|
|
2. 에러 (is_error: 1)
|
|
```
|
|
|
|
### `error_types` - 에러 유형
|
|
```sql
|
|
- id (PK, AUTO_INCREMENT)
|
|
- name (VARCHAR(100), NOT NULL) - 에러명
|
|
- description (TEXT) - 설명
|
|
- severity (ENUM: low/medium/high/critical) - 심각도
|
|
- solution_guide (TEXT) - 해결 가이드
|
|
- created_at, updated_at (TIMESTAMP)
|
|
|
|
데이터:
|
|
1. 설계미스
|
|
2. 외주작업 불량
|
|
3. 입고지연
|
|
4. 작업불량
|
|
5. 설비고장
|
|
6. 검사불량
|
|
```
|
|
|
|
### `tasks` - 작업 정보
|
|
```sql
|
|
- task_id (PK, AUTO_INCREMENT)
|
|
- category (VARCHAR(255), NOT NULL) - 카테고리
|
|
- subcategory (VARCHAR(255)) - 하위 카테고리
|
|
- task_name (VARCHAR(255), NOT NULL) - 작업명
|
|
- description (TEXT) - 설명
|
|
- created_at, updated_at (TIMESTAMP)
|
|
```
|
|
|
|
## 📝 기타 테이블
|
|
|
|
### `IssueTypes` - 이슈 유형
|
|
### `WorkReports` - 작업 보고서 (별도)
|
|
### `login_logs` - 로그인 로그
|
|
### `password_change_logs` - 비밀번호 변경 로그
|
|
### `work_report_audit_log` - 작업 보고서 감사 로그
|
|
|
|
## 🔗 관계 (Foreign Keys)
|
|
|
|
```
|
|
daily_work_reports.worker_id → workers.worker_id
|
|
daily_work_reports.project_id → projects.project_id
|
|
daily_work_reports.work_type_id → work_types.id
|
|
daily_work_reports.work_status_id → work_status_types.id
|
|
daily_work_reports.error_type_id → error_types.id
|
|
daily_work_reports.created_by → users.user_id
|
|
|
|
users.worker_id → workers.worker_id
|
|
```
|
|
|
|
## 📈 인덱스
|
|
|
|
```sql
|
|
daily_work_reports:
|
|
- idx_report_date (report_date)
|
|
- idx_worker_date (worker_id, report_date)
|
|
- idx_project_date (project_id, report_date)
|
|
- idx_work_type (work_type_id)
|
|
- idx_work_status (work_status_id)
|
|
- idx_error_type (error_type_id)
|
|
- idx_created_by (created_by)
|
|
```
|
|
|
|
## ⚠️ 주의사항
|
|
|
|
1. **v1 구조 사용**: 원본 JSON 데이터와 완전 호환
|
|
2. **테이블명**: 소문자 사용 (workers, projects, users)
|
|
3. **작업 상태**: 1=정규, 2=에러
|
|
4. **에러 유형**: work_status_id=2일 때만 error_type_id 사용
|