서버 총 6개

  1. member(auth
  2. chat
  3. 게시판+캘린더+자원
  4. mail
  5. 전자결재+문서+근태관리
  6. 알림

사원/부서/메일

CREATE TABLE Employee (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(255) NOT NULL,
    email VARCHAR(255) UNIQUE NOT NULL,
    password VARCHAR(255) NOT NULL,
    department_id INT,
    profile_picture TEXT,
    phone_number VARCHAR(11) NOT NULL,
    is_mail_created BOOLEAN DEFAULT FALSE,                -- 메일 생성 여부
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    status BOOLEAN DEFAULT TRUE,
    FOREIGN KEY (department_id) REFERENCES Department(id) ON DELETE SET NULL
);

CREATE TABLE Department (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    description TEXT
);

CREATE TABLE Mail (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,       -- 메일 고유 ID
    sender_id BIGINT NOT NULL,                  -- 발신자 사원 ID (Employee 테이블 참조)
    sender_email VARCHAR(255),                  -- 발신자 이메일 (선택적으로 저장)
    recipient_id BIGINT NOT NULL,               -- 수신자 사원 ID (Employee 테이블 참조)
    recipient_email VARCHAR(255),               -- 수신자 이메일 (선택적으로 저장)
    subject VARCHAR(255) NOT NULL,              -- 메일 제목
    body TEXT NOT NULL,                         -- 메일 본문
    file_name VARCHAR(255),                     -- 파일명
    file_url TEXT,                              -- 파일 경로
    is_read BOOLEAN DEFAULT FALSE,              -- 수신자가 읽었는지 여부
    is_deleted BOOLEAN DEFAULT FALSE,           -- 삭제 여부
    sent_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- 메일 발송 날짜 및 시간
);

CREATE TABLE ImportantMail (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,       -- 메일 고유 ID
    employee_id BIGINT NOT NULL,               -- 사원 번호 (Employee 테이블 참조)
    mail_id BIGINT NOT NULL,                   -- 메일 번호 (Mail 테이블 참조)
    PRIMARY KEY (employee_id, mail_id),        -- 복합 기본 키
    FOREIGN KEY (employee_id) REFERENCES Employee(id) ON DELETE CASCADE,  -- 사원 참조
    FOREIGN KEY (mail_id) REFERENCES Mail(id) ON DELETE CASCADE      -- 메일 참조
);

-- 나중에 메일 송수신 완료하고나면 확장성으로 고려
CREATE TABLE MailAttachment (
		 id BIGINT AUTO_INCREMENT PRIMARY KEY,  -- 첨부파일 고유 ID
     mail_id BIGINT NOT NULL,
     file_name VARCHAR(255),                -- 파일명
     file_url VARCHAR(255)                  -- 파일 경로
);

근태관리


CREATE TABLE Attendance (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    employee_id BIGINT NOT NULL,               -- 직원 ID
    check_in_time TIMESTAMP NULL,              -- 출근 시간
    check_out_time TIMESTAMP NULL,             -- 퇴근 시간
    total_work_time TIME NULL,                 -- 총 근무 시간
    status ENUM('출근 완료', '퇴근 완료') NOT NULL,  -- 상태
    ip_address VARCHAR(45),                    -- 출근 시 IP 주소
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE WorkReport (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    employee_id BIGINT NOT NULL,               -- 직원 ID
    report_month YEAR(4) NOT NULL,             -- 보고서가 생성된 달
    total_work_time TIME NOT NULL,             -- 총 근무 시간
    overtime TIME NOT NULL,                    -- 초과 근무 시간
    early_leave TIME NOT NULL,                 -- 조기 퇴근 시간
    vacation_days INT NOT NULL,                -- 사용한 휴가 일수
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

전자결재

CREATE TABLE DocumentTemplate (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,      -- 템플릿 ID
    template_name VARCHAR(255) NOT NULL        -- 템플릿 이름
);

CREATE TABLE TemplateField (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,      -- 필드 ID
    template_id BIGINT NOT NULL,               -- DocumentTemplate 외래 키
    field_name VARCHAR(255) NOT NULL,          -- 필드 이름
    field_type VARCHAR(50) NOT NULL,           -- 필드 타입 (예: String, Date, Integer)
    CONSTRAINT fk_template_id FOREIGN KEY (template_id) REFERENCES DocumentTemplate(id) -- DocumentTemplate와 연관
);

CREATE TABLE DocumentType (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,      -- 문서 유형 ID
    type VARCHAR(255) NOT NULL,                -- 문서 유형 이름
    template_id BIGINT,                        -- DocumentTemplate 외래 키
    CONSTRAINT fk_template FOREIGN KEY (template_id) REFERENCES DocumentTemplate(id)  -- DocumentTemplate와 연관
);

CREATE TABLE Document (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,      -- 문서 ID
    title VARCHAR(255) NOT NULL,               -- 문서 제목
    content TEXT,                              -- 문서 내용
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 작성일
    document_status ENUM('DRAFT', 'IN_PROGRESS', 'APPROVED', 'REJECTED') DEFAULT 'DRAFT', -- 문서 상태
    custom_fields JSON,                        -- 동적 필드(JSON)
    document_type_id BIGINT NOT NULL,          -- DocumentType 외래 키
    CONSTRAINT fk_document_type FOREIGN KEY (document_type_id) REFERENCES DocumentType(id) -- DocumentType와 연관
);

CREATE TABLE Workflow (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    document_id BIGINT NOT NULL,
    current_step INT NOT NULL
);

CREATE TABLE Approval (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    approval_order INT NOT NULL, 
    approval_status ENUM('PENDING', 'APPROVE', 'REJECT') NOT NULL,
    workflow_id BIGINT NOT NULL,
    employee_id BIGINT NOT NULL,
    CONSTRAINT FK_Approval_Workflow FOREIGN KEY (workflow_id) REFERENCES Workflow(id)
);

알림

CREATE TABLE Notification (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,       
    recipient_id BIGINT NOT NULL,          -- 수신자   
    message VARCHAR(255) NOT NULL,      
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
    read_at TIMESTAMP NULL,        
    notification_type ENUM('INFO', 'ALERT', 'REMINDER') NOT NULL,    
    is_read BOOLEAN DEFAULT FALSE           
);