[7급 국가직 데이터베이스론] 21년 1회차
7급 국가직 데이터베이스론 기출문제

21년 1회차

총 25문항 · 객관식 · A4 약 1장

1 / 1
A4정답 포함
7급 국가직 데이터베이스론 기출문제모두CBT · moducbt.com

21년 1회차

총 25문항 · 객관식 · 정답·해설 포함
문제 1
SQL 언어에 대한 설명으로 옳지 않은 것은?
1SQL은 관계 데이터베이스 시스템의 표준 언어이다.
2SQL은 포괄적인 데이터베이스 언어로서 데이터 정의, 질의, 갱신을 위한 문들을 가지고 있다.
3트랜잭션의 시작, 철회, 완료 등을 표현하기 위해 SQL에서는 COMMIT, ROLLBACK 등을 사용한다.
4데이터 조작어는 데이터베이스에 데이터를 검색하여 추가하고 삭제하는 데 사용하며 SELECT, REVOKE가 이에 해당된다.
정답 및 해설

SELECT는 데이터 조작어(DML)이지만 REVOKE는 권한을 회수하는 데이터 제어어(DCL)이므로, 둘을 함께 DML로 묶은 설명이 옳지 않다.

DML에는 SELECT·INSERT·UPDATE·DELETE가, DCL에는 GRANT·REVOKE가 속한다.

  • SQL은 관계 DBMS의 표준 언어라는 설명은 옳다.
  • 데이터 정의·질의·갱신 문을 모두 갖춘 포괄적 언어라는 설명도 옳다.
  • 트랜잭션의 완료·철회를 COMMIT·ROLLBACK으로 표현한다는 설명도 옳다.
문제 2
다음은 4개의 트랜잭션 T1, T2, T3, T4에 대하여 시스템 고장(crash) 시점에 특정 스케줄에 대응하는 로그를 나타낸 것이다. 이 시스템은 로그를 이용한 회복기법으로 검사점(checkpoint)을 가진 즉시갱신규약(immediate update protocol)을 사용한다고 가정한다. 시스템 고장으로부터 회복(recovery)하는 과정에서 undo와 redo 연산들을 수행하게 된다. 회복 후 데이터 항목 A, B, C, D 값들을 바르게 연결한 것은? (단, 로그 레코드 구조는 <트랜잭션, 데이터 항목, 현재 값, 변경 값>이다)
로그 번호로그 레코드
1<T1 start>
2<T1, D, 20, 25>
3<T1 commit>
4<checkpoint {}>
5<T2 start>
6<T2, B, 12, 18>
7<T4 start>
8<T4, D, 25, 15>
9<T3 start>
10<T3, C, 30, 40>
11<T4, A, 30, 20>
12<T4 commit>
13<T2, D, 15, 25>
시스템 고장
A B C D
130 12 30 20
220 18 40 25
330 18 40 15
420 12 30 15
정답 및 해설

회복 후 값은 A=20, B=12, C=30, D=15이다.

검사점 이전에 완료된 T1은 처리하지 않고, 검사점 이후 commit 기록이 있는 T4는 redo, commit 기록이 없는 T2·T3는 undo한다.

  • T4 redo: D를 15로, A를 20으로 다시 반영한다.
  • T2 undo(역순): 로그 13으로 D를 15로, 로그 6으로 B를 12로 되돌린다.
  • T3 undo: 로그 10으로 C를 30으로 되돌린다.

따라서 B·C는 변경 전 값으로 돌아가고, A·D는 T4가 기록한 값이 남는다.

문제 3
뷰(view)에 대한 설명으로 옳지 않은 것은?
1생성된 뷰는 새로운 독립적인 테이블로 물리 저장소에 저장된다.
2데이터베이스 질의 시 사용자 편의성 및 재사용성, 보안성을 높이기 위한 기술이다.
3뷰의 질의연산은 제한을 받지 않지만 갱신연산은 제한을 받는다.
4하나의 테이블로 여러 개의 상이한 뷰를 정의하여 사용자의 요구에 따라 활용할 수 있다.
정답 및 해설

뷰는 물리적으로 저장되지 않는 가상 테이블이므로, 독립 테이블로 물리 저장소에 저장된다는 설명이 옳지 않다.

뷰는 정의(질의문)만 시스템 카탈로그에 저장되고, 사용할 때 기본 테이블에서 데이터를 가져온다.

  • 편의성·재사용성·보안성(필요한 열만 노출)을 높인다는 설명은 옳다.
  • 조회는 자유롭지만 조인·집계 뷰 등은 갱신이 제한된다는 설명도 옳다.
  • 하나의 테이블 위에 여러 뷰를 정의해 사용자별로 활용할 수 있다는 설명도 옳다.
문제 4
관계모델에 대한 설명으로 옳지 않은 것은?
1관계모델에서 행은 투플(tuple), 열은 애트리뷰트(attribute)로 부른다.
2투플 내의 각 값은 더 이상 나누어지지 않는 원자값이어야 한다.
3투플 내 어떤 애트리뷰트의 값을 알 수 없거나 값이 지정되지 않을 때는 NULL이라는 특수한 값을 사용한다.
4릴레이션은 투플들의 집합이기 때문에 릴레이션에서 투플이 순서대로만 나타나야 한다.
정답 및 해설

릴레이션은 투플의 집합이므로 투플 사이에 순서가 없다. 순서대로만 나타나야 한다는 설명이 옳지 않다.

집합의 성질상 투플의 무순서성과 중복 투플 불허가 관계 모델의 기본 특성이다.

  • 행을 투플, 열을 애트리뷰트라 부른다는 설명은 옳다.
  • 각 값이 원자값이어야 한다는 설명(제1정규형 조건)도 옳다.
  • 알 수 없거나 지정되지 않은 값에 NULL을 쓴다는 설명도 옳다.
문제 5
다음 사원 테이블에 대해 뷰_사원1과 같은 뷰를 생성하는 SQL 질의어를 작성할 때, ㉠, ㉡에 들어갈 내용을 바르게 연결한 것은?
사원
사번이름직급부서
108002김진수부장인사
105123이수진대리연구
128372박지훈과장영업
126721김지수부장영업
132122홍성대대리인사
뷰_사원1
사번이름
105123이수진
CREATE VIEW    뷰_사원1(사번, 이름)
( ㉠ )SELECT 사번, 이름
FROM 사원
WHERE ( ㉡ );
㉠ ㉡
1IN 직급=‘대리’
2AS 부서=‘연구’
3AS 직급=‘대리’
4IN 부서=‘연구’
정답 및 해설

㉠에는 AS, ㉡에는 부서=‘연구’가 들어간다.

뷰는 CREATE VIEW 뷰이름(열 목록) AS SELECT … 형식으로 정의하며, IN은 이 자리에 올 수 없다.

  • 직급=‘대리’ 조건은 이수진과 함께 홍성대도 선택하므로 1행짜리 뷰_사원1과 다르다.
  • 부서=‘연구’ 조건은 이수진 한 명만 선택해 뷰_사원1과 일치한다.
문제 6
트랜잭션 T1과 T2가 아래와 같이 수행될 때, T1의 ㉠, ㉡의 출력 값은? (단, 팬텀(phantom)을 초래하는 위반들을 허용하지 않는다)
sale
nonameprice
1a1200
2a2150
3b1100
T1T2
set transaction isolation
level repeatable read;
set transaction isolation
level repeatable read;
start transaction;
start transaction;
insert into sale
values(4, ‘b2’, 50);
select ㉠ sum(price)
from sale;
commit
update sale set price=price+100
where no=3;
select ㉡ sum(price)
from sale;
commit
㉠ ㉡
1450 550
2450 600
3500 600
4500 500
정답 및 해설

㉠은 450, ㉡은 550이다.

㉠ 시점에 T2의 삽입은 아직 commit되지 않았으므로 T1은 기존 세 행만 읽어 200+150+100=450을 얻는다.

T2가 commit한 뒤에도 팬텀을 허용하지 않으므로 T1에는 새 행(no=4)이 보이지 않는다. T1이 no=3의 price를 200으로 바꾸었으므로 ㉡은 200+150+200=550이다.

  • ㉡이 600이 되려면 새 행의 50까지 합산되어야 하므로 팬텀 불허 조건에 어긋난다.
  • ㉠이 500이 되려면 commit 전 삽입을 읽는 오손 읽기가 필요하므로 repeatable read에서 불가능하다.
문제 7
테이블 R과 S에 대해 아래의 SQL 질의어를 수행한 결과로 나오는 RSID 값은?
R
RSIDCName
1001국어
1002영어
1003국어
1003수학
1004국어
1004영어
1004수학
1005과학
S
CName
영어
국어
SELECT distinct(RSID) FROM R as x
WHERE NOT EXISTS (
(SELECT p.CName FROM S as p)
EXCEPT
(SELECT y.CName FROM R as y WHERE
x.RSID = y.RSID));
11001
21002
31003
41004
정답 및 해설

질의 결과로 남는 RSID는 1004뿐이다.

