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

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