Files
SR-SYSTEM/docs/03-database-schema.md
T
2026-06-02 13:50:39 +09:00

9.8 KiB

데이터베이스 설계서 (Database Schema)

1. 공통 원칙

  • Soft Delete: 모든 테이블 is_deleted CHAR(1) DEFAULT 'N' — 물리 삭제 금지
  • Audit: 모든 테이블 created_at TIMESTAMP, updated_at TIMESTAMP — 감사 로그
  • ID 생성: Sequence + allocationSize=50 — Oracle 11g 최적화
  • 공통 코드: 드롭다운/상태값은 Common Code 테이블에서 동적 관리

2. 공통 코드 인프라

TB_COMMON_CODE_GROUP (대분류)

컬럼 타입 제약 설명
GROUP_CODE VARCHAR2(50) PK 'PROJECT_TYPE', 'ISSUE_STATUS'
GROUP_NAME VARCHAR2(100) NOT NULL '프로젝트 유형', '이슈 상태'
DESCRIPTION CLOB NULLABLE

TB_COMMON_CODE (소분류)

컬럼 타입 제약 설명
CODE_ID NUMBER PK (Seq) 시퀀스 자동 증가
GROUP_CODE VARCHAR2(50) FK TB_COMMON_CODE_GROUP 참조
CODE_VALUE VARCHAR2(50) UNIQUE, NOT NULL 내부 로직 코드 ('BUG', 'SI')
CODE_NAME VARCHAR2(100) NOT NULL 화면 표시용 ('결함 및 장애')
OPTION_VAL_1 VARCHAR2(100) NULLABLE UI 뱃지 색상
OPTION_VAL_2 VARCHAR2(100) NULLABLE SLA 가중치
OPTION_VAL_3 VARCHAR2(100) NULLABLE 연동 키
SORT_ORDER NUMBER DEFAULT 1 노출 순서
IS_ACTIVE CHAR(1) DEFAULT 'Y' 'Y'/'N'
DESCRIPTION CLOB NULLABLE

공통 코드 예시 데이터:

GROUP_CODE CODE_VALUE CODE_NAME OPTION_VAL_1 (색상) OPTION_VAL_2 (SLA)
ISSUE_STATUS OPEN 접수 blue 48h
ISSUE_STATUS IN_PROGRESS 처리중 orange -
ISSUE_STATUS RESOLVED 해결 green -
ISSUE_STATUS CLOSED 종료 gray -
PRIORITY CRITICAL 긴급 red 4h
PRIORITY HIGH 높음 orange 24h
PRIORITY NORMAL 보통 blue 72h
PRIORITY LOW 낮음 gray 120h

3. 도메인 테이블 명세

TB_EMPLOYEE (직원 마스터)

컬럼 타입 제약 설명
EMP_ID NUMBER PK (Seq) 시스템 고유 사번
LOGIN_ID VARCHAR2(50) UNIQUE, NOT NULL 인증용 ID
PASSWORD VARCHAR2(255) NOT NULL BCrypt 암호화
NAME VARCHAR2(50) NOT NULL 실명
EMAIL VARCHAR2(100) UNIQUE, NOT NULL 회사 이메일
ROLE_CODE VARCHAR2(20) NOT NULL ADMIN / MANAGER / EMPLOYEE
EMP_STATUS VARCHAR2(20) NOT NULL ACTIVE / ON_LEAVE / RESIGNED
DISPATCH_STATUS VARCHAR2(20) NOT NULL WAITING / DISPATCHED
JOINED_DATE DATE NOT NULL 입사일
LEFT_DATE DATE NULLABLE 퇴사일
IS_DELETED CHAR(1) DEFAULT 'N' Soft Delete

TB_PROJECT (프로젝트 마스터)