이 질의는 S의 과목에서 x가 수강한 과목을 뺀 차집합이 비어 있는지(NOT EXISTS)를 보아, S의 모든 과목(영어·국어)을 가진 RSID를 찾는 관계 나눗셈이다.

  • 1001은 국어만 있어 영어가 남으므로 제외된다.
  • 1002는 영어만 있어 국어가 남으므로 제외된다.
  • 1003은 국어·수학이어서 영어가 남으므로 제외된다.

1004는 국어·영어·수학을 모두 가져 차집합이 공집합이 되므로 선택된다.

문제 8
다음과 같은 student 테이블의 스키마가 주어졌을 때, 주어진 요구에 대한 SQL 질의어로 옳지 않은 것은?
student(studno, name, grade, score, deptno)
(단, studno는 학번, name은 학생 이름, grade는 학년, score는 성적, deptno는 학생이 속한 학과 번호를 의미하며, studno는 기본키이다)
1student 테이블에서 각 학과별 평균 성적, 최고 성적, 최저 성적 검색
SELECT deptno, AVG(score), MAX(score), MIN(score)
FROM student
GROUP BY deptno
2student 테이블에서 각 학과의 각 학년별 인원수와 평균 성적 검색
SELECT deptno, grade, COUNT(*), AVG(score)
FROM student
GROUP BY deptno, grade
3student 테이블에서 학과 번호가 100번 이상인 학과들의 평균 성적 검색
SELECT deptno, AVG(score)
FROM student
WHERE deptno >= 100
GROUP BY deptno
4student 테이블에서 각 학년별로 학생 수가 10명 이상인 학년, 학생 수, 평균 성적 검색
SELECT grade, COUNT(*), AVG(score)
FROM student
WHERE COUNT(*) >= 10
GROUP BY grade
정답 및 해설

집계 함수는 WHERE 절에 쓸 수 없으므로, WHERE COUNT(*) >= 10을 쓴 학년별 질의가 옳지 않다.

그룹 단위 조건은 GROUP BY grade 뒤에 HAVING COUNT(*) >= 10으로 지정해야 한다.

  • 학과별 평균·최고·최저 성적을 GROUP BY deptno로 구한 질의는 옳다.
  • 학과·학년 두 열로 묶어 인원수와 평균을 구한 질의도 옳다.
  • 행 조건 deptno >= 100을 WHERE로 거른 뒤 학과별 평균을 구한 질의도 옳다.
문제 9
정규화(normalization)에 대한 설명 중 옳은 것만을 모두 고르면?
ㄱ. 데이터의 정규화는 중복을 최소화하고 삽입, 삭제, 수정 이상을 최소화하기 위해서 함수적 종속성과 기본키를 기반으로, 주어진 릴레이션 스키마를 분석하는 과정이다.
ㄴ. 릴레이션 스키마 R의 모든 원소들의 도메인(domain)이 나눌 수 있는 단위로 되어있을 때, R이 제1정규형에 속한다.
ㄷ. 제2정규형이 되기 위해서는 릴레이션 R이 제1정규형이고 기본키가 아닌 속성이 기본키에 부분함수 종속이어야 한다.
ㄹ. 제3정규형이 되기 위해서는 릴레이션 R이 제2정규형이고, 릴레이션 R의 함수 종속 관계에서 이행적 함수 종속을 제거해야 한다.
ㅁ. 제4정규형이 되기 위해서는 릴레이션 R이 제3정규형이고, 함수 종속 관계에서 모든 결정자가 후보키이면 된다.
1ㄱ, ㄹ
2ㄴ, ㄷ
3ㄱ, ㄹ, ㅁ
4ㄷ, ㄹ, ㅁ
정답 및 해설

옳은 것은 ㄱ, ㄹ이다.

정규화는 함수 종속과 키를 바탕으로 이상을 줄이는 분석 과정이고(ㄱ), 3NF는 2NF에서 이행적 함수 종속을 제거한 형태다(ㄹ).

  • ㄴ: 1NF는 모든 도메인이 더 이상 나눌 수 없는 원자값일 때 성립한다.
  • ㄷ: 2NF는 기본키가 아닌 속성이 기본키에 완전 함수 종속이어야 하며, 부분 함수 종속은 제거 대상이다.
  • ㅁ: 모든 결정자가 후보키인 것은 BCNF 조건이고, 4NF는 다치 종속을 제거한 형태다.
문제 10
NOSQL에 대한 설명으로 옳지 않은 것은?
1NOSQL은 샤딩(sharding)을 지원한다.
2BigTable, Cassandra 등이 대표적인 NOSQL이다.
3NOSQL은 RDBMS와 같이 스키마(schema)를 필요로 한다.
4NOSQL은 가용성(availability)과 확장성(scalability)을 중요시 한다.
정답 및 해설

NoSQL은 스키마가 없거나 유연한(schema-less) 구조이므로, RDBMS처럼 스키마를 필요로 한다는 설명이 옳지 않다.

고정 스키마 없이 키-값·문서·컬럼·그래프 형태로 저장해 구조 변경에 유연하다.

  • 데이터를 여러 노드로 나누는 샤딩을 지원한다는 설명은 옳다.
  • BigTable·Cassandra를 대표 NoSQL로 든 설명도 옳다.
  • 가용성과 수평 확장성을 중시한다는 설명도 옳다.
문제 11
함수 F의 종속성이 다음과 같을 때 구할 수 있는 함수 종속으로 옳지 않은 것은?
F ={A →B, D →B, D →AC, BE →D}
1E →D
2E →E
3AE →D
4AC →BC
정답 및 해설

E의 폐포는 E 자신뿐이므로 E→D는 유도할 수 없다.

F에는 E만으로 결정되는 종속이 없고, BE→D는 B가 함께 있어야 적용된다.

  • E→E는 반사 규칙에 의한 자명한 종속이다.
  • AE→D: A→B로 AE의 폐포에 B가 들어오고, BE→D로 D가 유도된다.
  • AC→BC: A→B의 양변에 C를 첨가(증가 규칙)하면 얻어진다.
문제 12
데이터베이스 트리거(trigger)에 대한 설명으로 옳지 않은 것은?
1테이블에서 이벤트 발생 시 자동으로 반응해 실행되는 작업이다.
2트리거는 데이터베이스의 무결성을 유지하기 위한 도구이다.
3행-수준 트리거(row-level trigger)는 FOR EACH STATEMENT 절을 사용하여 표시한다.
4이벤트가 발생한 이후 실행되는 After 트리거와 이벤트가 발생하기 전에 실행되는 Before 트리거가 있다.
정답 및 해설

행 수준 트리거는 FOR EACH ROW 절로 표시하므로, FOR EACH STATEMENT를 쓴다는 설명이 옳지 않다.

FOR EACH STATEMENT는 문장 전체에 대해 한 번 실행되는 문장 수준 트리거에 쓴다.

  • 이벤트 발생 시 자동으로 실행되는 작업이라는 설명은 옳다.
  • 무결성 유지 도구라는 설명도 옳다.
  • 이벤트 전후에 실행되는 BEFORE·AFTER 트리거가 있다는 설명도 옳다.
문제 13
트랜잭션 수행 과정이 다음과 같을 때, DBMS에서 데이터 복원을 위해 수행되는 작업으로 옳지 않은 것은?

1T2는 redo(재실행)된다.
2T4는 undo(실행취소)된다.
3T1에 대해서는 어떠한 작업도 수행하지 않는다.
4체크포인트 시 로그 레코드 <checkpoint {T2, T5}>를 저장장치에 기록한다.
정답 및 해설

오류 발생 직전에 이미 완료(커밋)된 T4T_{4}는 실행취소 대상이 아니라 redo(재실행) 대상이므로, T4T_{4}가 undo된다는 설명이 옳지 않다.

즉시 갱신·체크포인트 회복에서는 체크포인트 이후 오류 전까지 커밋된 트랜잭션은 redo, 오류 시점에 미완료인 트랜잭션은 undo, 체크포인트 이전에 커밋된 트랜잭션은 무시한다. 그림에서 T3T_{3}와 T5T_{5}는 오류 시점까지 끝나지 않아 undo, T2T_{2}와 T4T_{4}는 오류 전에 끝나 redo된다.

  • T2T_{2} redo — 체크포인트 전에 시작했지만 오류 전에 커밋되었으므로, 체크포인트 이후의 변경분을 재실행해야 한다는 설명은 옳다.
  • T1T_{1} 무작업 — 체크포인트 이전에 커밋이 끝나 변경이 이미 디스크에 반영되었으므로 옳다.
  • 체크포인트 로그 기록 — 체크포인트 시점에 활성 상태인 트랜잭션은 T2T_{2}와 T5T_{5}뿐이므로 이 둘을 담은 checkpoint 레코드를 기록한다는 설명은 옳다.
문제 14
다음 데이터베이스가 만족하지 않는 제약조건은? (단, STUDENT 릴레이션의 Dept_No는 DEPARTMENT 릴레이션의 Dept_Number를 참조한다)
STUDENT
IDNameDept_NoBirth_Data
20120011이지연11993-01-23
20130023김병수31994-11-05
20140101김남현31995-08-21
20144006차기현21995-04-19
20105789안정민41991-01-03
DEPARTMENT
Dept_NameDept_NumberQuotaDean
컴퓨터공학과135김지연
전자공학과240정주현
1유일성 제약조건
2참조 무결성 제약조건
3엔티티 무결성 제약조건
4함수적 종속성 제약조건
정답 및 해설

