Files
TK-FB-Project/_archive/DATABASE_SCHEMA.md
Hyungi Ahn 05843da1c4 refactor(db,frontend): Improve queries and modularize frontend
- Replaced SELECT* queries in 8 models with explicit columns.
- Began modularizing work-report-calendar.js by creating CalendarAPI.js, CalendarState.js, and CalendarView.js.
- Refactored manage-project.js to use global API helpers.
- Fixed API container crash by adding missing volume mounts to docker-compose.yml.
- Added new migration for missing columns in the projects table.
- Documented current DB schema and deployment notes.
2025-12-19 12:42:24 +09:00

4.7 KiB

TK-FB 프로젝트 데이터베이스 스키마

업데이트 날짜: 2025-11-03
데이터베이스: hyungi
구조: v1 (원본 JSON 데이터 호환)

📊 메인 테이블

daily_work_reports - 일일 작업 보고서

- 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 - 작업자 정보

- 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 - 프로젝트 정보

- 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 - 사용자 정보

- 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 - 작업 유형

- 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 - 작업 상태 유형

- 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 - 에러 유형

- 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 - 작업 정보

- 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

📈 인덱스

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 사용