변경사항

ERD(더블 클릭하면 확대가능)

Untitled

테이블 생성

# 휴일
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 NOT NULL,
    `user_id`        bigint                NOT NULL,
    `date`           date                  NOT NULL,
    `start_work`     time                  NOT NULL,
    `leave_work`     time                  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 NOT NULL,
    `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 NOT NULL,
    `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 NOT NULL,
    `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 `settlement`
(
    `settlement_id`        bigint auto_increment NOT NULL,
    `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,
    `work_group_record_id` bigint                NOT NULL,
    PRIMARY KEY (settlement_id)
);

# 회사
CREATE TABLE `company`
(
    `company_id`   bigint auto_increment NOT NULL,
    `name`         varchar(50)           NOT NULL,
    `code`         varchar(255)          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)
);

# 근로제 이력
CREATE TABLE `work_group_record`
(
    `work_group_record_id` bigint auto_increment NOT NULL,
    `date`                 datetime              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,
    `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_group_record_id)
);

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

# 회원
CREATE TABLE `user`
(
    `user_id`      bigint auto_increment NOT NULL,
    `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)           NULL,
    `distribution` boolean               NOT NULL,
    `date_created` datetime              NOT NULL,
    `date_updated` datetime              NOT NULL,
    `date_deleted` datetime              NULL,
    `is_deleted`   boolean               NOT NULL,
    `role`         varchar(10)           NOT NULL,
    `company_id`   bigint                NOT NULL,
    PRIMARY KEY (user_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_work_group_record_TO_settlement_1` FOREIGN KEY (
                                                                       `work_group_record_id`
        )
        REFERENCES `work_group_record` (
                                        `work_group_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`
            );

샘플 데이터

# 회사
INSERT INTO `company` (`name`, `code`, `date_created`, `date_updated`, `is_deleted`)
VALUES ('더존비즈온', 'DZ1234', NOW(), NOW(), false);

# 사용자
INSERT INTO `user` (
    `name`,
    `email`,
    `password`,
    `phone`,
    `hire_date`,
    `birthday`,
    `dept`,
    `position`,
    `distribution`,
    `date_created`,
    `date_updated`,
    `is_deleted`,
    `role`,
    `company_id`
)
VALUES (
    '테스트용',
    '[email protected]',
    '$2a$10$qY6DuWcrl/y5hJjWszBz/uVGvPF0ivxM2v.d5b66I/MxzGGBIhxBm',
    '010-1234-5678',
    '2023-01-01',
    '1990-01-01',
    'IT',
    '대리',
    false,
    NOW(),
    NOW(),
    false,
    'ADMIN',
    1
);