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