STUDENT의 Dept_No 값 3·4가 DEPARTMENT의 Dept_Number에 없으므로 참조 무결성 제약조건을 만족하지 않는다.

외래키 값은 참조 릴레이션의 기본키 값이거나 NULL이어야 한다.

  • ID와 Dept_Number 값이 각각 중복되지 않으므로 유일성은 만족한다.
  • 기본키에 NULL이 없으므로 엔티티 무결성도 만족한다.
  • 주어진 인스턴스에서 함수 종속을 위반하는 투플 쌍도 없다.
문제 15
외부, 개념, 내부 스키마로 구성되는 3-레벨 스키마 구조와 데이터 독립성에 대한 설명으로 옳지 않은 것은?
1내부 레벨 또는 내부 스키마는 데이터베이스의 물리적 스토리지 구조를 기술한다.
2논리적 데이터 독립성은 응용 프로그램이나 데이터베이스의 논리적 구조에 영향을 주지 않고 DBMS가 데이터의 물리적 구조를 변경할 수 있는 것을 말한다.
3외부 스키마는 특정 사용자 그룹이 관심을 가지고 있는 데이터베이스의 일부분을 기술하며 데이터베이스의 나머지 부분을 그 사용자 그룹으로부터 숨겨 준다.
4SQL 뷰가 정의된 기본 테이블이 확장된다든지 뷰가 속해 있는 테이블이 더 늘어난다고 하더라도 기존의 뷰를 사용하는 프로그램이나 사용자는 영향을 받지 않으므로, SQL 뷰는 데이터의 논리적 독립성을 어느 정도 제공할 수 있다.
정답 및 해설

응용 프로그램이나 논리 구조에 영향 없이 물리 구조를 바꿀 수 있는 것은 물리적 데이터 독립성이므로, 이를 논리적 독립성이라 한 설명이 옳지 않다.

논리적 데이터 독립성은 개념 스키마가 바뀌어도 외부 스키마·응용 프로그램이 영향을 받지 않는 성질이다.

  • 내부 스키마가 물리적 저장 구조를 기술한다는 설명은 옳다.
  • 외부 스키마가 사용자 그룹의 관심 부분만 보여 주고 나머지를 숨긴다는 설명도 옳다.
  • 기본 테이블이 확장되어도 기존 뷰 사용자가 영향을 받지 않아 뷰가 논리적 독립성을 일부 제공한다는 설명도 옳다.
문제 16
다음 SQL 명령어 중 데이터 정의어(DDL)만을 고르면?
ㄱ. ALTER
ㄴ. DROP
ㄷ. TRUNCATE
ㄹ. GRANT
ㅁ. COMMIT
1ㄱ, ㅁ
2ㄴ, ㄷ
3ㄷ, ㄹ
4ㄹ, ㅁ
정답 및 해설

DDL로만 이루어진 조합은 DROP, TRUNCATE(ㄴ, ㄷ)이다.

ALTER·DROP·TRUNCATE는 객체 구조를 정의·변경·제거하는 DDL이고, GRANT는 DCL, COMMIT은 트랜잭션 제어어(TCL)다.

  • ALTER와 COMMIT 조합은 COMMIT이 DDL이 아니어서 제외된다.
  • TRUNCATE와 GRANT 조합은 GRANT가 권한 부여 명령이어서 제외된다.
  • GRANT와 COMMIT 조합은 둘 다 DDL이 아니다.
문제 17
다음 데이터베이스 스키마를 보고, 아래 SQL 질의문과 동등한 관계대수식은?
○ 스키마
사원(사원번호, 부서번호, 급여, 취미)
부서(부서번호, 부서명, 건물층, 전화번호)
재정(부서번호, 예산, 매출, 비용)

○ 질의문
Select D.부서명, F.예산
From 사원 E, 부서 D, 재정 F
Where E.부서번호=D.부서번호 and D.부서번호=F.부서번호
and D.건물층=1 and E.급여>=3000000
and E.취미=‘테니스’
1πD.부서명, F.예산((πE.부서번호(σE.급여>=3000000 and E.취미=‘테니스’(E))⋈πD.부서번호, D.부서명(σD.건물층=1(D)))⋈πF.예산, F.부서번호(F))\pi_{\text{D.부서명, F.예산}}((\pi_{\text{E.부서번호}}(\sigma_{\text{E.급여>=3000000 and E.취미=‘테니스’}}(E)) \bowtie \pi_{\text{D.부서번호, D.부서명}}(\sigma_{\text{D.건물층=1}}(D))) \bowtie \pi_{\text{F.예산, F.부서번호}}(F))
2πE.부서번호((πD.부서명, F.예산(σE.급여>=3000000 and E.취미=‘테니스’(E))⋈πD.부서번호, D.부서명(σD.건물층=1(D)))⋈πF.예산, F.부서번호(F))\pi_{\text{E.부서번호}}((\pi_{\text{D.부서명, F.예산}}(\sigma_{\text{E.급여>=3000000 and E.취미=‘테니스’}}(E)) \bowtie \pi_{\text{D.부서번호, D.부서명}}(\sigma_{\text{D.건물층=1}}(D))) \bowtie \pi_{\text{F.예산, F.부서번호}}(F))
3πD.부서명, F.예산((πF.부서번호, D.부서명(σD.건물층=1(D))⋈πE.부서번호(σE.급여>=3000000 and E.취미=‘테니스’(E)))⋈πF.예산(F))\pi_{\text{D.부서명, F.예산}}((\pi_{\text{F.부서번호, D.부서명}}(\sigma_{\text{D.건물층=1}}(D)) \bowtie \pi_{\text{E.부서번호}}(\sigma_{\text{E.급여>=3000000 and E.취미=‘테니스’}}(E))) \bowtie \pi_{\text{F.예산}}(F))
4πD.부서명, F.예산((πE.부서번호(σF.예산, F.부서번호(F))⋈πD.부서번호, D.부서명(σD.건물층=1(D)))⋈πE.급여>=3000000 and E.취미=‘테니스’(E))\pi_{\text{D.부서명, F.예산}}((\pi_{\text{E.부서번호}}(\sigma_{\text{F.예산, F.부서번호}}(F)) \bowtie \pi_{\text{D.부서번호, D.부서명}}(\sigma_{\text{D.건물층=1}}(D))) \bowtie \pi_{\text{E.급여>=3000000 and E.취미=‘테니스’}}(E))
정답 및 해설

동등한 식은 사원에서 급여·취미 조건을 선택해 부서번호를 추출하고, 건물층=1인 부서의 부서번호·부서명과 조인한 뒤 재정의 예산·부서번호와 조인해 부서명·예산을 투영한 식이다.

선택·투영을 조인 앞으로 내려 보내도 결과가 같다는 관계대수 동치를 이용한 형태다.

  • 최종 투영을 E.부서번호로 한 식은 결과 열이 부서명·예산이 아니며, 사원에 대해 부서명·예산을 투영해 성립하지 않는다.
  • 재정에서 예산만 투영한 식은 조인 속성인 부서번호가 사라져 부서와 연결되지 않는다.
  • 재정에 열 목록을 선택 조건처럼, 사원에 조건식을 투영 목록처럼 쓴 식은 선택과 투영이 뒤바뀌었다.
문제 18
다음 릴레이션 R과 S에 대한 조인 연산 결과가 옳지 않은 것은? (단, ⋈N은 자연 조인, ⟕은 왼쪽 외부 조인, ⟖은 오른쪽 외부 조인, ⋉은 세미 조인을 의미한다)
R
ABC
a1b1c1
a2b2c2
a3b3c3
a4b3c3
a5b5c5
S
BCD
b1c1d1
b2c2d2
b2c2d3
b3c3d4
b4c4d5
1R ⋈N S
ABCD
a1b1c1d1
a2b2c2d2
a2b2c2d3
a3b3c3d4
a4b3c3d4
2R ⟕R.B=S.B and R.C=S.C S
ABCD
a1b1c1d1
a2b2c2d2
a2b2c2d3
a3b3c3d4
a4b3c3d4
a5b5c5NULL
3R ⟖R.B=S.B and R.C=S.C S
ABCD
a1b1c1d1
a2b2c2d2
a2b2c2d3
a3b3c3d4
a4b3c3d4
NULLb4c4d5
4R ⋉R.B=S.B and R.C=S.C S
ABC
a1b1c1
a2b2c2
a3b3c3
정답 및 해설

세미 조인 결과에 (a4, b3, c3)이 빠져 있으므로 이 결과가 옳지 않다.

