5급 공채 2차

2025년 5급 공채 기술 2차 데이터베이스론

문제 5개 · 100점. 참고 답안·채점 기준은 앱에서 볼 수 있습니다.

제1문 (30점)

다음은 학생들의 데이터베이스 교과목들에 대한 수강 정보를 나타내는 수강 릴레이션과 관련 사항을 정리한 것이다. 물음에 답하시오. (단, 1)~3)번 문제에서 여러 개의 답이 가능하다면 모두 작성하시오) (총 30점)
<수강 릴레이션>
학번과목명강의자
100데이터베이스이론(중급)교수1
100데이터베이스실습(중급)조교1
200데이터베이스이론(중급)교수2
200데이터베이스실습(초급)조교2
300데이터베이스이론(초급)교수3
300데이터베이스실습(초급)조교3
⁝⁝⁝

○데이터베이스이론과 실습 과목은 각각 초급, 중급 분반으로 구분된다.
○모든 학생은 데이터베이스이론과 데이터베이스실습 한 분반씩 수강해야 한다.
○이론 수업은 교수가 담당하고 실습 수업은 조교가 담당한다.
○동일한 강의자가 2개 이상의 분반을 담당하지 못한다.
○각 분반의 수강생 수는 최소 2명 이상이다.
○모든 속성의 도메인은 원자값으로 구성된다.
  1. (1) 수강 릴레이션의 후보키(candidate key)를 구하고, 그에 따라 모든 함수 종속(functional dependency) 관계를 표현하시오. (단, 속성 간 종속성은 화살표로 표현하시오) (8점)
  2. (2) 수강 릴레이션의 최대 정규형(normal form)을 판별하고 그 이유를 설명하시오. (8점)
  3. (3) 수강 릴레이션은 이상현상(anomaly)이 발생하는데, 이를 해결하기 위해 릴레이션을 어떻게 분해하면 되는지 과정을 기술하시오. (8점)
  4. (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. (1) B-트리와 B+-트리의 차이점을 트리의 구조 측면과 탐색 측면에서 각각 두 개씩 비교 설명하시오. (5점)
  2. (2) 공집합 상태인 B+-트리에 키값 12, 8, 1을 순서대로 삽입하였을 때, 다음 그림과 같은 B+-트리가 만들어졌다. 이후, 키값 9, 5, 11, 14, 10을 순서대로 삽입할 때의 B+-트리를 차례대로 그리시오. (단, B+-트리의 차수는 3이다) (10점)
    [그림]
  3. (3) 2)에서 구축한 B+-트리에서 키값 11, 10을 순서대로 삭제할 때 B+-트리를 차례대로 그리시오. (5점)

제3문 (20점)

아래의 데이터베이스 스키마에 대해 다음 물음에 답하시오. (단, 각 릴레이션의 기본키는 밑줄로 표시되고, FK는 외래키이며, 관계대수식을 작성 시 아래에 주어진 관계대수 연산만을 사용한다) (총 20점)
[그림]
\sigma:실렉션(selection)
\pi:프로젝션(projection)
⋈θ:세타조인(theta join)
⋈:자연조인(natural join)
÷:디비전(division)
IMAG:집계연산(aggregate operation)
  1. (1) “관할지역이 제주도인 부서에 소속된 사원의 평균연봉을 출력하시오”라는 질의문을 3개 이하의 관계대수 연산자를 사용하여 관계대수식으로 작성하시오. (3점)
  2. (2) “부양가족이 3명 이상인 사원의 사원번호, 이름, 주소를 찾으시오”라는 질의문을 4개 이하의 관계대수 연산자를 사용하여 관계대수식으로 작성하시오. (7점)
  3. (3) “2022년 1월 1일부터 2022년 12월 31일까지 수행된 모든 프로젝트에 참여한 부서의 부서번호, 부서이름을 찾으시오”라는 질의문을 5개 이하의 관계대수 연산자를 사용하여 관계대수식으로 작성하시오. (10점)

제4문 (15점)

트랜잭션 T1, T2가 직원 id=2025에 대해 다음과 같이 실행될 때, 물음에 답하시오. (총 15점)
트랜잭션 T1트랜잭션 T2
1SELECT salary
FROM members
WHERE id=2025;
2UPDATE members
SET salary=10000
WHERE id=2025;
COMMIT;
3SELECT salary
FROM members
WHERE id=2025;
COMMIT;
  1. (1) 위와 같은 순서로 트랜잭션이 실행될 때, 트랜잭션 T1의 동일한 두 질의의 결과가 다르게 출력될 수 있다. 여러 트랜잭션이 동시에 실행될 때 왜 그런 문제점이 발생하였는지 트랜잭션 고립화 수준(isolation level) 관점에서 설명하시오. (8점)
  2. (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
);

Student 테이블Course 테이블
snosnameyeardeptcnocnamecreditdeptprofname
100홍길동4컴퓨터C123컴퓨터구조3컴퓨터양소유
200이몽룡3전기C312자료구조3컴퓨터진채봉
300성춘향1컴퓨터C324알고리즘3컴퓨터심요연
400변학도4컴퓨터C413데이터베이스3컴퓨터백능파
500전우치2미디어E412논리회로3전자정경패

Enrol 테이블
snocnogrademidtermfinal
200C123B8580
300C312A9095
400C312A9095
500C312B8580
300C324C7575
400C324A9590
100C413A9095
300C413A9590
400C413B8085
100E412A9595
400E412C6575
  1. (1) 다음 SQL문의 실행 결과를 작성하시오. (5점)
    SELECT cno
    FROM Enrol
    GROUP BY cno
    HAVING AVG(final) >= ALL( SELECT AVG(final)
    FROM Enrol
    GROUP BY cno);
  2. (2) 다음과 같은 순서로 SQL문들을 실행하였을 때 마지막 SELECT문의 결과를 작성하시오. (5점)
    DELETE FROM Student WHERE sname= ‘전우치’;
    DELETE FROM Course WHERE cname= ‘논리회로’;
    SELECT COUNT(*) FROM Enrol;
  3. (3) 데이터베이스 관리자가 컴퓨터 학과 조교인 이순신에게 컴퓨터 학과(dept = ‘컴퓨터’) 학생만 조회할 수 있는 권한을 주고자 한다. 이를 위한 SQL문을 순서대로 나열하시오. (단, 이순신은 데이터베이스에 대한 계정으로 lee를 가지고 있다) (5점)
    끝