ERD

Untitled

테이블 생성

# 회원
CREATE TABLE `user`
(
    `user_id`      bigint AUTO_INCREMENT,
    `name`         varchar(50)  NOT NULL,
    `email`        varchar(100) NOT NULL,
    `password`     varchar(255) NOT NULL,
    `phone`        varchar(20)  NOT NULL,
    `hire_date`    date         NULL,
    `birthday`     date         NOT NULL,
    `dept`         varchar(50)  NULL,
    `position`     varchar(20)  NOT NULL,
    `gender`       char(1)      NOT NULL,
    `distribution` boolean      NOT NULL,
    `date_created` datetime     NOT NULL,
    `date_updated` datetime     NOT NULL,
    `date_deleted` datetime     NULL,
    `is_deleted`   boolean      NOT NULL,
    `is_admin`     boolean      NOT NULL,
    `company_id`   bigint       NOT NULL,
    PRIMARY KEY (user_id)
);

# 회사 휴일
CREATE TABLE `holiday`
(
    `holiday_id` bigint AUTO_INCREMENT,
    `date`       date        NOT NULL,
    `name`       varchar(50) NOT NULL,
    `pay_type`   varchar(10) NOT NULL,
    `company_id` bigint      NOT NULL,
    PRIMARY KEY (holiday_id)
);

# 출퇴근기록
CREATE TABLE `time_record`
(
    `time_record_id` bigint AUTO_INCREMENT,
    `user_id`        bigint      NOT NULL,
    `date`           date        NOT NULL,
    `work`           time        NOT NULL,
    `leave`          time        NOT NULL,
    `work_state`     varchar(10) NOT NULL,
    `date_created`   datetime    NOT NULL,
    `date_updated`   datetime    NOT NULL,
    PRIMARY KEY (time_record_id)
);

# 근로제
CREATE TABLE `work_group`
(
    `work_group_id` bigint AUTO_INCREMENT,
    `name`          varchar(50) NOT NULL,
    `type`          char(2)     NOT NULL,
    `date_created`  datetime    NOT NULL,
    `date_updated`  datetime    NOT NULL,
    `date_deleted`  datetime    NULL,
    `is_deleted`    boolean     NOT NULL,
    `is_on`         boolean     NOT NULL,
    `company_id`    bigint      NOT NULL,
    PRIMARY KEY (work_group_id)
);

# 시간범위
CREATE TABLE `time_range`
(
    `time_range_id` bigint AUTO_INCREMENT,
    `type`          char(2) NOT NULL,
    `start`         time    NOT NULL,
    `end`           time    NOT NULL,
    `work_group_id` bigint  NOT NULL,
    PRIMARY KEY (time_range_id)
);

# 근무요일타입
CREATE TABLE `work_day_type`
(
    `work_day_type_id` bigint AUTO_INCREMENT,
    `mon`              char(2) NOT NULL,
    `tue`              char(2) NOT NULL,
    `wed`              char(2) NOT NULL,
    `thu`              char(2) NOT NULL,
    `fri`              char(2) NOT NULL,
    `sat`              char(2) NOT NULL,
    `sun`              char(2) NOT NULL,
    `work_group_id`    bigint  NOT NULL,
    PRIMARY KEY (work_day_type_id)
);

# 배포이력
CREATE TABLE `distribution_record`
(
    `distribution_record_id` bigint AUTO_INCREMENT,
    `date`                   datetime     NOT NULL,
    `user_id`                bigint       NOT NULL,
    `work_group_name`        varchar(50)  NOT NULL,
    `work_group_type`        char(2)      NOT NULL,
    `time_range_type`        varchar(255) NOT NULL,
    `start`                  varchar(255) NOT NULL,
    `end`                    varchar(255) NOT NULL,
    PRIMARY KEY (distribution_record_id)
);

# 정산
CREATE TABLE `settlement`
(
    `settlement_id`          bigint AUTO_INCREMENT,
    `user_id`                bigint   NOT NULL,
    `date`                   date     NOT NULL,
    `working_time`           time     NOT NULL,
    `overtime`               time     NOT NULL,
    `day_type`               char(2)  NOT NULL,
    `date_created`           datetime NOT NULL,
    `date_updated`           datetime NOT NULL,
    `distribution_record_id` bigint   NOT NULL,
    PRIMARY KEY (settlement_id)
);

# 배포
CREATE TABLE `distribution`
(
    `distribution_id` bigint AUTO_INCREMENT,
    `date`            datetime NOT NULL,
    `user_id`         bigint   NOT NULL,
    `work_group_id`   bigint   NOT NULL,
    PRIMARY KEY (distribution_id)
);

# 회사
CREATE TABLE `company`
(
    `company_id`   bigint AUTO_INCREMENT,
    `name`         varchar(50) NOT NULL,
    `date_created` datetime    NOT NULL,
    `date_updated` datetime    NOT NULL,
    `date_deleted` datetime    NULL,
    `is_deleted`   boolean     NOT NULL,
    PRIMARY KEY (company_id)
);

# 제약조건
ALTER TABLE `holiday`
    ADD CONSTRAINT `FK_company_TO_holiday_1` FOREIGN KEY (`company_id`)
        REFERENCES `company` (`company_id`);

ALTER TABLE `work_group`
    ADD CONSTRAINT `FK_company_TO_work_group_1` FOREIGN KEY (`company_id`)
        REFERENCES `company` (`company_id`);

ALTER TABLE `time_range`
    ADD CONSTRAINT `FK_work_group_TO_time_range_1` FOREIGN KEY (`work_group_id`)
        REFERENCES `work_group` (`work_group_id`);

ALTER TABLE `work_day_type`
    ADD CONSTRAINT `FK_work_group_TO_work_day_type_1` FOREIGN KEY (`work_group_id`)
        REFERENCES `work_group` (`work_group_id`);

ALTER TABLE `settlement`
    ADD CONSTRAINT `FK_distribution_record_TO_settlement_1` FOREIGN KEY (`distribution_record_id`)
        REFERENCES `distribution_record` (`distribution_record_id`);

ALTER TABLE `distribution`
    ADD CONSTRAINT `FK_user_TO_distribution_1` FOREIGN KEY (`user_id`)
        REFERENCES `user` (`user_id`);

ALTER TABLE `distribution`
    ADD CONSTRAINT `FK_work_group_TO_distribution_1` FOREIGN KEY (`work_group_id`)
        REFERENCES `work_group` (`work_group_id`);

ALTER TABLE `user`
    ADD CONSTRAINT `FK_company_TO_user_1` FOREIGN KEY (`company_id`)
        REFERENCES `company` (`company_id`);