세미 조인은 S와 B·C 값이 일치하는 R의 투플을 R의 속성만으로 돌려준다. (b3, c3)은 S에 있으므로 a1·a2·a3·a4의 네 투플이 나와야 한다.

  • 자연 조인은 a2가 d2·d3와 두 번, a3·a4가 각각 d4와 결합해 총 5행이 되므로 맞다.
  • 왼쪽 외부 조인은 자연 조인 5행에 짝이 없는 a5를 D=NULL로 더한 결과로 맞다.
  • 오른쪽 외부 조인은 짝이 없는 S의 (b4, c4, d5)를 A=NULL로 더한 결과로 맞다.
문제 19
분산 데이터베이스 관리시스템에서 복수의 분할된 물리적 데이터베이스를 논리적으로 단일화된 데이터베이스처럼 인식하게 하기 위한 투명성(transparency)에 대한 설명으로 옳지 않은 것은?
1단편화(fragmentation) 투명성은 사용자들이 릴레이션이 어떻게 단편화되어 있는지 알 필요가 없다.
2장애(failure) 투명성은 다수의 트랜잭션이 동시에 수행되는 경우에도 오류 없이 결과의 일관성이 유지되어야 하는 성질이다.
3중복(replication) 투명성은 중복된 데이터가 무엇인지 저장 위치 등에 대한 정보를 사용자가 별도로 인지할 필요가 없어야 하는 성질이다.
4위치(location) 투명성은 사용자나 애플리케이션에서 작업을 수행하기 위해 데이터의 물리적인 위치도 알 필요가 없어야 하는 성질이다.
정답 및 해설

여러 트랜잭션이 동시에 수행되어도 결과의 일관성을 유지하는 성질은 병행(concurrency) 투명성이므로, 이를 장애 투명성이라 한 설명이 옳지 않다.

장애 투명성은 사이트·통신 장애가 생겨도 트랜잭션의 원자성이 보장되어 사용자가 장애를 의식하지 않게 하는 성질이다.

  • 릴레이션의 단편화 방식을 사용자가 알 필요가 없다는 설명은 옳다.
  • 중복 데이터와 그 저장 위치를 인지할 필요가 없다는 설명도 옳다.
  • 데이터의 물리적 위치를 알 필요가 없다는 위치 투명성 설명도 옳다.
문제 20
다음 사원 테이블에서 차수와 카디날리티 값을 바르게 연결한 것은?
사원
사번이름직급부서
108002김진수부장인사
105123이수진대리연구
128372박지훈과장영업
차수 카디날리티
13 3
23 4
34 3
44 4
정답 및 해설

사원 테이블의 차수는 4, 카디날리티는 3이다.

차수(degree)는 애트리뷰트(열)의 수로 사번·이름·직급·부서 4개이고, 카디날리티(cardinality)는 투플(행)의 수로 3개다.

  • 차수를 3으로 본 조합은 열과 행의 개수를 혼동한 것이다.
  • 카디날리티를 4로 본 조합은 열 개수를 행 개수로 센 것이다.
문제 21
데이터베이스 암호화 방식 중 API 방식에 대한 설명으로 옳지 않은 것은?
1API 방식은 암․복호화 모듈을 어플리케이션 서버에 설치한다.
2플러그인 방식보다 암․복호화 속도가 상대적으로 빠르다.
3플러그인 방식보다 응용 프로그램의 수정이 필요 없어 사용이 편리하다.
4플러그인 방식보다 데이터베이스 서버의 부하가 거의 발생하지 않는다.
정답 및 해설

API 방식은 응용 프로그램이 암·복호화 API를 직접 호출하므로 응용 프로그램 수정이 필요하다. 수정이 필요 없어 편리하다는 설명이 옳지 않다.

응용 프로그램 수정이 거의 없는 쪽은 DB 서버에 모듈을 설치하는 플러그인 방식이다.

  • 암·복호화 모듈을 애플리케이션 서버에 설치한다는 설명은 옳다.
  • 암·복호화를 애플리케이션 서버에서 처리해 플러그인 방식보다 상대적으로 빠르다는 설명도 옳다.
  • DB 서버에 암·복호화 부하가 거의 걸리지 않는다는 설명도 옳다.
문제 22
여러 트랜잭션을 병행수행(concurrency)하였을 때, 발생할 수 있는 문제 가운데 갱신분실(lost update)에 대한 설명으로 옳은 것은?
1두 개의 트랜잭션은 서로 상대 트랜잭션이 완료되기만을 기다리고 있는 상태로, 두 트랜잭션은 영원히 완료될 수 없는 문제이다.
2장애가 발생한 트랜잭션에 대한 롤백(rollback)이 수행되기 전에, 변경된 데이터를 가져가 사용하는 다른 트랜잭션의 수행이 완료되어 롤백이 실행될 수 없는 문제이다.
3하나의 트랜잭션이 수행한 데이터 변경 연산의 결과를 다른 트랜잭션이 덮어써서 기존 트랜잭션의 변경 연산 결과가 손실되는 것이다.
4하나의 트랜잭션이 여러 개의 데이터에 대해 변경 연산을 실행했을 때, 일관성이 유지되지 않는 데이터베이스로부터 데이터를 가져와 연산을 실행함으로 발생될 수 있다.
정답 및 해설

갱신분실은 한 트랜잭션의 변경 결과를 다른 트랜잭션이 덮어써서 앞선 갱신이 사라지는 문제다.

두 트랜잭션이 같은 값을 읽고 각자 갱신해 기록하면 나중에 쓴 값만 남는다.

  • 서로 상대가 끝나기만 기다리며 영원히 완료되지 못하는 것은 교착상태다.
  • 롤백 전에 변경 데이터를 가져간 트랜잭션이 이미 완료되어 롤백할 수 없는 것은 회복 불가능(연쇄 복귀) 문제다.
  • 일관성이 깨진 상태의 데이터를 읽어 연산하는 것은 모순성(비일관성 분석) 문제다.
문제 23
다중 데이터베이스 시스템에서 2단계 완료 프로토콜(two-phase commit protocol) 기법에 대한 설명으로 옳은 것은?
11단계 수행 중 고장이 발생하면, 해당 트랜잭션은 회복되거나 완료된다.
2트랜잭션 관리자(Transaction Manager: TM)는 그 지역 사이트에서 시작된 트랜잭션의 실행을 조정하는 역할을 한다.
31단계에서는 조정자가 메시지[prepare T]에 대한 응답을 모든 사이트로부터 받으면 트랜잭션 T가 완료(commit)될 수 있는지 결정할 수 있다.
42단계에서 조정자가 모든 참여 사이트로부터 메시지[ready T]를 받았다면 트랜잭션 T는 완료되고 그렇지 않으면 취소된다.
정답 및 해설

2단계에서 조정자는 모든 참여 사이트로부터 ready T를 받으면 T를 완료하고, 그렇지 않으면 취소한다.

1단계는 조정자가 prepare T를 보내고 각 사이트가 ready 또는 abort로 응답하는 과정이며, 응답을 모아 완료 여부를 결정하는 것은 2단계의 일이다.

  • 1단계 수행 중 고장이 발생하면 트랜잭션은 완료되지 않고 취소된다.
  • 지역 사이트에서 시작된 트랜잭션의 실행을 조정하는 것은 트랜잭션 관리자가 아니라 트랜잭션 조정자(TC)의 역할이다.
  • prepare T 응답을 모두 받아 완료 가능 여부를 판단하는 것은 1단계가 아닌 2단계에 해당한다.
문제 24
데이터베이스 재해 복구(disaster recovery) 기술에 대한 설명으로 옳은 것은?
1재해적 실패가 발생하면 가장 최근의 백업 사본이 디스크에서 백업장치로 적재된다.
2은행, 보험, 주식 등과 같은 중요한 응용에서는 데이터 전체를 주기적으로 백업하여 안전한 장소에 보관한다.
3시스템 로그를 백업하면 사용자는 마지막 데이터베이스 백업 이후에 수행한 모든 트랜잭션을 잃게 된다.
4백업된 시스템 로그에 기록되어 있는 모든 완료된 트랜잭션의 실행결과는 데이터베이스를 undo하는 데 사용될 수 있다.
정답 및 해설

은행·보험·주식처럼 중요한 응용에서는 데이터 전체를 주기적으로 백업해 안전한 장소에 보관한다는 설명이 옳다.

재해 시에는 백업본을 복원한 뒤 백업된 로그로 이후의 완료 트랜잭션을 redo해 최근 상태까지 되살린다.

  • 재해 시 백업 사본은 백업 장치에서 디스크로 적재되므로 방향이 반대로 서술되었다.
  • 시스템 로그를 백업해 두면 마지막 DB 백업 이후의 트랜잭션도 잃지 않고 복구할 수 있다.
  • 완료된 트랜잭션의 실행 결과는 undo가 아니라 redo에 사용된다.
