2025년 5급 공채 기술 2차 데이터베이스론
문제 5개 · 100점. 참고 답안·채점 기준은 앱에서 볼 수 있습니다.
제1문 (30점)
다음은 학생들의 데이터베이스 교과목들에 대한 수강 정보를 나타내는 수강 릴레이션과 관련 사항을 정리한 것이다. 물음에 답하시오. (단, 1)~3)번 문제에서 여러 개의 답이 가능하다면 모두 작성하시오) (총 30점)
| <수강 릴레이션> | ||
| 학번 | 과목명 | 강의자 |
| 100 | 데이터베이스이론(중급) | 교수1 |
| 100 | 데이터베이스실습(중급) | 조교1 |
| 200 | 데이터베이스이론(중급) | 교수2 |
| 200 | 데이터베이스실습(초급) | 조교2 |
| 300 | 데이터베이스이론(초급) | 교수3 |
| 300 | 데이터베이스실습(초급) | 조교3 |
| ⁝ | ⁝ | ⁝ |
○데이터베이스이론과 실습 과목은 각각 초급, 중급 분반으로 구분된다.
○모든 학생은 데이터베이스이론과 데이터베이스실습 한 분반씩 수강해야 한다.
○이론 수업은 교수가 담당하고 실습 수업은 조교가 담당한다.
○동일한 강의자가 2개 이상의 분반을 담당하지 못한다.
○각 분반의 수강생 수는 최소 2명 이상이다.
○모든 속성의 도메인은 원자값으로 구성된다.
○모든 학생은 데이터베이스이론과 데이터베이스실습 한 분반씩 수강해야 한다.
○이론 수업은 교수가 담당하고 실습 수업은 조교가 담당한다.
○동일한 강의자가 2개 이상의 분반을 담당하지 못한다.
○각 분반의 수강생 수는 최소 2명 이상이다.
○모든 속성의 도메인은 원자값으로 구성된다.
- (1) 수강 릴레이션의 후보키(candidate key)를 구하고, 그에 따라 모든 함수 종속(functional dependency) 관계를 표현하시오. (단, 속성 간 종속성은 화살표로 표현하시오) (8점)
- (2) 수강 릴레이션의 최대 정규형(normal form)을 판별하고 그 이유를 설명하시오. (8점)
- (3) 수강 릴레이션은 이상현상(anomaly)이 발생하는데, 이를 해결하기 위해 릴레이션을 어떻게 분해하면 되는지 과정을 기술하시오. (8점)
- (4) 릴레이션 R(A, B, C, D)에 대하여 함수 종속 집합이 다음과 같을 때 최소커버(minimal cover)를 구하시오. (6점)F={ A→B, B→CD, C→D, B→C, BC→D }
제2문 (20점)
데이터베이스의 다단계 인덱스 구조인 B-트리와 B+-트리에 대한 다음 물음에 답하시오. (총 20점)
- (1) B-트리와 B+-트리의 차이점을 트리의 구조 측면과 탐색 측면에서 각각 두 개씩 비교 설명하시오. (5점)
- (2) 공집합 상태인 B+-트리에 키값 12, 8, 1을 순서대로 삽입하였을 때, 다음 그림과 같은 B+-트리가 만들어졌다. 이후, 키값 9, 5, 11, 14, 10을 순서대로 삽입할 때의 B+-트리를 차례대로 그리시오. (단, B+-트리의 차수는 3이다) (10점)
[그림] - (3) 2)에서 구축한 B+-트리에서 키값 11, 10을 순서대로 삭제할 때 B+-트리를 차례대로 그리시오. (5점)
제3문 (20점)
아래의 데이터베이스 스키마에 대해 다음 물음에 답하시오. (단, 각 릴레이션의 기본키는 밑줄로 표시되고, FK는 외래키이며, 관계대수식을 작성 시 아래에 주어진 관계대수 연산만을 사용한다) (총 20점)
[그림]
[그림]
\sigma:실렉션(selection)
\pi:프로젝션(projection)
⋈θ:세타조인(theta join)
⋈:자연조인(natural join)
÷:디비전(division)
IMAG:집계연산(aggregate operation)
\pi:프로젝션(projection)
⋈θ:세타조인(theta join)
⋈:자연조인(natural join)
÷:디비전(division)
IMAG:집계연산(aggregate operation)
- (1) “관할지역이 제주도인 부서에 소속된 사원의 평균연봉을 출력하시오”라는 질의문을 3개 이하의 관계대수 연산자를 사용하여 관계대수식으로 작성하시오. (3점)
- (2) “부양가족이 3명 이상인 사원의 사원번호, 이름, 주소를 찾으시오”라는 질의문을 4개 이하의 관계대수 연산자를 사용하여 관계대수식으로 작성하시오. (7점)
- (3) “2022년 1월 1일부터 2022년 12월 31일까지 수행된 모든 프로젝트에 참여한 부서의 부서번호, 부서이름을 찾으시오”라는 질의문을 5개 이하의 관계대수 연산자를 사용하여 관계대수식으로 작성하시오. (10점)
제4문 (15점)
트랜잭션 T1, T2가 직원 id=2025에 대해 다음과 같이 실행될 때, 물음에 답하시오. (총 15점)
| 트랜잭션 T1 | 트랜잭션 T2 | |
| 1 | SELECT salary FROM members WHERE id=2025; | |
| 2 | UPDATE members SET salary=10000 WHERE id=2025; COMMIT; | |
| 3 | SELECT salary FROM members WHERE id=2025; COMMIT; |
- (1) 위와 같은 순서로 트랜잭션이 실행될 때, 트랜잭션 T1의 동일한 두 질의의 결과가 다르게 출력될 수 있다. 여러 트랜잭션이 동시에 실행될 때 왜 그런 문제점이 발생하였는지 트랜잭션 고립화 수준(isolation level) 관점에서 설명하시오. (8점)
- (2) 기본적 2단계 로킹 규약(basic 2-Phase Locking Protocol)에 따라 트랜잭션들이 병행수행된다면, 위와 같은 순서대로 트랜잭션들이 실행을 요청할 때 어떻게 처리될 것인지 설명하시오. (7점)
제5문 (15점)
Student, Course, Enrol 테이블의 정의와 데이터 구축내용을 보고 다음 물음에 답하시오. (총 15점)
CREATE TABLE Student (
sno NUMBER(3) NOT NULL,
sname CHAR(20) NOT NULL,
year INTEGER,
dept CHAR(20),
PRIMARY KEY(sno)
);
CREATE TABLE Course
( cno CHAR(10) NOT NULL,
cname CHAR(20) NOT NULL,
credit INTEGER,
dept CHAR(20),
profname CHAR(20),
PRIMARY KEY(cno)
);
CREATE TABLE Enrol
( sno NUMBER(3) NOT NULL,
cno CHAR(10) NOT NULL,
grade CHAR(3),
midterm INTEGER,
final INTEGER,
PRIMARY KEY(sno, cno),
FOREIGN KEY(sno) REFERENCES Student(sno),
FOREIGN KEY(cno) REFERENCES Course(cno) ON DELETE CASCADE
);
sno NUMBER(3) NOT NULL,
sname CHAR(20) NOT NULL,
year INTEGER,
dept CHAR(20),
PRIMARY KEY(sno)
);
CREATE TABLE Course
( cno CHAR(10) NOT NULL,
cname CHAR(20) NOT NULL,
credit INTEGER,
dept CHAR(20),
profname CHAR(20),
PRIMARY KEY(cno)
);
CREATE TABLE Enrol
( sno NUMBER(3) NOT NULL,
cno CHAR(10) NOT NULL,
grade CHAR(3),
midterm INTEGER,
final INTEGER,
PRIMARY KEY(sno, cno),
FOREIGN KEY(sno) REFERENCES Student(sno),
FOREIGN KEY(cno) REFERENCES Course(cno) ON DELETE CASCADE
);
| Student 테이블 | Course 테이블 | ||||||||
| sno | sname | year | dept | cno | cname | credit | dept | profname | |
| 100 | 홍길동 | 4 | 컴퓨터 | C123 | 컴퓨터구조 | 3 | 컴퓨터 | 양소유 | |
| 200 | 이몽룡 | 3 | 전기 | C312 | 자료구조 | 3 | 컴퓨터 | 진채봉 | |
| 300 | 성춘향 | 1 | 컴퓨터 | C324 | 알고리즘 | 3 | 컴퓨터 | 심요연 | |
| 400 | 변학도 | 4 | 컴퓨터 | C413 | 데이터베이스 | 3 | 컴퓨터 | 백능파 | |
| 500 | 전우치 | 2 | 미디어 | E412 | 논리회로 | 3 | 전자 | 정경패 | |
| Enrol 테이블 | ||||
| sno | cno | grade | midterm | final |
| 200 | C123 | B | 85 | 80 |
| 300 | C312 | A | 90 | 95 |
| 400 | C312 | A | 90 | 95 |
| 500 | C312 | B | 85 | 80 |
| 300 | C324 | C | 75 | 75 |
| 400 | C324 | A | 95 | 90 |
| 100 | C413 | A | 90 | 95 |
| 300 | C413 | A | 95 | 90 |
| 400 | C413 | B | 80 | 85 |
| 100 | E412 | A | 95 | 95 |
| 400 | E412 | C | 65 | 75 |
- (1) 다음 SQL문의 실행 결과를 작성하시오. (5점)SELECT cno
FROM Enrol
GROUP BY cno
HAVING AVG(final) >= ALL( SELECT AVG(final)
FROM Enrol
GROUP BY cno); - (2) 다음과 같은 순서로 SQL문들을 실행하였을 때 마지막 SELECT문의 결과를 작성하시오. (5점)DELETE FROM Student WHERE sname= ‘전우치’;
DELETE FROM Course WHERE cname= ‘논리회로’;
SELECT COUNT(*) FROM Enrol; - (3) 데이터베이스 관리자가 컴퓨터 학과 조교인 이순신에게 컴퓨터 학과(dept = ‘컴퓨터’) 학생만 조회할 수 있는 권한을 주고자 한다. 이를 위한 SQL문을 순서대로 나열하시오. (단, 이순신은 데이터베이스에 대한 계정으로 lee를 가지고 있다) (5점)끝