서버 총 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
);