문제 25
릴레이션 R에 K 단계 합병(k-way merge) 정렬을 수행하고자 한다. 정렬이 완료될 때까지 최소 몇 번의 디스크 접근(읽기+쓰기 횟수)이 필요한가? (단, 문제에서 언급되지 않은 다른 기법은 고려하지 않는다)
○ 각 디스크 블록에는 레코드 200개씩 저장되어 있음
○ 주 기억장치의 최대 사용가능한 크기: 레코드 1,000개 크기
○ 전체 정렬해야 할 레코드의 개수: 3,200개
132회
264회
396회
4128회
7급 국가직 데이터베이스론 기출문제모두CBT · moducbt.com
21년 1회차
총 25문항 · 객관식 · 정답·해설 포함
문제 1
SQL 언어에 대한 설명으로 옳지 않은 것은?
1SQL은 관계 데이터베이스 시스템의 표준 언어이다.
2SQL은 포괄적인 데이터베이스 언어로서 데이터 정의, 질의, 갱신을 위한 문들을 가지고 있다.
3트랜잭션의 시작, 철회, 완료 등을 표현하기 위해 SQL에서는 COMMIT, ROLLBACK 등을 사용한다.
4데이터 조작어는 데이터베이스에 데이터를 검색하여 추가하고 삭제하는 데 사용하며 SELECT, REVOKE가 이에 해당된다.
정답 및 해설

SELECT는 데이터 조작어(DML)이지만 REVOKE는 권한을 회수하는 데이터 제어어(DCL)이므로, 둘을 함께 DML로 묶은 설명이 옳지 않다.

DML에는 SELECT·INSERT·UPDATE·DELETE가, DCL에는 GRANT·REVOKE가 속한다.

  • SQL은 관계 DBMS의 표준 언어라는 설명은 옳다.
  • 데이터 정의·질의·갱신 문을 모두 갖춘 포괄적 언어라는 설명도 옳다.
  • 트랜잭션의 완료·철회를 COMMIT·ROLLBACK으로 표현한다는 설명도 옳다.
문제 2
다음은 4개의 트랜잭션 T1, T2, T3, T4에 대하여 시스템 고장(crash) 시점에 특정 스케줄에 대응하는 로그를 나타낸 것이다. 이 시스템은 로그를 이용한 회복기법으로 검사점(checkpoint)을 가진 즉시갱신규약(immediate update protocol)을 사용한다고 가정한다. 시스템 고장으로부터 회복(recovery)하는 과정에서 undo와 redo 연산들을 수행하게 된다. 회복 후 데이터 항목 A, B, C, D 값들을 바르게 연결한 것은? (단, 로그 레코드 구조는 <트랜잭션, 데이터 항목, 현재 값, 변경 값>이다)
로그 번호로그 레코드
1<T1 start>
2<T1, D, 20, 25>
3<T1 commit>
4<checkpoint {}>
5<T2 start>
6<T2, B, 12, 18>
7<T4 start>
8<T4, D, 25, 15>
9<T3 start>
10<T3, C, 30, 40>
11<T4, A, 30, 20>
12<T4 commit>
13<T2, D, 15, 25>
시스템 고장
A B C D
130 12 30 20
220 18 40 25
330 18 40 15
420 12 30 15
정답 및 해설

회복 후 값은 A=20, B=12, C=30, D=15이다.

검사점 이전에 완료된 T1은 처리하지 않고, 검사점 이후 commit 기록이 있는 T4는 redo, commit 기록이 없는 T2·T3는 undo한다.

  • T4 redo: D를 15로, A를 20으로 다시 반영한다.
  • T2 undo(역순): 로그 13으로 D를 15로, 로그 6으로 B를 12로 되돌린다.
  • T3 undo: 로그 10으로 C를 30으로 되돌린다.

따라서 B·C는 변경 전 값으로 돌아가고, A·D는 T4가 기록한 값이 남는다.

문제 3
뷰(view)에 대한 설명으로 옳지 않은 것은?
1생성된 뷰는 새로운 독립적인 테이블로 물리 저장소에 저장된다.
2데이터베이스 질의 시 사용자 편의성 및 재사용성, 보안성을 높이기 위한 기술이다.
3뷰의 질의연산은 제한을 받지 않지만 갱신연산은 제한을 받는다.
4하나의 테이블로 여러 개의 상이한 뷰를 정의하여 사용자의 요구에 따라 활용할 수 있다.
정답 및 해설

뷰는 물리적으로 저장되지 않는 가상 테이블이므로, 독립 테이블로 물리 저장소에 저장된다는 설명이 옳지 않다.

뷰는 정의(질의문)만 시스템 카탈로그에 저장되고, 사용할 때 기본 테이블에서 데이터를 가져온다.

  • 편의성·재사용성·보안성(필요한 열만 노출)을 높인다는 설명은 옳다.
  • 조회는 자유롭지만 조인·집계 뷰 등은 갱신이 제한된다는 설명도 옳다.
  • 하나의 테이블 위에 여러 뷰를 정의해 사용자별로 활용할 수 있다는 설명도 옳다.
문제 4
관계모델에 대한 설명으로 옳지 않은 것은?
1관계모델에서 행은 투플(tuple), 열은 애트리뷰트(attribute)로 부른다.
2투플 내의 각 값은 더 이상 나누어지지 않는 원자값이어야 한다.
3투플 내 어떤 애트리뷰트의 값을 알 수 없거나 값이 지정되지 않을 때는 NULL이라는 특수한 값을 사용한다.
4릴레이션은 투플들의 집합이기 때문에 릴레이션에서 투플이 순서대로만 나타나야 한다.
정답 및 해설

릴레이션은 투플의 집합이므로 투플 사이에 순서가 없다. 순서대로만 나타나야 한다는 설명이 옳지 않다.

집합의 성질상 투플의 무순서성과 중복 투플 불허가 관계 모델의 기본 특성이다.

  • 행을 투플, 열을 애트리뷰트라 부른다는 설명은 옳다.
  • 각 값이 원자값이어야 한다는 설명(제1정규형 조건)도 옳다.
  • 알 수 없거나 지정되지 않은 값에 NULL을 쓴다는 설명도 옳다.
문제 5
다음 사원 테이블에 대해 뷰_사원1과 같은 뷰를 생성하는 SQL 질의어를 작성할 때, ㉠, ㉡에 들어갈 내용을 바르게 연결한 것은?
사원
사번이름직급부서
108002김진수부장인사
105123이수진대리연구
128372박지훈과장영업
126721김지수부장영업
132122홍성대대리인사
뷰_사원1
사번이름
105123이수진
CREATE VIEW    뷰_사원1(사번, 이름)
( ㉠ )SELECT 사번, 이름
FROM 사원
WHERE ( ㉡ );
㉠ ㉡
1IN 직급=‘대리’
2AS 부서=‘연구’
3AS 직급=‘대리’
4IN 부서=‘연구’
정답 및 해설

㉠에는 AS, ㉡에는 부서=‘연구’가 들어간다.

뷰는 CREATE VIEW 뷰이름(열 목록) AS SELECT … 형식으로 정의하며, IN은 이 자리에 올 수 없다.

  • 직급=‘대리’ 조건은 이수진과 함께 홍성대도 선택하므로 1행짜리 뷰_사원1과 다르다.
  • 부서=‘연구’ 조건은 이수진 한 명만 선택해 뷰_사원1과 일치한다.
문제 6
트랜잭션 T1과 T2가 아래와 같이 수행될 때, T1의 ㉠, ㉡의 출력 값은? (단, 팬텀(phantom)을 초래하는 위반들을 허용하지 않는다)
sale
nonameprice
1a1200
2a2150
3b1100
T1T2
set transaction isolation
level repeatable read;
set transaction isolation
level repeatable read;
start transaction;
start transaction;
insert into sale
values(4, ‘b2’, 50);
select ㉠ sum(price)
from sale;
commit
update sale set price=price+100
where no=3;
select ㉡ sum(price)
from sale;
commit
㉠ ㉡
1450 550
2450 600
3500 600
4500 500
정답 및 해설

㉠은 450, ㉡은 550이다.

㉠ 시점에 T2의 삽입은 아직 commit되지 않았으므로 T1은 기존 세 행만 읽어 200+150+100=450을 얻는다.

T2가 commit한 뒤에도 팬텀을 허용하지 않으므로 T1에는 새 행(no=4)이 보이지 않는다. T1이 no=3의 price를 200으로 바꾸었으므로 ㉡은 200+150+200=550이다.

  • ㉡이 600이 되려면 새 행의 50까지 합산되어야 하므로 팬텀 불허 조건에 어긋난다.
  • ㉠이 500이 되려면 commit 전 삽입을 읽는 오손 읽기가 필요하므로 repeatable read에서 불가능하다.
문제 7
테이블 R과 S에 대해 아래의 SQL 질의어를 수행한 결과로 나오는 RSID 값은?
R
RSIDCName
1001국어
1002영어
1003국어
1003수학
1004국어
1004영어
1004수학
1005과학
S
CName
영어
국어
SELECT distinct(RSID) FROM R as x
WHERE NOT EXISTS (
(SELECT p.CName FROM S as p)
EXCEPT
(SELECT y.CName FROM R as y WHERE
x.RSID = y.RSID));
11001
21002
31003
41004
정답 및 해설

질의 결과로 남는 RSID는 1004뿐이다.

