5급 공채 2차

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

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

제1문 (15점)

세 개의 릴레이션 고객(cid, name, city, age), 예금자(cid, acc_no), 계좌(acc_no, branch, balance)가 주어져 있을 때, 다음 물음에 답하시오. (총 15점)
고객예금자계좌
cidnamecityagecidacc_noacc_nobranchbalance
001홍길동서울25001201-12202-11CNU900
002이순신대전30002202-11201-12SNU1000
003윤봉길부산25006101-21101-21KNU500
004이황서울32001301-13301-13KNU800
005신사임당서울45003111-10111-10CNU900
006장영실대구50004201-33201-33SNU1000
007정약용광주36001202-10202-10CNU700
  1. (1) 계좌 릴레이션의 모든 지점(branch)에 계좌를 가지고 있는 고객 이름을 구하는 관계 대수식을 작성하시오. (4점)
  2. (2) 단일 계좌 금액(balance)이 가장 큰 고객 이름을 출력하는 SQL문을 작성하시오. (단, 대상자가 여러 명인 경우 모두 출력한다) (5점)
  3. (3) 서울에 살고 있고, 2개 이상의 계좌를 가지고 있으면서, 보유한 계좌 금액(balance)의 총합이 1000 이상인 고객이 모두 몇 명인지 찾기 위한 SQL문을 작성하시오. (6점)

제2문 (25점)

트랜잭션에 대한 다음 물음에 답하시오. (총 25점)
  1. (1) 트랜잭션의 4가지 주요 특성(property)을 설명하고 동시성제어와 회복(recovery)과 관련된 특성을 각각 제시하시오. (8점)
  2. (2) 데이터베이스 시스템에서 실행 중이거나 실행이 완료된 트랜잭션 T1, T2, T3, T4의 정보가 시스템 로그에 다음과 같이 기록되었을 때, Tf 시점 이후 각 트랜잭션에 대해 어떤 회복 연산이 적용되어야 하는지를 그 이유와 함께 설명하시오. (단, 데이터베이스 시스템은 즉시 갱신(immediate update) 기법을 적용한다) (6점)
    [그림]
  3. (3) 여러 트랜잭션들이 동시에 실행되는 과정에서 발생할 수 있는 세 가지 현상(phenomena)인 오손 읽기(dirty read), 반복 불가능한 읽기(non-repeatable read), 유령 데이터 문제(phantom problem)를 제어하기 위해 SQL표준에서 제공하는 4가지 고립성 수준(isolation level)이 어떻게 작동하는지에 대하여 설명하시오. (6점)
  4. (4) 3)의 답안 내용에 대하여 각 고립성 수준에서 세 가지 현상이 각각 발생 가능한지 (possible), 발생 불가능한지(not possible)를 표로 요약하시오. (5점)

제3문 (15점)

릴레이션 R(A, B, C, D)에 대하여 함수 종속성(functional dependency) 집합 F가 다음과 같이 주어졌을 때, 물음에 답하시오. (단, 릴레이션 R은 제1정규형을 만족한다) (총 15점)
F={ A→BCD, BC→AD, D→B }
  1. (1) 릴레이션 R의 후보키(candidate key)를 모두 찾고 그 과정을 설명하시오. (4점)
  2. (2) 릴레이션 R의 최대 정규형(normal form)을 판별하고 그 이유를 설명하시오. (4점)
  3. (3) 릴레이션 R의 정규화를 함수 종속성을 기준으로 최대로 진행하여 완성하시오. (4점)
  4. (4) 3)에서 완성된 정규화 결과에서 발생하는 문제점에 대하여 설명하시오. (3점)

제4문 (25점)

