Files
M-Project/DATABASE_SCHEMA.md
hyungi b024a178d0 feat: 목록 관리 및 보고서 페이지 개선
- 목록 관리 페이지에 고급 필터링 시스템 추가
  - 프로젝트별, 검토상태별, 날짜별 필터링
  - 검토 완료/필요 항목 시각적 구분 및 정렬
  - 해결 시간 입력 + 확인 버튼으로 검토 완료 처리

- 부적합 조회 페이지에 동일한 필터링 기능 적용
  - 검토 상태에 따른 카드 스타일링 (음영 처리)
  - JavaScript 템플릿 리터럴 오류 수정

- 보고서 페이지 프로젝트별 분석 기능 추가
  - 프로젝트 선택 드롭다운 추가
  - 총 작업 공수를 프로젝트별 일일공수 데이터로 계산
  - 부적합 처리 시간, 카테고리 분석, 상세 목록 모두 프로젝트별 필터링
  - localStorage 키 이름 통일 (daily-work-data)
2025-10-24 10:13:32 +09:00

5.0 KiB

M-Project 데이터베이스 스키마 문서

개요

작업보고서 시스템의 PostgreSQL 데이터베이스 스키마 정의


테이블 구조

1. users (사용자)

사용자 계정 정보를 저장하는 테이블

컬럼명 타입 제약조건 설명
id INTEGER PRIMARY KEY, AUTO_INCREMENT 사용자 고유 ID
username VARCHAR UNIQUE, NOT NULL, INDEX 로그인 아이디
hashed_password VARCHAR NOT NULL 암호화된 비밀번호
full_name VARCHAR NULL 사용자 실명
role ENUM DEFAULT 'user' 사용자 권한 (admin, user)
is_active BOOLEAN DEFAULT TRUE 계정 활성화 상태
created_at TIMESTAMP DEFAULT NOW() 계정 생성일시

인덱스:

  • idx_users_username ON username
  • idx_users_role ON role

ENUM 값:

  • role: 'admin', 'user'

2. projects (프로젝트)

프로젝트 정보를 저장하는 테이블

컬럼명 타입 제약조건 설명
id INTEGER PRIMARY KEY, AUTO_INCREMENT 프로젝트 고유 ID
job_no VARCHAR(50) UNIQUE, NOT NULL, INDEX Job 번호
project_name VARCHAR(200) NOT NULL 프로젝트 이름
created_by_id INTEGER FOREIGN KEY → users(id) 생성자 ID
created_at TIMESTAMP DEFAULT NOW() 생성일시
is_active BOOLEAN DEFAULT TRUE 활성 상태

인덱스:

  • idx_projects_job_no ON job_no
  • idx_projects_created_by_id ON created_by_id
  • idx_projects_is_active ON is_active

외래키:

  • created_by_id → users(id)

3. issues (부적합 사항)

부적합 사항 정보를 저장하는 테이블

컬럼명 타입 제약조건 설명
id INTEGER PRIMARY KEY, AUTO_INCREMENT 부적합 사항 고유 ID
photo_path VARCHAR NULL 첫 번째 사진 경로
photo_path2 VARCHAR NULL 두 번째 사진 경로
category ENUM NOT NULL 부적합 카테고리
description TEXT NOT NULL 부적합 사항 설명
status ENUM DEFAULT 'new' 처리 상태
reporter_id INTEGER FOREIGN KEY → users(id) 보고자 ID
report_date TIMESTAMP DEFAULT NOW() 보고일시
work_hours FLOAT DEFAULT 0 작업 시간
detail_notes TEXT NULL 상세 메모

인덱스:

  • idx_issues_reporter_id ON reporter_id
  • idx_issues_status ON status
  • idx_issues_category ON category
  • idx_issues_report_date ON report_date

ENUM 값:

  • category: 'material_missing', 'design_error', 'incoming_defect', 'inspection_miss'
  • status: 'new', 'progress', 'complete'

외래키:

  • reporter_id → users(id)

4. daily_works (일일 공수)

일일 작업 공수 정보를 저장하는 테이블

컬럼명 타입 제약조건 설명
id INTEGER PRIMARY KEY, AUTO_INCREMENT 일일 공수 고유 ID
date TIMESTAMP NOT NULL, INDEX 작업 날짜
worker_count INTEGER NOT NULL 작업자 수
regular_hours FLOAT NOT NULL 정규 시간
overtime_workers INTEGER DEFAULT 0 야근 작업자 수
overtime_hours FLOAT DEFAULT 0 야근 시간
overtime_total FLOAT DEFAULT 0 야근 총 시간
total_hours FLOAT NOT NULL 총 작업 시간
created_by_id INTEGER FOREIGN KEY → users(id) 생성자 ID
created_at TIMESTAMP DEFAULT NOW() 생성일시

인덱스:

  • idx_daily_works_date ON date
  • idx_daily_works_created_by_id ON created_by_id

외래키:

  • created_by_id → users(id)

관계도 (Relationships)

users (1) ←→ (N) projects
  ↓
users (1) ←→ (N) issues
  ↓
users (1) ←→ (N) daily_works

마이그레이션 파일 목록

  1. 001_init.sql - 초기 테이블 생성
  2. 002_add_second_photo.sql - issues 테이블에 두 번째 사진 필드 추가
  3. 003_update_categories.sql - 카테고리 업데이트
  4. 004_fix_category_values.sql - 카테고리 값 수정
  5. 005_recreate_enum_type.sql - ENUM 타입 재생성
  6. 006_add_projects_table.sql - projects 테이블 추가

기본 데이터

관리자 계정

  • Username: hyungi
  • Password: djg3-jj34-X3Q3
  • Role: admin
  • Full Name: 관리자

데이터베이스 연결 정보

  • Host: localhost (Docker 내부: db)
  • Port: 16432 (외부), 5432 (내부)
  • Database: mproject
  • Username: mproject
  • Password: mproject2024

주의사항

  1. 비밀번호 암호화: bcrypt 해시 사용
  2. 시간대: 모든 TIMESTAMP는 Asia/Seoul (KST) 기준
  3. 파일 업로드: 사진 파일은 /app/uploads 디렉토리에 저장
  4. 소프트 삭제: projects 테이블은 is_active 필드로 소프트 삭제 구현
  5. 인덱스 최적화: 자주 조회되는 컬럼에 인덱스 설정

백업 및 복구

백업

docker-compose exec db pg_dump -U mproject mproject > backup.sql

복구

docker-compose exec -T db psql -U mproject mproject < backup.sql