컬럼 타입 제약 설명
PROJECT_ID NUMBER PK (Seq)
PROJECT_TYPE VARCHAR2(20) NOT NULL SI / SM / MIGRATION
PROJECT_NAME VARCHAR2(150) NOT NULL 공식 프로젝트명
CONTRACT_COMPANY VARCHAR2(100) NOT NULL 원청 계약사
END_USER_COMPANY VARCHAR2(100) NOT NULL 최종 고객사
CONTRACT_TYPE VARCHAR2(20) NOT NULL TURN_KEY / MM
STATUS VARCHAR2(20) NOT NULL PREPARING / ONGOING / COMPLETED / HOLD
START_DATE DATE NOT NULL
END_DATE DATE NOT NULL
WORK_LOCATION_TYPE VARCHAR2(20) NOT NULL ON_SITE / REMOTE / HYBRID
WORK_ADDRESS VARCHAR2(255) NOT NULL 파견지 물리 주소
TECH_ENVIRONMENT CLOB NULLABLE 기술 스택 묶음
MAIN_TASK_DESC CLOB NOT NULL 구축 목적 요약
CLIENT_PM_NAME VARCHAR2(50) NULLABLE
CLIENT_PM_CONTACT VARCHAR2(100) NULLABLE
INTERNAL_MANAGER_ID NUMBER FK → TB_EMPLOYEE 내부 영업 담당자

TB_DISPATCH_HISTORY (파견 투입 이력 = 포트폴리오)

컬럼 타입 제약 설명
DISPATCH_ID NUMBER PK (Seq) 포트폴리오 라인 단건
EMP_ID NUMBER FK → TB_EMPLOYEE
PROJECT_ID NUMBER FK → TB_PROJECT
START_DATE DATE NOT NULL 실제 투입일
END_DATE DATE NULLABLE NULL=현재 투입중
ROLE_TITLE VARCHAR2(50) NOT NULL PM / PL / BACKEND / FRONTEND / DBA
CONTRIBUTION_RATE NUMBER DEFAULT 100 투입률(%)
INDIVIDUAL_TECH VARCHAR2(255) NOT NULL 개인이 직접 사용한 기술
PERFORMED_TASKS CLOB NOT NULL 상세 수행 업무
ACHIEVEMENTS CLOB NULLABLE 트러블슈팅 사례
CLIENT_FEEDBACK CLOB NULLABLE 고객사 PM 평가 (본사 은닉)
INTERNAL_RATING NUMBER NULLABLE 1~5

TB_ISSUE_TICKET (SR 티켓 마스터)

컬럼 타입 제약 설명
TICKET_ID NUMBER PK (Seq) 고유 식별 번호
PROJECT_ID NUMBER FK → TB_PROJECT 발생 현장
REQUESTER_ID NUMBER FK → TB_EMPLOYEE SOS 발행 직원
ASSIGNEE_ID NUMBER FK → TB_EMPLOYEE 본사 해결사
CATEGORY VARCHAR2(30) NOT NULL BUG / FEATURE / SUPPORT / QA
PRIORITY VARCHAR2(20) NOT NULL LOW / NORMAL / HIGH / CRITICAL
TITLE VARCHAR2(255) NOT NULL
DESCRIPTION CLOB NOT NULL 에러 재현 경로
STATUS VARCHAR2(20) NOT NULL OPEN / ASSIGNED / IN_PROGRESS / RESOLVED / CLOSED
DUE_DATE DATE NULLABLE SLA 데드라인
RESOLVED_AT TIMESTAMP NULLABLE 해결 일시
RESOLUTION_NOTE CLOB NULLABLE 조치 내역
SLA_WARN_FLAG CHAR(1) DEFAULT 'N' 배치 알림 중복 방지

TB_TICKET_COMMENT (티켓 타임라인 댓글)

컬럼 타입 제약 설명
COMMENT_ID NUMBER PK (Seq)
TICKET_ID NUMBER FK → TB_ISSUE_TICKET
USER_ID NUMBER FK → TB_EMPLOYEE 작성자
COMMENT_TEXT CLOB NOT NULL 분석 의견
ATTACHED_FILE_URL VARCHAR2(255) NULLABLE 첨부파일 경로

TB_WORK_REPORT (업무 보고서)

컬럼 타입 제약 설명
REPORT_ID NUMBER PK (Seq)
DISPATCH_ID NUMBER FK → TB_DISPATCH_HISTORY
USER_ID NUMBER FK → TB_EMPLOYEE 작성자
REPORT_TYPE VARCHAR2(20) NOT NULL DAILY / WEEKLY / MONTHLY / RETURN
TARGET_DATE DATE NOT NULL 기준일
COMPLETED_TASKS CLOB NOT NULL SR 연동 자동 취합 영역
PLANNED_TASKS CLOB NOT NULL 차기 계획
ISSUES_AND_RISKS CLOB NULLABLE 특이사항
SUPPORT_REQUESTED CLOB NULLABLE 본사 지원 요청
STATUS VARCHAR2(20) NOT NULL DRAFT / SUBMITTED / APPROVED / REJECTED
REVIEWER_ID NUMBER FK → TB_EMPLOYEE 결재자
REVIEW_COMMENT CLOB NULLABLE 반려 사유