이 질의는 S의 과목에서 x가 수강한 과목을 뺀 차집합이 비어 있는지(NOT EXISTS)를 보아, S의 모든 과목(영어·국어)을 가진 RSID를 찾는 관계 나눗셈이다.

  • 1001은 국어만 있어 영어가 남으므로 제외된다.
  • 1002는 영어만 있어 국어가 남으므로 제외된다.
  • 1003은 국어·수학이어서 영어가 남으므로 제외된다.

1004는 국어·영어·수학을 모두 가져 차집합이 공집합이 되므로 선택된다.

문제 8
다음과 같은 student 테이블의 스키마가 주어졌을 때, 주어진 요구에 대한 SQL 질의어로 옳지 않은 것은?
student(studno, name, grade, score, deptno)
(단, studno는 학번, name은 학생 이름, grade는 학년, score는 성적, deptno는 학생이 속한 학과 번호를 의미하며, studno는 기본키이다)
1student 테이블에서 각 학과별 평균 성적, 최고 성적, 최저 성적 검색
SELECT deptno, AVG(score), MAX(score), MIN(score)
FROM student
GROUP BY deptno
2student 테이블에서 각 학과의 각 학년별 인원수와 평균 성적 검색
SELECT deptno, grade, COUNT(*), AVG(score)
FROM student
GROUP BY deptno, grade
3student 테이블에서 학과 번호가 100번 이상인 학과들의 평균 성적 검색
SELECT deptno, AVG(score)
FROM student
WHERE deptno >= 100
GROUP BY deptno
4student 테이블에서 각 학년별로 학생 수가 10명 이상인 학년, 학생 수, 평균 성적 검색
SELECT grade, COUNT(*), AVG(score)
FROM student
WHERE COUNT(*) >= 10
GROUP BY grade
정답 및 해설

집계 함수는 WHERE 절에 쓸 수 없으므로, WHERE COUNT(*) >= 10을 쓴 학년별 질의가 옳지 않다.

그룹 단위 조건은 GROUP BY grade 뒤에 HAVING COUNT(*) >= 10으로 지정해야 한다.

  • 학과별 평균·최고·최저 성적을 GROUP BY deptno로 구한 질의는 옳다.
  • 학과·학년 두 열로 묶어 인원수와 평균을 구한 질의도 옳다.
  • 행 조건 deptno >= 100을 WHERE로 거른 뒤 학과별 평균을 구한 질의도 옳다.
문제 9
정규화(normalization)에 대한 설명 중 옳은 것만을 모두 고르면?
ㄱ. 데이터의 정규화는 중복을 최소화하고 삽입, 삭제, 수정 이상을 최소화하기 위해서 함수적 종속성과 기본키를 기반으로, 주어진 릴레이션 스키마를 분석하는 과정이다.
ㄴ. 릴레이션 스키마 R의 모든 원소들의 도메인(domain)이 나눌 수 있는 단위로 되어있을 때, R이 제1정규형에 속한다.
ㄷ. 제2정규형이 되기 위해서는 릴레이션 R이 제1정규형이고 기본키가 아닌 속성이 기본키에 부분함수 종속이어야 한다.
ㄹ. 제3정규형이 되기 위해서는 릴레이션 R이 제2정규형이고, 릴레이션 R의 함수 종속 관계에서 이행적 함수 종속을 제거해야 한다.
ㅁ. 제4정규형이 되기 위해서는 릴레이션 R이 제3정규형이고, 함수 종속 관계에서 모든 결정자가 후보키이면 된다.
1ㄱ, ㄹ
2ㄴ, ㄷ
3ㄱ, ㄹ, ㅁ
4ㄷ, ㄹ, ㅁ
정답 및 해설

옳은 것은 ㄱ, ㄹ이다.

정규화는 함수 종속과 키를 바탕으로 이상을 줄이는 분석 과정이고(ㄱ), 3NF는 2NF에서 이행적 함수 종속을 제거한 형태다(ㄹ).

  • ㄴ: 1NF는 모든 도메인이 더 이상 나눌 수 없는 원자값일 때 성립한다.
  • ㄷ: 2NF는 기본키가 아닌 속성이 기본키에 완전 함수 종속이어야 하며, 부분 함수 종속은 제거 대상이다.
  • ㅁ: 모든 결정자가 후보키인 것은 BCNF 조건이고, 4NF는 다치 종속을 제거한 형태다.
문제 10
NOSQL에 대한 설명으로 옳지 않은 것은?
1NOSQL은 샤딩(sharding)을 지원한다.
2BigTable, Cassandra 등이 대표적인 NOSQL이다.
3NOSQL은 RDBMS와 같이 스키마(schema)를 필요로 한다.
4NOSQL은 가용성(availability)과 확장성(scalability)을 중요시 한다.
정답 및 해설

NoSQL은 스키마가 없거나 유연한(schema-less) 구조이므로, RDBMS처럼 스키마를 필요로 한다는 설명이 옳지 않다.

고정 스키마 없이 키-값·문서·컬럼·그래프 형태로 저장해 구조 변경에 유연하다.

  • 데이터를 여러 노드로 나누는 샤딩을 지원한다는 설명은 옳다.
  • BigTable·Cassandra를 대표 NoSQL로 든 설명도 옳다.
  • 가용성과 수평 확장성을 중시한다는 설명도 옳다.
문제 11
함수 F의 종속성이 다음과 같을 때 구할 수 있는 함수 종속으로 옳지 않은 것은?
F ={A →B, D →B, D →AC, BE →D}
1E →D
2E →E
3AE →D
4AC →BC
정답 및 해설

E의 폐포는 E 자신뿐이므로 E→D는 유도할 수 없다.

F에는 E만으로 결정되는 종속이 없고, BE→D는 B가 함께 있어야 적용된다.

  • E→E는 반사 규칙에 의한 자명한 종속이다.
  • AE→D: A→B로 AE의 폐포에 B가 들어오고, BE→D로 D가 유도된다.
  • AC→BC: A→B의 양변에 C를 첨가(증가 규칙)하면 얻어진다.
문제 12
데이터베이스 트리거(trigger)에 대한 설명으로 옳지 않은 것은?
1테이블에서 이벤트 발생 시 자동으로 반응해 실행되는 작업이다.
2트리거는 데이터베이스의 무결성을 유지하기 위한 도구이다.
3행-수준 트리거(row-level trigger)는 FOR EACH STATEMENT 절을 사용하여 표시한다.
4이벤트가 발생한 이후 실행되는 After 트리거와 이벤트가 발생하기 전에 실행되는 Before 트리거가 있다.
정답 및 해설

행 수준 트리거는 FOR EACH ROW 절로 표시하므로, FOR EACH STATEMENT를 쓴다는 설명이 옳지 않다.

FOR EACH STATEMENT는 문장 전체에 대해 한 번 실행되는 문장 수준 트리거에 쓴다.

  • 이벤트 발생 시 자동으로 실행되는 작업이라는 설명은 옳다.
  • 무결성 유지 도구라는 설명도 옳다.
  • 이벤트 전후에 실행되는 BEFORE·AFTER 트리거가 있다는 설명도 옳다.
문제 13
트랜잭션 수행 과정이 다음과 같을 때, DBMS에서 데이터 복원을 위해 수행되는 작업으로 옳지 않은 것은?

1T2는 redo(재실행)된다.
2T4는 undo(실행취소)된다.
3T1에 대해서는 어떠한 작업도 수행하지 않는다.
4체크포인트 시 로그 레코드 <checkpoint {T2, T5}>를 저장장치에 기록한다.
정답 및 해설

오류 발생 직전에 이미 완료(커밋)된 T4T_{4}는 실행취소 대상이 아니라 redo(재실행) 대상이므로, T4T_{4}가 undo된다는 설명이 옳지 않다.

즉시 갱신·체크포인트 회복에서는 체크포인트 이후 오류 전까지 커밋된 트랜잭션은 redo, 오류 시점에 미완료인 트랜잭션은 undo, 체크포인트 이전에 커밋된 트랜잭션은 무시한다. 그림에서 T3T_{3}와 T5T_{5}는 오류 시점까지 끝나지 않아 undo, T2T_{2}와 T4T_{4}는 오류 전에 끝나 redo된다.

  • T2T_{2} redo — 체크포인트 전에 시작했지만 오류 전에 커밋되었으므로, 체크포인트 이후의 변경분을 재실행해야 한다는 설명은 옳다.
  • T1T_{1} 무작업 — 체크포인트 이전에 커밋이 끝나 변경이 이미 디스크에 반영되었으므로 옳다.
  • 체크포인트 로그 기록 — 체크포인트 시점에 활성 상태인 트랜잭션은 T2T_{2}와 T5T_{5}뿐이므로 이 둘을 담은 checkpoint 레코드를 기록한다는 설명은 옳다.
문제 14
다음 데이터베이스가 만족하지 않는 제약조건은? (단, STUDENT 릴레이션의 Dept_No는 DEPARTMENT 릴레이션의 Dept_Number를 참조한다)
STUDENT
IDNameDept_NoBirth_Data
20120011이지연11993-01-23
20130023김병수31994-11-05
20140101김남현31995-08-21
20144006차기현21995-04-19
20105789안정민41991-01-03
DEPARTMENT
Dept_NameDept_NumberQuotaDean
컴퓨터공학과135김지연
전자공학과240정주현
1유일성 제약조건
2참조 무결성 제약조건
3엔티티 무결성 제약조건
4함수적 종속성 제약조건
정답 및 해설

