이전에 그룹웨어의 DB 설계 중 특정 직원 한 명의 상세정보에서 고등학교, 대학교, 대학원 학력을 조회, 입력, 수정, 삭제하는 글을 작성했었다.
하지만 학력과 학력구분 테이블이 1:1 관계이기 때문에 굳이 따로 테이블을 설계할 필요가 없다고 생각하여 이를 수정하고자 한다.
단, 학력구분 테이블에 있던 속성인 정렬순서는 여전히 사용하고자 한다. 학력구분명으로는 고등학교, 대학교, 대학원 순서로 정렬할 수 없기 때문이다.
따라서 학력 테이블의 속성은 다음과 같다.
- 학력코드: 학력 정보의 고유 식별자로 사용되는 기본키(PK)입니다.
- 기간: 학력의 기간을 나타내는 속성입니다.
- 학교명: 학력을 취득한 학교의 이름을 나타내는 속성입니다.
- 학과명: 학력을 취득한 학과의 이름을 나타내는 속성입니다.
- 졸업구분: 학력의 졸업 여부를 나타내는 속성입니다.
- 직원코드: 해당 학력 정보가 어떤 직원에 속하는지 나타내는 외래키(FK)입니다.
- 학력구분명: 학력이 고등학교, 대학교, 대학원 중 어떤 학력인지를 나타내는 속성입니다.
- 정렬순서: 학력구분명에 따라 정렬하기 위한 속성으로, 학력을 특정 순서로 정렬하기 위해 사용됩니다.
기존에 있던 학력구분코드(PK)는 필요 없으므로 삭제하고 총 8개의 속성이 학력 테이블에 속하게 된다.
필요한 쿼리문은 아래와 같이 정리하였다.
CREATE SEQUENCE 학력코드_seq START WITH 1 INCREMENT BY 1;
SELECT *
FROM 학력
WHERE 직원코드 = '특정 직원의 코드'
ORDER BY 정렬순서;
-- 고등학교 입력
INSERT INTO 학력 VALUES (학력코드_seq.NEXTVAL, '고등학교 기간', '고등학교명', '고등학교 학과', '졸업', '특정 직원의 코드', '고등학교', 1);
-- 대학교 입력
INSERT INTO 학력 VALUES (학력코드_seq.NEXTVAL, '대학교 기간', '대학교명', '대학교 학과', '졸업', '특정 직원의 코드', '대학교', 2);
-- 대학원 입력
INSERT INTO 학력 VALUES (학력코드_seq.NEXTVAL, '대학원 기간', '대학원명', '대학원 학과', '졸업', '특정 직원의 코드', '대학원', 3);
-- 대학원 정보 수정 (학력코드를 사용하여 수정)
UPDATE 학력
SET 기간 = '수정된 기간', 학교명 = '수정된 학교명', 학과명 = '수정된 학과명', 졸업구분 = '수정된 졸업구분'
WHERE 학력코드 = '수정할 학력코드';
-- 고등학교 삭제 (학력코드를 사용하여 삭제)
DELETE FROM 학력 WHERE 학력코드 = '삭제할 학력코드';