TB_EQUIPMENT (IT 자산 마스터)

컬럼 타입 제약 설명
EQUIPMENT_ID NUMBER PK (Seq)
EQUIPMENT_TYPE VARCHAR2(50) NOT NULL LAPTOP / MONITOR / TEST_DEVICE / ACCESSORY
MANUFACTURER VARCHAR2(50) NOT NULL Apple / LG / Samsung
MODEL_NAME VARCHAR2(100) NOT NULL MacBook Pro 16 M3
SERIAL_NUMBER VARCHAR2(100) UNIQUE, NOT NULL 기기 고유 바코드
ASSET_CODE VARCHAR2(50) UNIQUE, NOT NULL HQ-LP-2026-0001
SPECIFICATIONS CLOB (JSON) NOT NULL JSON 다품종 사양
STATUS VARCHAR2(20) NOT NULL AVAILABLE / IN_USE / REPAIRING / RETIRED / LOST
PURCHASE_DATE DATE NOT NULL
WARRANTY_EXP_DATE DATE NOT NULL
VERSION NUMBER DEFAULT 0 낙관적 락

TB_EQUIPMENT_ASSIGNMENT (장비 지급/반납 이력)

컬럼 타입 제약 설명
ASSIGNMENT_ID NUMBER PK (Seq)
EQUIPMENT_ID NUMBER FK → TB_EQUIPMENT
USER_ID NUMBER FK → TB_EMPLOYEE 지급 대상
ASSIGNED_DATE DATE NOT NULL 출고일
RETURNED_DATE DATE NULLABLE NULL=사용중
COND_ON_ASSIGN VARCHAR2(255) NOT NULL 지급시 상태
COND_ON_RETURN VARCHAR2(255) NULLABLE 반납시 상태

TB_EQUIPMENT_MAINTENANCE (장비 유지보수 이력)

컬럼 타입 제약 설명
MAINTENANCE_ID NUMBER PK (Seq)
EQUIPMENT_ID NUMBER FK → TB_EQUIPMENT
REPORTED_BY NUMBER FK → TB_EMPLOYEE 고장 접수자
MAINTENANCE_TYPE VARCHAR2(30) NOT NULL REPAIR / UPGRADE / INSPECTION / DISPOSAL
ISSUE_DESCRIPTION CLOB NOT NULL 고장 증상
ACTION_TAKEN CLOB NULLABLE 조치 내역
COST NUMBER DEFAULT 0 발생 비용
REPORTED_DATE DATE NOT NULL
RESOLVED_DATE DATE NULLABLE

TB_TRAINING_PROGRESS (교육 진도)

컬럼 타입 제약 설명
PROGRESS_ID NUMBER PK (Seq)
USER_ID NUMBER FK → TB_EMPLOYEE
COURSE_NAME VARCHAR2(100) NOT NULL 과정명
PROGRESS_RATE NUMBER DEFAULT 0 0~100
STATUS VARCHAR2(20) NOT NULL NOT_STARTED / ONGOING / COMPLETED

4. ER 관계 요약

TB_EMPLOYEE ──1:N── TB_DISPATCH_HISTORY ──N:1── TB_PROJECT
                                           └──1:N── TB_WORK_REPORT
     │
     └──1:N── TB_ISSUE_TICKET ──1:N── TB_TICKET_COMMENT
     │
     └──1:N── TB_EQUIPMENT_ASSIGNMENT ──N:1── TB_EQUIPMENT
     │                                          └──1:N── TB_EQUIPMENT_MAINTENANCE
     └──1:N── TB_TRAINING_PROGRESS

5. DDL 생성 참고 사항

  • 모든 SEQUENCE: INCREMENT BY 50 (Hibernate allocationSize=50과 정합)
  • 모든 시퀀스명 컨벤션: SEQ_TB_XXX
  • 모든 PK 컬럼: NUMBER 타입, 시퀀스 자동 할당
  • SPECIFICATIONS (TB_EQUIPMENT): CLOB에 JSON 문자열 저장, 애플리케이션 레벨 직렬화/역직렬화
  • 물리 스키마 DDL 파일: src/main/resources/ddl/oracle_11g_schema.sql 별도 관리