STUDENT의 Dept_No 값 3·4가 DEPARTMENT의 Dept_Number에 없으므로 참조 무결성 제약조건을 만족하지 않는다.

외래키 값은 참조 릴레이션의 기본키 값이거나 NULL이어야 한다.

  • ID와 Dept_Number 값이 각각 중복되지 않으므로 유일성은 만족한다.
  • 기본키에 NULL이 없으므로 엔티티 무결성도 만족한다.
  • 주어진 인스턴스에서 함수 종속을 위반하는 투플 쌍도 없다.
문제 15
외부, 개념, 내부 스키마로 구성되는 3-레벨 스키마 구조와 데이터 독립성에 대한 설명으로 옳지 않은 것은?
1내부 레벨 또는 내부 스키마는 데이터베이스의 물리적 스토리지 구조를 기술한다.
2논리적 데이터 독립성은 응용 프로그램이나 데이터베이스의 논리적 구조에 영향을 주지 않고 DBMS가 데이터의 물리적 구조를 변경할 수 있는 것을 말한다.
3외부 스키마는 특정 사용자 그룹이 관심을 가지고 있는 데이터베이스의 일부분을 기술하며 데이터베이스의 나머지 부분을 그 사용자 그룹으로부터 숨겨 준다.
4SQL 뷰가 정의된 기본 테이블이 확장된다든지 뷰가 속해 있는 테이블이 더 늘어난다고 하더라도 기존의 뷰를 사용하는 프로그램이나 사용자는 영향을 받지 않으므로, SQL 뷰는 데이터의 논리적 독립성을 어느 정도 제공할 수 있다.
정답 및 해설

응용 프로그램이나 논리 구조에 영향 없이 물리 구조를 바꿀 수 있는 것은 물리적 데이터 독립성이므로, 이를 논리적 독립성이라 한 설명이 옳지 않다.

논리적 데이터 독립성은 개념 스키마가 바뀌어도 외부 스키마·응용 프로그램이 영향을 받지 않는 성질이다.

  • 내부 스키마가 물리적 저장 구조를 기술한다는 설명은 옳다.
  • 외부 스키마가 사용자 그룹의 관심 부분만 보여 주고 나머지를 숨긴다는 설명도 옳다.
  • 기본 테이블이 확장되어도 기존 뷰 사용자가 영향을 받지 않아 뷰가 논리적 독립성을 일부 제공한다는 설명도 옳다.
문제 16
다음 SQL 명령어 중 데이터 정의어(DDL)만을 고르면?
ㄱ. ALTER
ㄴ. DROP
ㄷ. TRUNCATE
ㄹ. GRANT
ㅁ. COMMIT
1ㄱ, ㅁ
2ㄴ, ㄷ
3ㄷ, ㄹ
4ㄹ, ㅁ
정답 및 해설

DDL로만 이루어진 조합은 DROP, TRUNCATE(ㄴ, ㄷ)이다.

ALTER·DROP·TRUNCATE는 객체 구조를 정의·변경·제거하는 DDL이고, GRANT는 DCL, COMMIT은 트랜잭션 제어어(TCL)다.

  • ALTER와 COMMIT 조합은 COMMIT이 DDL이 아니어서 제외된다.
  • TRUNCATE와 GRANT 조합은 GRANT가 권한 부여 명령이어서 제외된다.
  • GRANT와 COMMIT 조합은 둘 다 DDL이 아니다.
문제 17
다음 데이터베이스 스키마를 보고, 아래 SQL 질의문과 동등한 관계대수식은?
○ 스키마
사원(사원번호, 부서번호, 급여, 취미)
부서(부서번호, 부서명, 건물층, 전화번호)
재정(부서번호, 예산, 매출, 비용)

○ 질의문
Select D.부서명, F.예산
From 사원 E, 부서 D, 재정 F
Where E.부서번호=D.부서번호 and D.부서번호=F.부서번호
and D.건물층=1 and E.급여>=3000000
and E.취미=‘테니스’
1πD.부서명, F.예산((πE.부서번호(σE.급여>=3000000 and E.취미=‘테니스’(E))⋈πD.부서번호, D.부서명(σD.건물층=1(D)))⋈πF.예산, F.부서번호(F))\pi_{\text{D.부서명, F.예산}}((\pi_{\text{E.부서번호}}(\sigma_{\text{E.급여>=3000000 and E.취미=‘테니스’}}(E)) \bowtie \pi_{\text{D.부서번호, D.부서명}}(\sigma_{\text{D.건물층=1}}(D))) \bowtie \pi_{\text{F.예산, F.부서번호}}(F))
2πE.부서번호((πD.부서명, F.예산(σE.급여>=3000000 and E.취미=‘테니스’(E))⋈πD.부서번호, D.부서명(σD.건물층=1(D)))⋈πF.예산, F.부서번호(F))\pi_{\text{E.부서번호}}((\pi_{\text{D.부서명, F.예산}}(\sigma_{\text{E.급여>=3000000 and E.취미=‘테니스’}}(E)) \bowtie \pi_{\text{D.부서번호, D.부서명}}(\sigma_{\text{D.건물층=1}}(D))) \bowtie \pi_{\text{F.예산, F.부서번호}}(F))
3πD.부서명, F.예산((πF.부서번호, D.부서명(σD.건물층=1(D))⋈πE.부서번호(σE.급여>=3000000 and E.취미=‘테니스’(E)))⋈πF.예산(F))\pi_{\text{D.부서명, F.예산}}((\pi_{\text{F.부서번호, D.부서명}}(\sigma_{\text{D.건물층=1}}(D)) \bowtie \pi_{\text{E.부서번호}}(\sigma_{\text{E.급여>=3000000 and E.취미=‘테니스’}}(E))) \bowtie \pi_{\text{F.예산}}(F))
4πD.부서명, F.예산((πE.부서번호(σF.예산, F.부서번호(F))⋈πD.부서번호, D.부서명(σD.건물층=1(D)))⋈πE.급여>=3000000 and E.취미=‘테니스’(E))\pi_{\text{D.부서명, F.예산}}((\pi_{\text{E.부서번호}}(\sigma_{\text{F.예산, F.부서번호}}(F)) \bowtie \pi_{\text{D.부서번호, D.부서명}}(\sigma_{\text{D.건물층=1}}(D))) \bowtie \pi_{\text{E.급여>=3000000 and E.취미=‘테니스’}}(E))
정답 및 해설

동등한 식은 사원에서 급여·취미 조건을 선택해 부서번호를 추출하고, 건물층=1인 부서의 부서번호·부서명과 조인한 뒤 재정의 예산·부서번호와 조인해 부서명·예산을 투영한 식이다.

선택·투영을 조인 앞으로 내려 보내도 결과가 같다는 관계대수 동치를 이용한 형태다.

  • 최종 투영을 E.부서번호로 한 식은 결과 열이 부서명·예산이 아니며, 사원에 대해 부서명·예산을 투영해 성립하지 않는다.
  • 재정에서 예산만 투영한 식은 조인 속성인 부서번호가 사라져 부서와 연결되지 않는다.
  • 재정에 열 목록을 선택 조건처럼, 사원에 조건식을 투영 목록처럼 쓴 식은 선택과 투영이 뒤바뀌었다.
문제 18
다음 릴레이션 R과 S에 대한 조인 연산 결과가 옳지 않은 것은? (단, ⋈N은 자연 조인, ⟕은 왼쪽 외부 조인, ⟖은 오른쪽 외부 조인, ⋉은 세미 조인을 의미한다)
R
ABC
a1b1c1
a2b2c2
a3b3c3
a4b3c3
a5b5c5
S
BCD
b1c1d1
b2c2d2
b2c2d3
b3c3d4
b4c4d5
1R ⋈N S
ABCD
a1b1c1d1
a2b2c2d2
a2b2c2d3
a3b3c3d4
a4b3c3d4
2R ⟕R.B=S.B and R.C=S.C S
ABCD
a1b1c1d1
a2b2c2d2
a2b2c2d3
a3b3c3d4
a4b3c3d4
a5b5c5NULL
3R ⟖R.B=S.B and R.C=S.C S
ABCD
a1b1c1d1
a2b2c2d2
a2b2c2d3
a3b3c3d4
a4b3c3d4
NULLb4c4d5
4R ⋉R.B=S.B and R.C=S.C S
ABC
a1b1c1
a2b2c2
a3b3c3
정답 및 해설

세미 조인 결과에 (a4, b3, c3)이 빠져 있으므로 이 결과가 옳지 않다.

세미 조인은 S와 B·C 값이 일치하는 R의 투플을 R의 속성만으로 돌려준다. (b3, c3)은 S에 있으므로 a1·a2·a3·a4의 네 투플이 나와야 한다.

  • 자연 조인은 a2가 d2·d3와 두 번, a3·a4가 각각 d4와 결합해 총 5행이 되므로 맞다.
  • 왼쪽 외부 조인은 자연 조인 5행에 짝이 없는 a5를 D=NULL로 더한 결과로 맞다.
  • 오른쪽 외부 조인은 짝이 없는 S의 (b4, c4, d5)를 A=NULL로 더한 결과로 맞다.
