직원 (Employee) 테이블:
직원코드(PK)
직원명
부서번호(FK)
입사일
퇴사일
전화번호
주소
성별
권한
이메일
현황
직급
비밀번호
계약기간
직종id(FK)
사원번호
학력 (Education) 테이블:
학력코드(PK, 시퀀스)
기간
학교명
학과명
졸업구분
직원코드(FK)
학력구분코드(FK)
학력구분 (AcademicHistory) 테이블:
학력구분코드(PK)
학력구분명(UNIQE)
정렬순서
경력 (Career) 테이블:
경력코드(PK, 시퀀스)
회사명
부서
직급
담당업무
재직기간(개월)
직원코드(FK)
자격증 (Certification) 테이블:
자격증코드(PK, 시퀀스)
자격종류
자격증번호
발급기관명
취득일자
직원코드(FK)
시퀀스를 사용하면 유일성을 보장하면서도 중복 순서를 허용할 수 있다. 즉, 동일한 직원의 학력, 경력, 자격증 데이터가 여러 개 있더라도 각각의 순서는 유일하게 구분된다.
CREATE TABLE 학력 (
학력코드 NUMBER PRIMARY KEY,
기간 VARCHAR2(50),
학교명 VARCHAR2(100),
학과명 VARCHAR2(100),
졸업구분 VARCHAR2(50),
학력구분코드 NUMBER,
직원코드 NUMBER,
CONSTRAINT fk_학력_직원 FOREIGN KEY (직원코드) REFERENCES 직원(직원코드),
CONSTRAINT fk_학력_학력구분 FOREIGN KEY (학력구분코드) REFERENCES 학력구분(학력구분코드)
);
CREATE SEQUENCE 학력코드_seq
START WITH 1
INCREMENT BY 1
NOCACHE
NOCYCLE;
<직원과 학력 테이블 조인하여 학력 정보 조회>
특정 직원코드에 해당하는 직원의 정보와 그에 따른 학력 정보를 함께 가져온다.
SELECT E.*,
A.학력코드, A.기간, A.학교명, A.학과명, A.졸업구분, B.학력구분명
FROM 직원 E
LEFT JOIN 학력 A ON E.직원코드 = A.직원코드
LEFT JOIN 학력구분 B ON A.학력구분코드 = B.학력구분코드
WHERE E.직원코드 = '특정 직원의 코드'
ORDER BY B.정렬순서; -- 학력구분의 정렬 순서로 정렬
INSERT INTO 학력 (학력코드, 기간, 학교명, 학과명, 졸업구분, 학력구분코드, 직원코드)
VALUES (학력코드_seq.NEXTVAL, '추가할 기간', '추가할 학교명', '추가할 학과명', '추가할 졸업구분', '추가할 학력구분코드', '특정 직원의 코드');
DELETE FROM 학력
WHERE 학력코드 = '특정 학력코드' AND 직원코드 = '특정 직원의 코드';
UPDATE 학력
SET 기간 = '수정된 기간', 학교명 = '수정된 학교명', 학과명 = '수정된 학과명', 졸업구분 = '수정된 졸업구분', 학력구분코드 = '수정된 학력구분코드'
WHERE 학력코드 = '특정 학력코드' AND 직원코드 = '특정 직원의 코드';
CREATE TABLE 학력구분 (
학력구분코드 NUMBER PRIMARY KEY,
학력구분명 VARCHAR2(20) UNIQUE,
정렬순서 NUMBER
);
INSERT INTO 학력구분 VALUES (1, '고등학교', 1);
INSERT INTO 학력구분 VALUES (2, '대학교', 2);
INSERT INTO 학력구분 VALUES (3, '대학원', 3);
UNIQUE
제약 조건을 부여한 이유는 동일한 학력구분명이 중복되지 않도록 강제하여 각 학력구분이 명확하게 구분되고 데이터의 일관성을 유지할 수 있다.학력 정보를 조회할 때 학력구분코드를 사용하면 각 학력구분을 식별할 수 있고 정렬순서를 사용하면 특정 순서로 결과를 정렬할 수 있다.