‘학과’와 ‘학생’ 테이블을 대상으로 다음 질의(query)를 수행할 때, 물음에 답하시오. (총 25점)
SELECT 학생.학생이름, 학과.학과이름, 학생.전화번호
FROM 학과, 학생
WHERE 학생.소속학과 = 학과.학과이름 AND
학과.대학이름 = ‘공과대학’;
  1. (1) 위 질의를 나타내는 관계 대수식을 작성하시오. (5점)
  2. (2) 위 질의에 대하여 조인(join) 연산이 선택(selection) 연산보다 먼저 수행되는 질의 트리(query tree)를 그리시오. (5점)
  3. (3) 위 질의에 대하여 선택 연산이 조인 연산보다 먼저 수행되는 질의 트리를 그리시오. (5점)
  4. (4) 2)와 3)의 질의 트리 중 어느 쪽이 더 적은 수행 비용을 가질 것으로 예상되는지 쓰고 그 이유를 설명하시오. (단, ‘학과’와 ‘학생’ 테이블 모두 메모리에 한 번에 올라오지 못할 만큼 크고, 어떠한 인덱스도 존재하지 않으며, 학과 중 ‘공과대학’에 속한 학과가 극도로 적다) (5점)
  5. (5) 중첩 루프 조인(nested-loop join), 블록 중첩 루프 조인(block nested-loop join), 인덱스 중첩 루프 조인(indexed nested-loop join)의 차이점을 비교하여 설명하고, 4)에서 묘사한 ‘학과’와 ‘학생’ 테이블의 조인 연산만을 수행한다고 했을 때 이들 중 어떤 조인이 가장 효율적일지 그 이유와 함께 기술하시오. (5점)

제5문 (20점)

다음은 특정 데이터베이스의 일부 딕셔너리 뷰의 예이다. (단, [USER_TABLES]의 NUM_ROWS 값은 통계 함수 호출 시 갱신되는 속성으로서 초기값은 NULL이며, [USER_TAB_COLUMNS]의 COLUMN_ID는 각 테이블별로 1부터 순차증가하는 컬럼 순번이고, [USER_TAB_PRIVS]의 GRANTABLE이 ‘Y’인 경우, 해당 사용자는 다른 사용자에게도 권한을 재부여할 수 있다) (총 20점)
[USER_TABLES]
TABLE_NAMETABLESPACE_NAMENUM_ROWS
EMPLOYEESUSERS3

[USER_TAB_COLUMNS]
TABLE_NAMECOLUMN_NAMEDATA_TYPENULLABLECOLUMN_ID
EMPLOYEESNAMEVARCHARN1
EMPLOYEESIDINTN2

[USER_TAB_PRIVS]
GRANTEETABLE_NAMEPRIVILEGEGRANTABLE
DONGHAEEMPLOYEESSELECTN
SEOHAEEMPLOYEESINSERTY

<후속 SQL문>
① CREATE TABLE DEPT (
ID INT,
NAME VARCHAR(50)
);
② ALTER TABLE EMPLOYEES ADD (CITY VARCHAR(50));
③ GRANT UPDATE ON DEPT TO DONGHAE;
  1. (1) 위에서 제시한 후속 SQL문 중 ①번 SQL문을 실행하고 난 후, 주어진 딕셔너리 뷰 [USER_TABLES], [USER_TAB_COLUMNS], [USER_TAB_PRIVS]의 내용이 어떻게 변화하였는지를 제시하시오. (5점)
  2. (2) 위에서 제시한 후속 SQL문 중 ②번 SQL문을 실행하고 난 후, 주어진 딕셔너리 뷰 [USER_TABLES], [USER_TAB_COLUMNS], [USER_TAB_PRIVS]의 내용이 어떻게 변화하였는지를 제시하시오. (4점)
  3. (3) 위에서 제시한 후속 SQL문 중 ③번 SQL문을 실행하고 난 후, 주어진 딕셔너리 뷰 [USER_TABLES], [USER_TAB_COLUMNS], [USER_TAB_PRIVS]의 내용이 어떻게 변화하였는지를 제시하시오. (4점)
  4. (4) 데이터 딕셔너리(시스템 카탈로그)란 무엇이며, 데이터베이스에서 어떤 역할을 수행하는지 서술하시오. 또한, 제시한 [USER_TABLES], [USER_TAB_COLUMNS], [USER_TAB_PRIVS]가 각각 어떤 정보를 제공하는지 설명하시오. (7점)
    끝