문제 19
분산 데이터베이스 관리시스템에서 복수의 분할된 물리적 데이터베이스를 논리적으로 단일화된 데이터베이스처럼 인식하게 하기 위한 투명성(transparency)에 대한 설명으로 옳지 않은 것은?
1단편화(fragmentation) 투명성은 사용자들이 릴레이션이 어떻게 단편화되어 있는지 알 필요가 없다.
2장애(failure) 투명성은 다수의 트랜잭션이 동시에 수행되는 경우에도 오류 없이 결과의 일관성이 유지되어야 하는 성질이다.
3중복(replication) 투명성은 중복된 데이터가 무엇인지 저장 위치 등에 대한 정보를 사용자가 별도로 인지할 필요가 없어야 하는 성질이다.
4위치(location) 투명성은 사용자나 애플리케이션에서 작업을 수행하기 위해 데이터의 물리적인 위치도 알 필요가 없어야 하는 성질이다.
정답 및 해설

여러 트랜잭션이 동시에 수행되어도 결과의 일관성을 유지하는 성질은 병행(concurrency) 투명성이므로, 이를 장애 투명성이라 한 설명이 옳지 않다.

장애 투명성은 사이트·통신 장애가 생겨도 트랜잭션의 원자성이 보장되어 사용자가 장애를 의식하지 않게 하는 성질이다.

  • 릴레이션의 단편화 방식을 사용자가 알 필요가 없다는 설명은 옳다.
  • 중복 데이터와 그 저장 위치를 인지할 필요가 없다는 설명도 옳다.
  • 데이터의 물리적 위치를 알 필요가 없다는 위치 투명성 설명도 옳다.
문제 20
다음 사원 테이블에서 차수와 카디날리티 값을 바르게 연결한 것은?
사원
사번이름직급부서
108002김진수부장인사
105123이수진대리연구
128372박지훈과장영업
차수 카디날리티
13 3
23 4
34 3
44 4
정답 및 해설

사원 테이블의 차수는 4, 카디날리티는 3이다.

차수(degree)는 애트리뷰트(열)의 수로 사번·이름·직급·부서 4개이고, 카디날리티(cardinality)는 투플(행)의 수로 3개다.

  • 차수를 3으로 본 조합은 열과 행의 개수를 혼동한 것이다.
  • 카디날리티를 4로 본 조합은 열 개수를 행 개수로 센 것이다.
문제 21
데이터베이스 암호화 방식 중 API 방식에 대한 설명으로 옳지 않은 것은?
1API 방식은 암․복호화 모듈을 어플리케이션 서버에 설치한다.
2플러그인 방식보다 암․복호화 속도가 상대적으로 빠르다.
3플러그인 방식보다 응용 프로그램의 수정이 필요 없어 사용이 편리하다.
4플러그인 방식보다 데이터베이스 서버의 부하가 거의 발생하지 않는다.
정답 및 해설

API 방식은 응용 프로그램이 암·복호화 API를 직접 호출하므로 응용 프로그램 수정이 필요하다. 수정이 필요 없어 편리하다는 설명이 옳지 않다.

응용 프로그램 수정이 거의 없는 쪽은 DB 서버에 모듈을 설치하는 플러그인 방식이다.

  • 암·복호화 모듈을 애플리케이션 서버에 설치한다는 설명은 옳다.
  • 암·복호화를 애플리케이션 서버에서 처리해 플러그인 방식보다 상대적으로 빠르다는 설명도 옳다.
  • DB 서버에 암·복호화 부하가 거의 걸리지 않는다는 설명도 옳다.
문제 22
여러 트랜잭션을 병행수행(concurrency)하였을 때, 발생할 수 있는 문제 가운데 갱신분실(lost update)에 대한 설명으로 옳은 것은?
1두 개의 트랜잭션은 서로 상대 트랜잭션이 완료되기만을 기다리고 있는 상태로, 두 트랜잭션은 영원히 완료될 수 없는 문제이다.
2장애가 발생한 트랜잭션에 대한 롤백(rollback)이 수행되기 전에, 변경된 데이터를 가져가 사용하는 다른 트랜잭션의 수행이 완료되어 롤백이 실행될 수 없는 문제이다.
3하나의 트랜잭션이 수행한 데이터 변경 연산의 결과를 다른 트랜잭션이 덮어써서 기존 트랜잭션의 변경 연산 결과가 손실되는 것이다.
4하나의 트랜잭션이 여러 개의 데이터에 대해 변경 연산을 실행했을 때, 일관성이 유지되지 않는 데이터베이스로부터 데이터를 가져와 연산을 실행함으로 발생될 수 있다.
정답 및 해설

갱신분실은 한 트랜잭션의 변경 결과를 다른 트랜잭션이 덮어써서 앞선 갱신이 사라지는 문제다.

두 트랜잭션이 같은 값을 읽고 각자 갱신해 기록하면 나중에 쓴 값만 남는다.

  • 서로 상대가 끝나기만 기다리며 영원히 완료되지 못하는 것은 교착상태다.
  • 롤백 전에 변경 데이터를 가져간 트랜잭션이 이미 완료되어 롤백할 수 없는 것은 회복 불가능(연쇄 복귀) 문제다.
  • 일관성이 깨진 상태의 데이터를 읽어 연산하는 것은 모순성(비일관성 분석) 문제다.
문제 23
다중 데이터베이스 시스템에서 2단계 완료 프로토콜(two-phase commit protocol) 기법에 대한 설명으로 옳은 것은?
11단계 수행 중 고장이 발생하면, 해당 트랜잭션은 회복되거나 완료된다.
2트랜잭션 관리자(Transaction Manager: TM)는 그 지역 사이트에서 시작된 트랜잭션의 실행을 조정하는 역할을 한다.
31단계에서는 조정자가 메시지[prepare T]에 대한 응답을 모든 사이트로부터 받으면 트랜잭션 T가 완료(commit)될 수 있는지 결정할 수 있다.
42단계에서 조정자가 모든 참여 사이트로부터 메시지[ready T]를 받았다면 트랜잭션 T는 완료되고 그렇지 않으면 취소된다.
정답 및 해설

2단계에서 조정자는 모든 참여 사이트로부터 ready T를 받으면 T를 완료하고, 그렇지 않으면 취소한다.

1단계는 조정자가 prepare T를 보내고 각 사이트가 ready 또는 abort로 응답하는 과정이며, 응답을 모아 완료 여부를 결정하는 것은 2단계의 일이다.

  • 1단계 수행 중 고장이 발생하면 트랜잭션은 완료되지 않고 취소된다.
  • 지역 사이트에서 시작된 트랜잭션의 실행을 조정하는 것은 트랜잭션 관리자가 아니라 트랜잭션 조정자(TC)의 역할이다.
  • prepare T 응답을 모두 받아 완료 가능 여부를 판단하는 것은 1단계가 아닌 2단계에 해당한다.
문제 24
데이터베이스 재해 복구(disaster recovery) 기술에 대한 설명으로 옳은 것은?
1재해적 실패가 발생하면 가장 최근의 백업 사본이 디스크에서 백업장치로 적재된다.
2은행, 보험, 주식 등과 같은 중요한 응용에서는 데이터 전체를 주기적으로 백업하여 안전한 장소에 보관한다.
3시스템 로그를 백업하면 사용자는 마지막 데이터베이스 백업 이후에 수행한 모든 트랜잭션을 잃게 된다.
4백업된 시스템 로그에 기록되어 있는 모든 완료된 트랜잭션의 실행결과는 데이터베이스를 undo하는 데 사용될 수 있다.
정답 및 해설

은행·보험·주식처럼 중요한 응용에서는 데이터 전체를 주기적으로 백업해 안전한 장소에 보관한다는 설명이 옳다.

재해 시에는 백업본을 복원한 뒤 백업된 로그로 이후의 완료 트랜잭션을 redo해 최근 상태까지 되살린다.

  • 재해 시 백업 사본은 백업 장치에서 디스크로 적재되므로 방향이 반대로 서술되었다.
  • 시스템 로그를 백업해 두면 마지막 DB 백업 이후의 트랜잭션도 잃지 않고 복구할 수 있다.
  • 완료된 트랜잭션의 실행 결과는 undo가 아니라 redo에 사용된다.
문제 25
릴레이션 R에 K 단계 합병(k-way merge) 정렬을 수행하고자 한다. 정렬이 완료될 때까지 최소 몇 번의 디스크 접근(읽기+쓰기 횟수)이 필요한가? (단, 문제에서 언급되지 않은 다른 기법은 고려하지 않는다)
○ 각 디스크 블록에는 레코드 200개씩 저장되어 있음
○ 주 기억장치의 최대 사용가능한 크기: 레코드 1,000개 크기
○ 전체 정렬해야 할 레코드의 개수: 3,200개
132회
264회
396회
4128회