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

22년 1회차

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

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

22년 1회차

총 25문항 · 객관식 · 정답·해설 포함
문제 1
데이터베이스 관리 시스템(DBMS)에 대한 설명으로 옳지 않은 것은?
1데이터 중복을 효율적으로 제어할 수 있다.
2여러 사용자의 데이터 공유를 허용하지 않는다.
3사용자마다 데이터에 대한 적절한 권한을 부여하여 허가 받지 않은 접근을 통제할 수 있다.
4데이터베이스 시스템의 하드웨어나 소프트웨어의 고장에 대비하여 백업과 회복 기능을 제공한다.
정답 및 해설

여러 사용자의 데이터 공유를 허용하지 않는다는 설명이 틀렸다. DBMS의 핵심 목적 중 하나가 데이터 공유이다.

DBMS는 하나의 통합 데이터베이스를 여러 사용자·응용이 동시에 공유하도록 하며, 이를 위해 병행 제어와 권한 관리를 함께 제공한다.

  • 데이터 중복 제어: 통합 관리로 불필요한 중복을 줄이고 일관성을 유지하므로 옳다.
  • 접근 통제: 사용자별 권한 부여로 허가받지 않은 접근을 막는 보안 기능이므로 옳다.
  • 백업과 회복: 하드웨어·소프트웨어 장애에 대비한 회복 기능을 제공하므로 옳다.
문제 2
외래키(foreign key)에 대한 설명으로 옳은 것은?
1외래키는 중복값을 허용하지 않는다.
2한 릴레이션의 외래키는 같은 릴레이션의 기본키를 참조할 수 있다.
3한 릴레이션의 외래키는 같은 릴레이션의 기본키의 일부가 될 수 없다.
4외래키의 도메인과 그 외래키가 참조하는 기본키의 도메인은 서로 다를 수 있다.
정답 및 해설

한 릴레이션의 외래키가 같은 릴레이션의 기본키를 참조할 수 있다는 설명이 옳다(자기 참조, 예: 사원의 상사번호가 사원번호를 참조).

외래키가 참조하는 릴레이션은 자기 자신이어도 되며, 외래키 값은 참조 기본키에 존재하는 값이거나 NULL이어야 한다.

  • 중복값 불허: 여러 투플이 같은 대상을 참조할 수 있으므로 외래키는 중복을 허용한다.
  • 기본키의 일부 불가: 참여(사번, 프로젝트번호)처럼 관계를 나타내는 릴레이션에서는 외래키가 기본키의 일부가 되는 경우가 흔하다.
  • 도메인이 달라도 됨: 외래키와 참조 기본키는 값을 서로 비교해야 하므로 도메인이 같아야 한다.
문제 3
인덱스에 대한 설명으로 옳지 않은 것은?
1B+-트리는 다단계 인덱스 구조이다.
2기본키가 아닌 속성(필드)에도 인덱스를 생성할 수 있다.
3삽입과 삭제 연산이 빈번하게 발생하면 인덱스 유지를 위한 부하가 커진다.
4탐색하고자 하는 속성이 물리적으로 정렬되어 있지 않은 경우, 클러스터링 인덱스가 효율적이다.
정답 및 해설

물리적으로 정렬되어 있지 않은 속성에 클러스터링 인덱스가 효율적이라는 설명이 틀렸다. 클러스터링 인덱스는 데이터 파일이 그 속성 순서로 물리적으로 정렬되어 있을 때 쓰는 인덱스이다.

물리적 정렬이 없는 속성에는 클러스터링 인덱스를 둘 수 없고, 대신 보조(비클러스터링) 인덱스를 사용한다.

  • B+\mathrm{B}^{+}-트리: 내부 노드가 여러 단계로 하위 노드를 가리키는 다단계 인덱스 구조이므로 옳다.
  • 기본키가 아닌 속성의 인덱스: 보조 인덱스로 얼마든지 생성할 수 있으므로 옳다.
  • 삽입·삭제가 빈번한 경우: 레코드가 바뀔 때마다 인덱스도 갱신·재구성해야 하므로 유지 부하가 커진다는 말은 옳다.
문제 4
다음 E-R 다이어그램을 관계 데이터 모델 스키마로 변환할 때, 도출된 릴레이션으로 옳지 않은 것은?

1사원(사번, 이름, 급여, 부서번호)
2부서(부서번호, 부서이름, 부서전화)
3참여(사번, 프로젝트번호, 참여율)
4프로젝트(프로젝트번호, 프로젝트명, 기간, 사번)
정답 및 해설

옳지 않은 것은 프로젝트 릴레이션에 사번을 포함한 스키마이다. 사원과 프로젝트는 참여 관계로 연결된 n:m(다대다) 관계이므로 한쪽 릴레이션에 외래키를 둘 수 없다.

다대다 관계는 양쪽 개체의 기본키(사번, 프로젝트번호)와 관계 속성(참여율)으로 별도의 관계 릴레이션을 만들어 변환한다. 프로젝트에 사번을 넣으면 한 프로젝트에 참여한 여러 사원을 표현할 수 없다.

  • 사원(사번, 이름, 급여, 부서번호): 소속은 부서(1)–사원(n) 관계이므로 n쪽인 사원에 부서의 기본키 부서번호를 외래키로 추가한 것은 옳다.
  • 부서(부서번호, 부서이름, 부서전화): 개체 부서의 속성을 그대로 옮기고 부서번호를 기본키로 한 것은 옳다.
  • 참여(사번, 프로젝트번호, 참여율): 다대다 관계를 두 기본키의 조합을 기본키로 하는 릴레이션으로 변환하고 관계 속성 참여율을 포함한 것은 옳다.
문제 5
다음 상점 테이블과 상품 테이블을 생성하는 SQL 구문에 대한 설명으로 옳지 않은 것은?
CREATE TABLE 상점(
ID INTEGER,
이름 VARCHAR(200),
업종코드 INTEGER,
주소 VARCHAR(200),
PRIMARY KEY(ID));
CREATE TABLE 상품(
ID INTEGER,
이름 VARCHAR(200),
상점_ID INTEGER,
수량 INTEGER,
단가 INTEGER,
PRIMARY KEY(ID),
FOREIGN KEY(상점_ID) REFERENCES 상점(ID));
1상점 테이블의 ID 속성에 동일한 값을 갖는 두 개 이상의 투플이 존재할 수 없다.
2상점 테이블과 상품 테이블에 대해 자연 조인(natural join) 연산을 수행할 수 있다.
3상품 테이블의 상점_ID 속성에 NULL 값이 아닌 상점 테이블의 ID 속성에 존재하지 않는 값을 저장할 수 있다.
4상점 테이블의 이름 속성과 주소 속성에 길이가 200 미만인 문자열을 입력하더라도, 두 속성에서 저장 공간의 낭비가 발생하지 않는다.
정답 및 해설

상품의 상점_ID에 상점 테이블에 없는 값을 저장할 수 있다는 설명이 틀렸다. FOREIGN KEY 제약에 의해 참조 무결성이 강제된다.

상점_ID는 상점(ID)를 참조하므로 NULL이 아닌 값은 반드시 상점 테이블의 ID에 존재해야 하며, 없는 값을 넣으면 삽입이 거부된다.

  • 상점 ID의 중복: ID가 PRIMARY KEY이므로 같은 값을 갖는 투플이 둘 이상 존재할 수 없다.
  • 자연 조인: 두 테이블에 같은 이름의 속성(ID, 이름)이 있으므로 결과의 의미와 별개로 연산 자체는 수행할 수 있다.
  • VARCHAR(200): 가변 길이 문자열이라 실제 입력한 길이만큼만 저장하므로 공간 낭비가 없다.
문제 6
다음 함수 종속 관계가 있는 릴레이션 ‘학생(학번, 과목번호, 이름, 학과이름, 학과전화번호, 성적)’에 대한 설명으로 옳지 않은 것은? (단, 학생 릴레이션은 이미 제1정규형을 만족한다)
○ 학번→{이름, 학과이름, 학과전화번호}
○ 학과이름→학과전화번호
○ {학번, 과목번호}→성적
1함수적 종속관계 X→Y가 성립하더라도, Y→X가 항상 성립하는 것은 아니다.
2학생 릴레이션을 분해하더라도 무손실분해(lossless decomposition)이어야 한다.
3학생 릴레이션이 제2정규형을 만족하도록 분해하면, (학번, 이름, 학과이름, 학과전화번호), (학번, 과목번호, 성적)이다.
4학생 릴레이션이 제3정규형을 만족하도록 분해하면, (학번, 이름), (학과이름, 학과전화번호), (학번, 과목번호, 성적)이다.
정답 및 해설

제3정규형 분해로 (학번, 이름), (학과이름, 학과전화번호), (학번, 과목번호, 성적)을 제시한 설명이 틀렸다. 학번과 학과이름을 잇는 속성이 사라져 무손실 분해가 되지 않는다.

2NF 분해 결과 (학번, 이름, 학과이름, 학과전화번호)에는 이행 종속 학번→학과이름→학과전화번호가 있으므로, 3NF에서는 (학번, 이름, 학과이름)과 (학과이름, 학과전화번호)로 나눠 학과이름을 외래키로 남겨야 한다.

  • X→Y와 Y→X: 함수 종속은 방향성이 있어 역방향이 항상 성립하지는 않으므로 옳다.
  • 무손실 분해: 정규화 분해는 원래 릴레이션을 자연 조인으로 복원할 수 있어야 하므로 옳다.
  • 2NF 분해: 학번에만 부분 종속하는 이름·학과이름·학과전화번호를 분리하고 성적은 (학번, 과목번호)에 남겼으므로 옳다.
문제 7
은행계좌 X와 Y에 대한 트랜잭션 T1과 T2가 수행되는 다음 스케줄에 대한 설명으로 옳지 않은 것은? (단, 두 트랜잭션 수행 전 X계좌 잔액은 20 이상의 양수이고, Y계좌 잔액은 50 이상의 양수이다)
T1T2
read(X)
X := X + 50
write(X)
read(Y)
Y := Y + 20
write(Y)
read(Y)
Y := Y - 50
write(Y)
read(X)
X := X - 20
write(X)
1사이클을 포함한 스케줄이다.
22단계 로킹 규약(two-phase locking protocol)으로 구현할 수 있다.
3두 트랜잭션 수행 전과 수행 완료 후 X계좌와 Y계좌 잔액의 합(X + Y)은 같다.
4두 트랜잭션 수행 완료 후 X계좌 잔액이 180이면, 두 트랜잭션 수행 전 X계좌 잔액은 150이다.
정답 및 해설

이 스케줄을 2단계 로킹 규약으로 구현할 수 있다는 설명이 틀렸다. 선행 그래프에 사이클이 있어 충돌 직렬가능하지 않으므로 2PL로는 만들어질 수 없다.

X에서는 T1의 write(X)가 T2의 read(X)보다 앞서 T1→T2, Y에서는 T2의 write(Y)가 T1의 read(Y)보다 앞서 T2→T1이 생겨 사이클이 된다. 2PL은 충돌 직렬가능한 스케줄만 허용한다.

  • 사이클 포함: 위의 T1→T2, T2→T1 간선 때문에 옳다.
  • 잔액 합 보존: 각 연산이 직전에 쓰인 값을 읽어 갱신 손실이 없고, X는 +50−20, Y는 +20−50이라 합의 변화가 0이므로 옳다.
  • X 잔액 역산: X는 최종적으로 30 증가하므로 수행 후 180이면 수행 전은 150이라 옳다.
문제 8
200개의 트랜잭션에 대한 장바구니 분석을 통해 다음 조건을 만족하는 ‘기저귀→맥주’ 연관 규칙(association rule)을 도출하였다. 이 규칙의 지지도(support)와 신뢰도(confidence)를 순서대로 바르게 나열한 것은?
○ 맥주는 50개의 트랜잭션에서 구매되었다.
○ 기저귀는 40개의 트랜잭션에서 구매되었다.
○ 기저귀와 맥주가 동시에 구매된 트랜잭션 수는 20개이다.

지지도(%)  신뢰도(%)
110  50
240  45
345  40
450  10
정답 및 해설

지지도는 10%, 신뢰도는 50%이다.

지지도는 전체 트랜잭션 중 기저귀와 맥주를 함께 산 비율이다.
20200×100=10%\dfrac{20}{200}\times 100 = 10\%

신뢰도는 기저귀를 산 트랜잭션 중 맥주도 함께 산 비율이다.
2040×100=50%\dfrac{20}{40}\times 100 = 50\%

  • 지지도 40%·신뢰도 45% 조합: 지지도는 전체 200건 기준이라 10%이고, 신뢰도도 기저귀 40건 기준으로 50%가 된다.
  • 지지도 45%·신뢰도 40% 조합: 40%는 맥주 50건을 분모로 한 반대 규칙 '맥주→기저귀'의 신뢰도이다.
  • 지지도 50%·신뢰도 10% 조합: 두 값의 순서를 뒤바꾼 것이다.
문제 9
다음 릴레이션에 대하여 질의를 수행하고자 한다. 질의 수행 계획(query evaluation plan)의 의미가 다른 것은?
PROJECT (proj_id, proj_name, dept_id, year)
DEPARTMENT (dept_id, dept_name, bld_id, category)
BUILDING (bld_id, bld_name, location, capacity)

1[그림]
2[그림]
3[그림]
4[그림]
정답 및 해설

의미가 다른 것은 DEPARTMENT와 BUILDING의 조인 결과에 year=2022 ∧ category='IT' 선택을 적용한 뒤 PROJECT와 조인한 계획이다. year는 PROJECT의 속성이므로 PROJECT가 조인되기 전의 중간 결과에는 존재하지 않는다.

선택 연산은 해당 속성을 가진 릴레이션 쪽으로만 아래로 내릴 수 있다(선택 밀어내기). year 조건은 PROJECT 쪽, category 조건은 DEPARTMENT 쪽에만 적용할 수 있고, 자연조인은 교환·결합 법칙이 성립하므로 조인 순서를 바꿔도 결과는 같다.

  • PROJECT ⋈ (DEPARTMENT ⋈ BUILDING) 전체에 두 조건을 한꺼번에 선택하고 투영하는 계획은 원 질의 그대로의 형태이다.
  • year=2022를 PROJECT에, category='IT'를 DEPARTMENT에 먼저 적용해 조인한 뒤 BUILDING과 조인하는 계획은 두 선택을 모두 올바르게 밀어내린 것으로 의미가 같다.
  • year=2022만 PROJECT에 먼저 적용하고 category='IT'는 전체 조인 후에 적용하는 계획도 조건이 모두 유지되므로 의미가 같다.
문제 10
릴레이션 R(B, C, G, H, I, S)이 함수 종속성 집합 F를 만족할 때, R의 수퍼키(superkey)로 옳은 것은?
F = {B→H, CG→H, CG→I, S→B, S→C}
1H
2S
3CG
4GS
정답 및 해설

GS는 속성 폐포가 R의 모든 속성을 포함하므로 수퍼키이다.

G는 어떤 종속의 오른쪽에도 나오지 않으므로 모든 수퍼키에 반드시 포함되어야 한다. {G,S}+\{G,S\}^{+}는 S→B, S→C로 B, C를 얻고, B→H로 H, CG→I로 I를 얻어 {B,C,G,H,I,S}\{B,C,G,H,I,S\} 전체가 된다.

  • H: 왼쪽이 H인 종속이 없어 폐포가 H 자신뿐이다.
  • S: 폐포가 {S,B,C,H}\{S,B,C,H\}로 G와 I를 결정하지 못한다.
  • CG: 폐포가 {C,G,H,I}\{C,G,H,I\}로 B와 S를 결정하지 못한다.
문제 11
관계 데이터베이스 관리 시스템(RDBMS)과 NoSQL에 대한 설명으로 옳은 것은?
1RDBMS는 NoSQL보다 약한 스키마를 요구한다.
2NoSQL은 RDBMS보다 엄격한 일관성 모델을 보장한다.
3NoSQL은 RDBMS보다 정형 데이터를 저장하기에 적합하다.
4NoSQL 데이터 모델로 키-값(key-value), 문서 기반(document-based), 그래프 기반(graph-based) 모델이 있다.
정답 및 해설

NoSQL의 데이터 모델로 키-값, 문서 기반, 그래프 기반 모델이 있다는 설명이 옳다(이 밖에 컬럼 패밀리 모델도 있다).

NoSQL은 대용량·비정형 데이터를 수평 확장으로 처리하기 위해 고정 스키마와 엄격한 일관성을 완화한 것이 특징이다.

  • 스키마: RDBMS가 미리 정의한 엄격한 스키마를 요구하고, NoSQL이 유연한(약한) 스키마를 쓴다.
  • 일관성: NoSQL은 BASE·최종적 일관성처럼 RDBMS의 ACID보다 완화된 일관성 모델을 쓰는 경우가 많다.
  • 정형 데이터: 행·열 구조의 정형 데이터는 RDBMS가 더 적합하고, NoSQL은 반정형·비정형 데이터에 강점이 있다.
문제 12
관계 데이터베이스에서 NULL 값에 대한 설명으로 옳지 않은 것은?
1한 개 이상의 NULL 값을 포함한 산술 연산 결과는 NULL이다.
2릴레이션 투플의 삽입 연산 수행 시, 결과 릴레이션의 속성은 NULL 값을 가질 수 있다.
3NULL 값과 다른 값에 대해 대소 비교 연산자 ‘<’를 수행한 결과는 참(true) 혹은 거짓(false)이다.
4NULL 값을 가지지 않은 속성들만으로 구성된 두 릴레이션에 대해 외부 조인(outer join) 연산을 수행한 경우, 결과 릴레이션의 속성은 NULL 값을 가질 수 있다.
정답 및 해설

NULL과 다른 값을 '<'로 비교한 결과가 참 또는 거짓이라는 설명이 틀렸다. NULL이 포함된 비교의 결과는 UNKNOWN이다.

SQL은 3값 논리(TRUE·FALSE·UNKNOWN)를 사용하며, WHERE 절에서 UNKNOWN이 된 투플은 결과에서 제외된다.

  • 산술 연산: NULL이 하나라도 포함되면 결과가 NULL이 되므로 옳다.
  • 삽입 시 NULL: 값을 지정하지 않은 속성(NOT NULL 제약이 없는 경우)은 NULL을 가질 수 있으므로 옳다.
  • 외부 조인: 짝이 없는 투플의 상대편 속성을 NULL로 채우므로, 원래 NULL이 없던 릴레이션이라도 결과에 NULL이 생길 수 있다.
문제 13
다음 중 데이터베이스 관리자(DBA)의 역할만을 모두 고르면?
ㄱ. 데이터베이스 스키마 정의
ㄴ. 저장 구조에 대한 접근 방식 결정
ㄷ. 응용 프로그램 개발
ㄹ. 데이터베이스 시스템 모니터링 및 성능 분석
1ㄱ, ㄷ
2ㄱ, ㄹ
3ㄴ, ㄷ
4ㄱ, ㄴ, ㄹ
정답 및 해설

DBA의 역할은 스키마 정의, 저장 구조·접근 방식 결정, 시스템 모니터링·성능 분석으로 ㄱ, ㄴ, ㄹ이다.

응용 프로그램 개발(ㄷ)은 DBA가 아니라 응용 프로그래머의 역할이다.

  • ㄱ, ㄷ 조합: 응용 프로그램 개발이 포함되어 틀렸다.
  • ㄱ, ㄹ 조합: 저장 구조와 접근 방식 결정(ㄴ)이 빠졌다.
  • ㄴ, ㄷ 조합: 응용 프로그램 개발이 포함되고 스키마 정의·모니터링이 빠졌다.
문제 14
관계 데이터 모델의 릴레이션에 대한 설명으로 옳지 않은 것은?
1릴레이션 R에 포함된 투플들 사이에는 순서가 없다.
2릴레이션 R의 모든 투플은 서로 다른 값을 가지고 있다.
3릴레이션의 인스턴스는 시간에 따라 변하지 않는 정적인 성질을 가지고 있다.
4릴레이션 스키마에 정의된 속성의 전체 개수를 릴레이션의 차수(degree)라고 한다.
정답 및 해설

릴레이션 인스턴스가 시간에 따라 변하지 않는다는 설명이 틀렸다. 인스턴스(외연)는 삽입·삭제·갱신으로 계속 바뀌는 동적 성질을 가진다.

시간에 따라 거의 변하지 않는 정적인 것은 릴레이션 스키마(내포)이다.

  • 투플의 순서: 릴레이션은 투플의 집합이므로 투플 사이에 순서가 없다.
  • 투플의 유일성: 집합이므로 중복 투플이 없어 모든 투플이 서로 다르다.
  • 차수: 속성의 개수를 차수(degree), 투플의 개수를 카디널리티라 하므로 옳다.
문제 15
데이터베이스 회복에 대한 설명으로 옳은 것은?
1지연 갱신 회복기법에서는 UNDO 연산이 필요 없다.
2REDO 연산을 수행할 때는 로그(log)가 필요 없다.
3검사점(checkpoint) 연산은 장애가 발생할 때 실행된다.
4즉시 갱신 회복기법에서는 트랜잭션이 완료한 이후 데이터베이스를 갱신한다.
정답 및 해설

지연 갱신 회복기법에서는 UNDO 연산이 필요 없다는 설명이 옳다.

지연 갱신은 트랜잭션이 부분 완료될 때까지 데이터베이스에 반영하지 않으므로, 장애 시 미완료 트랜잭션은 되돌릴 것이 없고 완료된 트랜잭션만 REDO하면 된다.

  • REDO와 로그: REDO는 로그에 기록된 새 값으로 다시 반영하므로 로그가 반드시 필요하다.
  • 검사점: 장애 시가 아니라 정상 운영 중 주기적으로 수행해 회복 시 살펴볼 로그 범위를 줄인다.
  • 즉시 갱신: 트랜잭션 수행 도중(완료 전)에 데이터베이스를 갱신하는 방식이라 UNDO와 REDO가 모두 필요하다.
문제 16
다음 Student, Course, Enrollment 테이블에 대한 SQL 구문들을 수행하였을 때, COUNT(*) 값은? (단, Enrollment 테이블 생성 시 sno 속성과 cno 속성은 각각 Student 테이블과 Course 테이블 기본키의 외래키이며, 두 외래키에 모두 ON DELETE CASCADE 조건이 적용된다)
Student
snosnameyeardept
100John4Com
200David3EE
300Tom1Com
400Mark4Com
500Simon2ME

Course
cnocnamecreditdeptprofessor
C123Java3ComAndy
C312Data Structure3ComJoseph
C324File System3ComHelen
C413Database3ComLuna
E412OS3EEElsa

Enrollment
snocnogrademidtermfinal
200C123B8580
300C312A9095
400C312A9095
500C312B8580
300C324C7575
400C324A9590
100C413A9095
300C413A9590
400C413B8085
100E412A9595
400E412C6575

SQL 구문
DELETE FROM Student WHERE sname= ‘Simon’;
DELETE FROM Course WHERE cname= ‘OS’;
SELECT COUNT(*) FROM Enrollment;
16
27
38
49
정답 및 해설

두 DELETE 후 Enrollment에 남는 행은 8개이다. ON DELETE CASCADE로 삭제된 학생·과목을 참조하던 수강 행이 함께 삭제된다.

처음 Enrollment는 11행이다.
Simon(sno 500) 삭제 → (500, C312) 1행 연쇄 삭제 → 10행
OS(cno E412) 삭제 → (100, E412), (400, E412) 2행 연쇄 삭제 → 8행

  • 6행: 5행이 삭제되어야 나오는 값이지만 연쇄 삭제 대상은 모두 3행뿐이다.
  • 7행: 4행이 삭제되어야 나오는 값으로, sno 500·cno E412를 참조하는 행 수와 맞지 않는다.
  • 9행: OS를 수강한 2행 중 하나만 지운 경우의 값이다.
문제 17
다음 직원 테이블과 부서 테이블로 구성된 데이터베이스에서 ‘기본 인덱스를 사용하여 여러 개의 레코드를 검색하는 방식’으로 구현되는 SELECT문으로 옳은 것은? (단, 직원 테이블의 부서번호 속성은 부서 테이블 기본키의 외래키이다)
○ 직원(직원번호, 이름, 봉급, 부서번호)
○ 부서(부서번호, 부서명, 관리자)
1SELECT * FROM 직원 WHERE 부서번호 = 5;
2SELECT * FROM 부서 WHERE 부서번호 > 5;
3SELECT * FROM 직원 WHERE 직원번호 = 100;
4SELECT * FROM 직원 WHERE 부서번호 = 5 AND 봉급 > 30000;
정답 및 해설

부서 테이블에서 기본키 부서번호 > 5로 검색하는 문장이 기본 인덱스로 여러 레코드를 찾는 방식이다.

기본 인덱스는 기본키 순으로 정렬된 파일에 대한 인덱스이므로, 인덱스로 부서번호 5의 위치를 찾은 뒤 그 다음 레코드들을 순서대로 읽어 범위 조건을 만족하는 여러 레코드를 가져온다.

  • 직원의 부서번호 = 5: 부서번호는 직원 테이블의 기본키가 아닌 외래키라 클러스터링 또는 보조 인덱스를 쓰는 검색이다.
  • 직원번호 = 100: 기본 인덱스를 쓰지만 기본키 동등 조건이라 레코드가 하나만 검색된다.
  • 부서번호 = 5 AND 봉급 > 30000: 여러 조건을 결합한 접합(conjunctive) 선택으로, 기본키 조건이 없어 기본 인덱스로 처리되지 않는다.
문제 18
다음 수강 릴레이션에 대한 설명으로 옳지 않은 것은? (단, 수강 릴레이션에 기본키가 설정되어 있으며, 한 강사는 한 과목만 강의할 수 있고, 한 학생은 서로 다른 한 개 이상의 과목들을 수강할 수 있다)
수강
학번강사명과목명
100John데이터베이스
100Marry네트워크
200Jeremy데이터베이스
300Iaan인공지능
300John데이터베이스
1{강사명, 과목명}은 후보키가 아니다.
2강사 ‘James’가 강의할 ‘빅데이터’ 과목을 신설하는 경우 수강 학생이 없이 투플을 삽입할 수 있다.
3학번이 100인 학생이 ‘네트워크’ 과목 수강을 취소하여 그 수강 투플이 삭제되는 경우, ‘네트워크’ 과목의 강사명도 함께 사라진다.
4‘데이터베이스’ 과목의 강사를 ‘John’에서 ‘Tony’로 변경한다면, ‘John’이 강의하는 과목을 수강하는 모든 학생의 강사명을 수정해야 한다.
정답 및 해설

수강 학생 없이 '빅데이터' 과목 투플을 삽입할 수 있다는 설명이 틀렸다. 기본키에 포함된 학번에 NULL을 넣을 수 없어 삽입할 수 없는 삽입 이상이 생긴다.

한 강사는 한 과목만 맡으므로 강사명→과목명이 성립하고, 후보키는 {학번, 강사명}·{학번, 과목명}으로 모두 학번을 포함한다. 개체 무결성상 기본키 속성은 NULL일 수 없다.

  • {강사명, 과목명}: John·데이터베이스 조합이 두 투플에 나타나 유일성을 만족하지 못하므로 후보키가 아니다.
  • 네트워크 수강 취소: Marry·네트워크 정보가 그 투플에만 있어 함께 사라지는 삭제 이상이므로 옳다.
  • 데이터베이스 강사 변경: John 정보가 여러 투플에 중복되어 모두 고쳐야 하는 갱신 이상이므로 옳다.
문제 19
다음과 같이 실행되고 있는 트랜잭션 T1~T4의 스케줄과 동등한(equivalent) 충돌 직렬가능(conflict serializable) 스케줄이 아닌 것은?
T1T2T3T4
read(Z)
write(Z)
write(Y)
read(X)
read(Z)
write(Z)
write(X)
read(Y)
write(Y)
1T1→T3→T2→T4
2T2→T3→T4→T1
3T2→T1→T4→T3
4T3→T2→T4→T1
정답 및 해설

T2→T1→T4→T3은 동등한 충돌 직렬가능 스케줄이 아니다. 원래 스케줄에서는 T3이 T4보다 먼저 Z를 사용한다.

충돌 쌍은 Z에 대한 T3과 T4(T3→T4), Y에 대한 T2의 write(Y)와 T4의 read(Y)·write(Y)(T2→T4)뿐이다. X는 T1만 접근하므로 T1은 어느 위치에 와도 된다.

  • T1→T3→T2→T4: T3·T2가 모두 T4 앞에 있어 동등하다.
  • T2→T3→T4→T1: 두 간선을 모두 지키므로 동등하다.
  • T3→T2→T4→T1: 두 간선을 모두 지키므로 동등하다.
문제 20
트랜잭션 T1과 T2가 병행 수행될 때, 정확한 결과를 보장할 수 있는 스케줄만을 모두 고르면? (단, 두 트랜잭션 수행 전 A와 B의 값은 각각 50이다)
ㄱ.
T1T2
read(A)
A := A×2
write(A)
read(B)
B := B×2
write(B)
read(A)
A := A+100
write(A)
read(B)
B := B+100
write(B)

ㄴ.
T1T2
read(A)
A := A+100
read(A)
A := A×2
write(A)
write(A)
read(B)
B := B×2
read(B)
B := B+100
write(B)
write(B)

ㄷ.
T1T2
lock(A)
read(A)
A := A+100
write(A)
unlock(A)
lock(A)
read(A)
A := A×2
write(A)
unlock(A)
lock(B)
read(B)
B := B×2
write(B)
unlock(B)
lock(B)
read(B)
B := B+100
write(B)
unlock(B)

ㄹ.
T1T2
lock(A)
read(A)
A := A+100
write(A)
lock(B)
unlock(A)
lock(A)
read(A)
A := A×2
write(A)
read(B)
B := B+100
write(B)
unlock(B)
lock(B)
unlock(A)
read(B)
B := B×2
write(B)
unlock(B)
1ㄱ, ㄴ
2ㄱ, ㄹ
3ㄴ, ㄷ
4ㄷ, ㄹ
정답 및 해설

정확한 결과를 보장하는 스케줄은 ㄱ, ㄹ이다. 직렬 수행 결과는 T1 후 T2이면 A=B=300, T2 후 T1이면 A=B=200이다.

ㄱ은 T2 후 T1을 수행하는 직렬 스케줄로 A=B=200이다. ㄹ은 T1이 B의 로크를 얻은 뒤에야 A를 해제하는 2단계 로킹을 지켜 A=150→300, B=150→300으로 T1 후 T2 직렬 결과와 같다.

  • ㄴ: T1과 T2가 모두 A=50, B=50을 읽어 한쪽 갱신이 덮어써지는 갱신 손실이 생기고 A=150, B=100이 된다.
  • ㄷ: 로크를 쓰지만 항목마다 바로 해제해 A는 T1 후 T2(300), B는 T2 후 T1(200) 순으로 섞여 직렬 결과와 다르다.
문제 21
분산 데이터베이스 시스템에 대한 설명으로 옳지 않은 것은?
1사용자들은 원하는 데이터가 어느 지역에 저장되어 있는지를 명확하게 알 수 있다.
2데이터베이스를 여러 지역에 중복하여 분산 저장하면 가용성(availability)이 높아진다.
3지역 사이트들도 어느 정도 자치성(autonomy)을 가지고 독립적으로 동작할 수 있다.
4수평적 단편화(horizontal fragmentation)는 릴레이션 투플들을 몇 개의 부분집합(단편)으로 분할한 후, 각 부분집합을 서로 다른 사이트에 저장하는 것이다.
정답 및 해설

사용자가 데이터의 저장 위치를 명확히 알 수 있다는 설명이 틀렸다. 분산 DB는 위치 투명성을 제공해 사용자가 저장 위치를 몰라도 접근할 수 있게 한다.

분산 DBMS는 단편화·중복·위치를 숨겨 하나의 데이터베이스처럼 보이게 하는 분산 투명성을 목표로 한다.

  • 중복 저장: 한 사이트가 고장 나도 다른 사이트의 사본을 쓸 수 있어 가용성이 높아지므로 옳다.
  • 지역 자치성: 각 사이트가 자체 데이터를 독립적으로 관리·운영할 수 있으므로 옳다.
  • 수평적 단편화: 투플(행) 단위로 부분집합을 나눠 각 사이트에 저장하는 방식이므로 옳다.
문제 22
다음 두 트랜잭션이 테이블 R(A, B)에 대해 병행 수행되고 있다. 트랜잭션 T2에서 “select sum(B) from R;”의 결과가 항상 동일한 값을 출력하도록 보장하는 트랜잭션 고립성 수준(isolation level)은? (단, 테이블 R의 속성 A, B의 도메인은 정수이다)
T1T2
begin transaction;
insert into R values (3, 150);
commit;
begin transaction;
select sum(B) from R;
select sum(B) from R;
commit;
1직렬가능(SERIALIZABLE)
2반복 가능한 읽기(REPEATABLE READ)
3커밋된 데이터 읽기(READ COMMITTED)
4커밋되지 않은 데이터 읽기(READ UNCOMMITTED)
정답 및 해설

직렬가능(SERIALIZABLE) 수준이어야 두 번의 sum(B) 결과가 항상 같다. T1의 insert는 새 투플을 추가하므로 팬텀 읽기를 막아야 한다.

두 select 사이에 T1이 (3, 150)을 삽입·커밋하면 두 번째 합계가 150만큼 커질 수 있다. SQL 표준 고립성 수준 중 팬텀까지 막는 것은 SERIALIZABLE뿐이다.

  • 반복 가능한 읽기: 이미 읽은 투플의 변경은 막지만 새로 삽입된 투플(팬텀)은 허용한다.
  • 커밋된 데이터 읽기: 반복 불가능 읽기와 팬텀이 모두 발생할 수 있다.
  • 커밋되지 않은 데이터 읽기: 오손 읽기까지 허용하는 가장 낮은 수준이다.
문제 23
다음 관계 대수식에서 동등 규칙(equivalence rule)이 성립하는 것만을 모두 고르면? (단, E,E1,E2E, E_1, E_2는 관계대수식을, θ,θ1,θ2\theta, \theta_1, \theta_2는 술어(predicate) 조건을, L1,L2L_1, L_2는 속성을 의미한다)
ㄱ. ΠL1(ΠL2(E))≡ΠL2(E)\Pi_{L_1}(\Pi_{L_2}(E)) \equiv \Pi_{L_2}(E)
ㄴ. σθ1∧θ2(E)≡σθ2(σθ1(E))\sigma_{\theta_1 \wedge \theta_2}(E) \equiv \sigma_{\theta_2}(\sigma_{\theta_1}(E))
ㄷ. σθ(E1−E2)≡σθ(E1)−E2\sigma_{\theta}(E_1 - E_2) \equiv \sigma_{\theta}(E_1) - E_2
ㄹ. E1⟕E2≡E2⟕E1E_1 \mathbin{\text{⟕}} E_2 \equiv E_2 \mathbin{\text{⟕}} E_1
1ㄱ, ㄷ
2ㄴ, ㄷ
3ㄴ, ㄹ
4ㄱ, ㄴ, ㄹ
정답 및 해설

동등 규칙이 성립하는 것은 ㄴ, ㄷ이다.

ㄴ은 선택의 연쇄 분해와 교환법칙에 따라 성립한다. ㄷ은 차집합 결과가 E1E_1의 투플 중 E2E_2에 없는 것이므로, E1E_1에만 선택을 적용한 뒤 E2E_2를 빼도 결과가 같다.

  • ㄱ: 연쇄 프로젝션은 L1⊆L2L_1 \subseteq L_2일 때 바깥쪽인 ΠL1(E)\Pi_{L_1}(E)로 줄어들며, 안쪽 ΠL2(E)\Pi_{L_2}(E)와는 같지 않다.
  • ㄹ: 왼쪽 외부 조인은 왼쪽 릴레이션의 투플을 모두 보존하므로 피연산자 순서를 바꾸면 결과가 달라져 교환법칙이 성립하지 않는다.
문제 24
트랜잭션 T1~T4가 다음 연산과 조건에 따라 수행하는 아래 스케줄에 대한 설명으로 옳은 것은?
○ S(A): 데이터 A에 읽기 연산(R(A))을 위한 공용 로크(shared lock) 요청
○ X(A): 데이터 A에 쓰기 연산(W(A))을 위한 전용 로크(exclusive lock) 요청
○ 로크를 요청한 트랜잭션은 요청한 로크가 허용될 때까지 대기한다.
○ 트랜잭션이 소유한 로크는 트랜잭션이 완료될 때 해제된다.

T1T2T3T4
S(A)
R(A)
X(C)
W(C)
X(D)
W(D)
S(B)
R(B)
X(C)
X(A)
X(C)
X(B)
1모든 트랜잭션 T1~T4가 교착상태에 빠졌다.
2트랜잭션 T3을 철회(abort)하면 교착상태가 해결될 수 있다.
3교착상태를 해결하기 위해 철회할 트랜잭션으로 T4를 선택하는 것이 가장 좋다.
4트랜잭션 T2를 철회하면, 트랜잭션 T3은 C에 대한 전용 로크를 획득할 수 있다.
정답 및 해설

T2를 철회하면 T3은 C에 대한 전용 로크를 획득할 수 있다는 설명이 옳다.

대기 관계(기다리는 쪽→로크 보유 쪽)는 T4→T2(C), T2→T1(A의 공용 로크), T1→T4(B의 공용 로크), T3→T2(C)이다. 사이클은 T1→T4→T2→T1이고 T3은 사이클 밖에서 대기만 한다.

T2를 철회하면 C가 해제되어 사이클이 끊기고, C를 먼저 요청한 T4가 완료되어 로크를 놓은 뒤 T3이 C의 전용 로크를 얻는다.

  • 모든 트랜잭션의 교착: T3을 기다리는 트랜잭션이 없어 T3은 교착상태에 포함되지 않는다.
  • T3 철회: T3은 사이클 밖에 있어 철회해도 T1·T2·T4의 순환 대기가 그대로 남는다.
  • T4를 희생자로 선택: T4를 철회해도 사이클은 끊기지만 T1·T2도 같은 사이클에 있어 T4가 가장 좋다고 볼 근거가 없고, T4는 가장 많은 연산을 수행해 철회 비용도 크다.
문제 25
다음은 OLAP(Online Analytical Processing)의 기능에 대한 설명이다. (가), (나)에 들어갈 용어를 바르게 연결한 것은?
○ ( (가) )은 교차 테이블(cross-tab)에서 데이터를 분석하는 차원을 다양하게 변경하는 기능이다.
○ 집계 연산에 대해 사용자가 원하는 크기의 데이터로 보여주기 위해, 미세한 단위부터 큰 단위로 변화시키는 연산을 ( (나) )이라고 한다.

(가)  (나)
1피보팅(pivoting)  롤업(roll-up)
2피보팅(pivoting)  드릴다운(drill-down)
3슬라이싱(slicing)  롤업(roll-up)
4슬라이싱(slicing)  드릴다운(drill-down)
정답 및 해설

(가)는 피보팅(pivoting), (나)는 롤업(roll-up)이다.

피보팅은 교차 테이블의 행·열 차원을 회전·교체해 다른 관점으로 보는 기능이고, 롤업은 일→월→년처럼 세부 단위를 큰 단위로 요약하는 연산이다.

  • 드릴다운: 롤업의 반대로 큰 단위에서 세부 단위로 내려가는 연산이라 (나)에 맞지 않는다.
  • 슬라이싱: 큐브의 한 차원을 특정 값으로 고정해 부분 데이터를 잘라내는 기능이라 (가)에 맞지 않는다.
7급 국가직 데이터베이스론 기출문제모두CBT · moducbt.com
22년 1회차
총 25문항 · 객관식 · 정답·해설 포함
문제 1
데이터베이스 관리 시스템(DBMS)에 대한 설명으로 옳지 않은 것은?
1데이터 중복을 효율적으로 제어할 수 있다.
2여러 사용자의 데이터 공유를 허용하지 않는다.
3사용자마다 데이터에 대한 적절한 권한을 부여하여 허가 받지 않은 접근을 통제할 수 있다.
4데이터베이스 시스템의 하드웨어나 소프트웨어의 고장에 대비하여 백업과 회복 기능을 제공한다.
정답 및 해설

여러 사용자의 데이터 공유를 허용하지 않는다는 설명이 틀렸다. DBMS의 핵심 목적 중 하나가 데이터 공유이다.

DBMS는 하나의 통합 데이터베이스를 여러 사용자·응용이 동시에 공유하도록 하며, 이를 위해 병행 제어와 권한 관리를 함께 제공한다.

  • 데이터 중복 제어: 통합 관리로 불필요한 중복을 줄이고 일관성을 유지하므로 옳다.
  • 접근 통제: 사용자별 권한 부여로 허가받지 않은 접근을 막는 보안 기능이므로 옳다.
  • 백업과 회복: 하드웨어·소프트웨어 장애에 대비한 회복 기능을 제공하므로 옳다.
문제 2
외래키(foreign key)에 대한 설명으로 옳은 것은?
1외래키는 중복값을 허용하지 않는다.
2한 릴레이션의 외래키는 같은 릴레이션의 기본키를 참조할 수 있다.
3한 릴레이션의 외래키는 같은 릴레이션의 기본키의 일부가 될 수 없다.
4외래키의 도메인과 그 외래키가 참조하는 기본키의 도메인은 서로 다를 수 있다.
정답 및 해설

한 릴레이션의 외래키가 같은 릴레이션의 기본키를 참조할 수 있다는 설명이 옳다(자기 참조, 예: 사원의 상사번호가 사원번호를 참조).

외래키가 참조하는 릴레이션은 자기 자신이어도 되며, 외래키 값은 참조 기본키에 존재하는 값이거나 NULL이어야 한다.

  • 중복값 불허: 여러 투플이 같은 대상을 참조할 수 있으므로 외래키는 중복을 허용한다.
  • 기본키의 일부 불가: 참여(사번, 프로젝트번호)처럼 관계를 나타내는 릴레이션에서는 외래키가 기본키의 일부가 되는 경우가 흔하다.
  • 도메인이 달라도 됨: 외래키와 참조 기본키는 값을 서로 비교해야 하므로 도메인이 같아야 한다.
문제 3
인덱스에 대한 설명으로 옳지 않은 것은?
1B+-트리는 다단계 인덱스 구조이다.
2기본키가 아닌 속성(필드)에도 인덱스를 생성할 수 있다.
3삽입과 삭제 연산이 빈번하게 발생하면 인덱스 유지를 위한 부하가 커진다.
4탐색하고자 하는 속성이 물리적으로 정렬되어 있지 않은 경우, 클러스터링 인덱스가 효율적이다.
정답 및 해설

물리적으로 정렬되어 있지 않은 속성에 클러스터링 인덱스가 효율적이라는 설명이 틀렸다. 클러스터링 인덱스는 데이터 파일이 그 속성 순서로 물리적으로 정렬되어 있을 때 쓰는 인덱스이다.

물리적 정렬이 없는 속성에는 클러스터링 인덱스를 둘 수 없고, 대신 보조(비클러스터링) 인덱스를 사용한다.

  • B+\mathrm{B}^{+}-트리: 내부 노드가 여러 단계로 하위 노드를 가리키는 다단계 인덱스 구조이므로 옳다.
  • 기본키가 아닌 속성의 인덱스: 보조 인덱스로 얼마든지 생성할 수 있으므로 옳다.
  • 삽입·삭제가 빈번한 경우: 레코드가 바뀔 때마다 인덱스도 갱신·재구성해야 하므로 유지 부하가 커진다는 말은 옳다.
문제 4
다음 E-R 다이어그램을 관계 데이터 모델 스키마로 변환할 때, 도출된 릴레이션으로 옳지 않은 것은?

1사원(사번, 이름, 급여, 부서번호)
2부서(부서번호, 부서이름, 부서전화)
3참여(사번, 프로젝트번호, 참여율)
4프로젝트(프로젝트번호, 프로젝트명, 기간, 사번)
정답 및 해설

옳지 않은 것은 프로젝트 릴레이션에 사번을 포함한 스키마이다. 사원과 프로젝트는 참여 관계로 연결된 n:m(다대다) 관계이므로 한쪽 릴레이션에 외래키를 둘 수 없다.

다대다 관계는 양쪽 개체의 기본키(사번, 프로젝트번호)와 관계 속성(참여율)으로 별도의 관계 릴레이션을 만들어 변환한다. 프로젝트에 사번을 넣으면 한 프로젝트에 참여한 여러 사원을 표현할 수 없다.

  • 사원(사번, 이름, 급여, 부서번호): 소속은 부서(1)–사원(n) 관계이므로 n쪽인 사원에 부서의 기본키 부서번호를 외래키로 추가한 것은 옳다.
  • 부서(부서번호, 부서이름, 부서전화): 개체 부서의 속성을 그대로 옮기고 부서번호를 기본키로 한 것은 옳다.
  • 참여(사번, 프로젝트번호, 참여율): 다대다 관계를 두 기본키의 조합을 기본키로 하는 릴레이션으로 변환하고 관계 속성 참여율을 포함한 것은 옳다.
문제 5
다음 상점 테이블과 상품 테이블을 생성하는 SQL 구문에 대한 설명으로 옳지 않은 것은?
CREATE TABLE 상점(
ID INTEGER,
이름 VARCHAR(200),
업종코드 INTEGER,
주소 VARCHAR(200),
PRIMARY KEY(ID));
CREATE TABLE 상품(
ID INTEGER,
이름 VARCHAR(200),
상점_ID INTEGER,
수량 INTEGER,
단가 INTEGER,
PRIMARY KEY(ID),
FOREIGN KEY(상점_ID) REFERENCES 상점(ID));
1상점 테이블의 ID 속성에 동일한 값을 갖는 두 개 이상의 투플이 존재할 수 없다.
2상점 테이블과 상품 테이블에 대해 자연 조인(natural join) 연산을 수행할 수 있다.
3상품 테이블의 상점_ID 속성에 NULL 값이 아닌 상점 테이블의 ID 속성에 존재하지 않는 값을 저장할 수 있다.
4상점 테이블의 이름 속성과 주소 속성에 길이가 200 미만인 문자열을 입력하더라도, 두 속성에서 저장 공간의 낭비가 발생하지 않는다.
정답 및 해설

상품의 상점_ID에 상점 테이블에 없는 값을 저장할 수 있다는 설명이 틀렸다. FOREIGN KEY 제약에 의해 참조 무결성이 강제된다.

상점_ID는 상점(ID)를 참조하므로 NULL이 아닌 값은 반드시 상점 테이블의 ID에 존재해야 하며, 없는 값을 넣으면 삽입이 거부된다.

  • 상점 ID의 중복: ID가 PRIMARY KEY이므로 같은 값을 갖는 투플이 둘 이상 존재할 수 없다.
  • 자연 조인: 두 테이블에 같은 이름의 속성(ID, 이름)이 있으므로 결과의 의미와 별개로 연산 자체는 수행할 수 있다.
  • VARCHAR(200): 가변 길이 문자열이라 실제 입력한 길이만큼만 저장하므로 공간 낭비가 없다.
문제 6
다음 함수 종속 관계가 있는 릴레이션 ‘학생(학번, 과목번호, 이름, 학과이름, 학과전화번호, 성적)’에 대한 설명으로 옳지 않은 것은? (단, 학생 릴레이션은 이미 제1정규형을 만족한다)
○ 학번→{이름, 학과이름, 학과전화번호}
○ 학과이름→학과전화번호
○ {학번, 과목번호}→성적
1함수적 종속관계 X→Y가 성립하더라도, Y→X가 항상 성립하는 것은 아니다.
2학생 릴레이션을 분해하더라도 무손실분해(lossless decomposition)이어야 한다.
3학생 릴레이션이 제2정규형을 만족하도록 분해하면, (학번, 이름, 학과이름, 학과전화번호), (학번, 과목번호, 성적)이다.
4학생 릴레이션이 제3정규형을 만족하도록 분해하면, (학번, 이름), (학과이름, 학과전화번호), (학번, 과목번호, 성적)이다.
정답 및 해설

제3정규형 분해로 (학번, 이름), (학과이름, 학과전화번호), (학번, 과목번호, 성적)을 제시한 설명이 틀렸다. 학번과 학과이름을 잇는 속성이 사라져 무손실 분해가 되지 않는다.

2NF 분해 결과 (학번, 이름, 학과이름, 학과전화번호)에는 이행 종속 학번→학과이름→학과전화번호가 있으므로, 3NF에서는 (학번, 이름, 학과이름)과 (학과이름, 학과전화번호)로 나눠 학과이름을 외래키로 남겨야 한다.

  • X→Y와 Y→X: 함수 종속은 방향성이 있어 역방향이 항상 성립하지는 않으므로 옳다.
  • 무손실 분해: 정규화 분해는 원래 릴레이션을 자연 조인으로 복원할 수 있어야 하므로 옳다.
  • 2NF 분해: 학번에만 부분 종속하는 이름·학과이름·학과전화번호를 분리하고 성적은 (학번, 과목번호)에 남겼으므로 옳다.
문제 7
은행계좌 X와 Y에 대한 트랜잭션 T1과 T2가 수행되는 다음 스케줄에 대한 설명으로 옳지 않은 것은? (단, 두 트랜잭션 수행 전 X계좌 잔액은 20 이상의 양수이고, Y계좌 잔액은 50 이상의 양수이다)
T1T2
read(X)
X := X + 50
write(X)
read(Y)
Y := Y + 20
write(Y)
read(Y)
Y := Y - 50
write(Y)
read(X)
X := X - 20
write(X)
1사이클을 포함한 스케줄이다.
22단계 로킹 규약(two-phase locking protocol)으로 구현할 수 있다.
3두 트랜잭션 수행 전과 수행 완료 후 X계좌와 Y계좌 잔액의 합(X + Y)은 같다.
4두 트랜잭션 수행 완료 후 X계좌 잔액이 180이면, 두 트랜잭션 수행 전 X계좌 잔액은 150이다.
정답 및 해설

이 스케줄을 2단계 로킹 규약으로 구현할 수 있다는 설명이 틀렸다. 선행 그래프에 사이클이 있어 충돌 직렬가능하지 않으므로 2PL로는 만들어질 수 없다.

X에서는 T1의 write(X)가 T2의 read(X)보다 앞서 T1→T2, Y에서는 T2의 write(Y)가 T1의 read(Y)보다 앞서 T2→T1이 생겨 사이클이 된다. 2PL은 충돌 직렬가능한 스케줄만 허용한다.

  • 사이클 포함: 위의 T1→T2, T2→T1 간선 때문에 옳다.
  • 잔액 합 보존: 각 연산이 직전에 쓰인 값을 읽어 갱신 손실이 없고, X는 +50−20, Y는 +20−50이라 합의 변화가 0이므로 옳다.
  • X 잔액 역산: X는 최종적으로 30 증가하므로 수행 후 180이면 수행 전은 150이라 옳다.
문제 8
200개의 트랜잭션에 대한 장바구니 분석을 통해 다음 조건을 만족하는 ‘기저귀→맥주’ 연관 규칙(association rule)을 도출하였다. 이 규칙의 지지도(support)와 신뢰도(confidence)를 순서대로 바르게 나열한 것은?
○ 맥주는 50개의 트랜잭션에서 구매되었다.
○ 기저귀는 40개의 트랜잭션에서 구매되었다.
○ 기저귀와 맥주가 동시에 구매된 트랜잭션 수는 20개이다.

지지도(%)  신뢰도(%)
110  50
240  45
345  40
450  10
정답 및 해설

지지도는 10%, 신뢰도는 50%이다.

지지도는 전체 트랜잭션 중 기저귀와 맥주를 함께 산 비율이다.
20200×100=10%\dfrac{20}{200}\times 100 = 10\%

신뢰도는 기저귀를 산 트랜잭션 중 맥주도 함께 산 비율이다.
2040×100=50%\dfrac{20}{40}\times 100 = 50\%

  • 지지도 40%·신뢰도 45% 조합: 지지도는 전체 200건 기준이라 10%이고, 신뢰도도 기저귀 40건 기준으로 50%가 된다.
  • 지지도 45%·신뢰도 40% 조합: 40%는 맥주 50건을 분모로 한 반대 규칙 '맥주→기저귀'의 신뢰도이다.
  • 지지도 50%·신뢰도 10% 조합: 두 값의 순서를 뒤바꾼 것이다.
문제 9
다음 릴레이션에 대하여 질의를 수행하고자 한다. 질의 수행 계획(query evaluation plan)의 의미가 다른 것은?
PROJECT (proj_id, proj_name, dept_id, year)
DEPARTMENT (dept_id, dept_name, bld_id, category)
BUILDING (bld_id, bld_name, location, capacity)

1[그림]
2[그림]
3[그림]
4[그림]
정답 및 해설

의미가 다른 것은 DEPARTMENT와 BUILDING의 조인 결과에 year=2022 ∧ category='IT' 선택을 적용한 뒤 PROJECT와 조인한 계획이다. year는 PROJECT의 속성이므로 PROJECT가 조인되기 전의 중간 결과에는 존재하지 않는다.

선택 연산은 해당 속성을 가진 릴레이션 쪽으로만 아래로 내릴 수 있다(선택 밀어내기). year 조건은 PROJECT 쪽, category 조건은 DEPARTMENT 쪽에만 적용할 수 있고, 자연조인은 교환·결합 법칙이 성립하므로 조인 순서를 바꿔도 결과는 같다.

  • PROJECT ⋈ (DEPARTMENT ⋈ BUILDING) 전체에 두 조건을 한꺼번에 선택하고 투영하는 계획은 원 질의 그대로의 형태이다.
  • year=2022를 PROJECT에, category='IT'를 DEPARTMENT에 먼저 적용해 조인한 뒤 BUILDING과 조인하는 계획은 두 선택을 모두 올바르게 밀어내린 것으로 의미가 같다.
  • year=2022만 PROJECT에 먼저 적용하고 category='IT'는 전체 조인 후에 적용하는 계획도 조건이 모두 유지되므로 의미가 같다.
문제 10
릴레이션 R(B, C, G, H, I, S)이 함수 종속성 집합 F를 만족할 때, R의 수퍼키(superkey)로 옳은 것은?
F = {B→H, CG→H, CG→I, S→B, S→C}
1H
2S
3CG
4GS
정답 및 해설

GS는 속성 폐포가 R의 모든 속성을 포함하므로 수퍼키이다.

G는 어떤 종속의 오른쪽에도 나오지 않으므로 모든 수퍼키에 반드시 포함되어야 한다. {G,S}+\{G,S\}^{+}는 S→B, S→C로 B, C를 얻고, B→H로 H, CG→I로 I를 얻어 {B,C,G,H,I,S}\{B,C,G,H,I,S\} 전체가 된다.

  • H: 왼쪽이 H인 종속이 없어 폐포가 H 자신뿐이다.
  • S: 폐포가 {S,B,C,H}\{S,B,C,H\}로 G와 I를 결정하지 못한다.
  • CG: 폐포가 {C,G,H,I}\{C,G,H,I\}로 B와 S를 결정하지 못한다.
문제 11
관계 데이터베이스 관리 시스템(RDBMS)과 NoSQL에 대한 설명으로 옳은 것은?
1RDBMS는 NoSQL보다 약한 스키마를 요구한다.
2NoSQL은 RDBMS보다 엄격한 일관성 모델을 보장한다.
3NoSQL은 RDBMS보다 정형 데이터를 저장하기에 적합하다.
4NoSQL 데이터 모델로 키-값(key-value), 문서 기반(document-based), 그래프 기반(graph-based) 모델이 있다.
정답 및 해설

NoSQL의 데이터 모델로 키-값, 문서 기반, 그래프 기반 모델이 있다는 설명이 옳다(이 밖에 컬럼 패밀리 모델도 있다).

NoSQL은 대용량·비정형 데이터를 수평 확장으로 처리하기 위해 고정 스키마와 엄격한 일관성을 완화한 것이 특징이다.

  • 스키마: RDBMS가 미리 정의한 엄격한 스키마를 요구하고, NoSQL이 유연한(약한) 스키마를 쓴다.
  • 일관성: NoSQL은 BASE·최종적 일관성처럼 RDBMS의 ACID보다 완화된 일관성 모델을 쓰는 경우가 많다.
  • 정형 데이터: 행·열 구조의 정형 데이터는 RDBMS가 더 적합하고, NoSQL은 반정형·비정형 데이터에 강점이 있다.
문제 12
관계 데이터베이스에서 NULL 값에 대한 설명으로 옳지 않은 것은?
1한 개 이상의 NULL 값을 포함한 산술 연산 결과는 NULL이다.
2릴레이션 투플의 삽입 연산 수행 시, 결과 릴레이션의 속성은 NULL 값을 가질 수 있다.
3NULL 값과 다른 값에 대해 대소 비교 연산자 ‘<’를 수행한 결과는 참(true) 혹은 거짓(false)이다.
4NULL 값을 가지지 않은 속성들만으로 구성된 두 릴레이션에 대해 외부 조인(outer join) 연산을 수행한 경우, 결과 릴레이션의 속성은 NULL 값을 가질 수 있다.
정답 및 해설

NULL과 다른 값을 '<'로 비교한 결과가 참 또는 거짓이라는 설명이 틀렸다. NULL이 포함된 비교의 결과는 UNKNOWN이다.

SQL은 3값 논리(TRUE·FALSE·UNKNOWN)를 사용하며, WHERE 절에서 UNKNOWN이 된 투플은 결과에서 제외된다.

  • 산술 연산: NULL이 하나라도 포함되면 결과가 NULL이 되므로 옳다.
  • 삽입 시 NULL: 값을 지정하지 않은 속성(NOT NULL 제약이 없는 경우)은 NULL을 가질 수 있으므로 옳다.
  • 외부 조인: 짝이 없는 투플의 상대편 속성을 NULL로 채우므로, 원래 NULL이 없던 릴레이션이라도 결과에 NULL이 생길 수 있다.
문제 13
다음 중 데이터베이스 관리자(DBA)의 역할만을 모두 고르면?
ㄱ. 데이터베이스 스키마 정의
ㄴ. 저장 구조에 대한 접근 방식 결정
ㄷ. 응용 프로그램 개발
ㄹ. 데이터베이스 시스템 모니터링 및 성능 분석
1ㄱ, ㄷ
2ㄱ, ㄹ
3ㄴ, ㄷ
4ㄱ, ㄴ, ㄹ
정답 및 해설

DBA의 역할은 스키마 정의, 저장 구조·접근 방식 결정, 시스템 모니터링·성능 분석으로 ㄱ, ㄴ, ㄹ이다.

응용 프로그램 개발(ㄷ)은 DBA가 아니라 응용 프로그래머의 역할이다.

  • ㄱ, ㄷ 조합: 응용 프로그램 개발이 포함되어 틀렸다.
  • ㄱ, ㄹ 조합: 저장 구조와 접근 방식 결정(ㄴ)이 빠졌다.
  • ㄴ, ㄷ 조합: 응용 프로그램 개발이 포함되고 스키마 정의·모니터링이 빠졌다.
문제 14
관계 데이터 모델의 릴레이션에 대한 설명으로 옳지 않은 것은?
1릴레이션 R에 포함된 투플들 사이에는 순서가 없다.
2릴레이션 R의 모든 투플은 서로 다른 값을 가지고 있다.
3릴레이션의 인스턴스는 시간에 따라 변하지 않는 정적인 성질을 가지고 있다.
4릴레이션 스키마에 정의된 속성의 전체 개수를 릴레이션의 차수(degree)라고 한다.
정답 및 해설

릴레이션 인스턴스가 시간에 따라 변하지 않는다는 설명이 틀렸다. 인스턴스(외연)는 삽입·삭제·갱신으로 계속 바뀌는 동적 성질을 가진다.

시간에 따라 거의 변하지 않는 정적인 것은 릴레이션 스키마(내포)이다.

  • 투플의 순서: 릴레이션은 투플의 집합이므로 투플 사이에 순서가 없다.
  • 투플의 유일성: 집합이므로 중복 투플이 없어 모든 투플이 서로 다르다.
  • 차수: 속성의 개수를 차수(degree), 투플의 개수를 카디널리티라 하므로 옳다.
문제 15
데이터베이스 회복에 대한 설명으로 옳은 것은?
1지연 갱신 회복기법에서는 UNDO 연산이 필요 없다.
2REDO 연산을 수행할 때는 로그(log)가 필요 없다.
3검사점(checkpoint) 연산은 장애가 발생할 때 실행된다.
4즉시 갱신 회복기법에서는 트랜잭션이 완료한 이후 데이터베이스를 갱신한다.
정답 및 해설

지연 갱신 회복기법에서는 UNDO 연산이 필요 없다는 설명이 옳다.

지연 갱신은 트랜잭션이 부분 완료될 때까지 데이터베이스에 반영하지 않으므로, 장애 시 미완료 트랜잭션은 되돌릴 것이 없고 완료된 트랜잭션만 REDO하면 된다.

  • REDO와 로그: REDO는 로그에 기록된 새 값으로 다시 반영하므로 로그가 반드시 필요하다.
  • 검사점: 장애 시가 아니라 정상 운영 중 주기적으로 수행해 회복 시 살펴볼 로그 범위를 줄인다.
  • 즉시 갱신: 트랜잭션 수행 도중(완료 전)에 데이터베이스를 갱신하는 방식이라 UNDO와 REDO가 모두 필요하다.
문제 16
다음 Student, Course, Enrollment 테이블에 대한 SQL 구문들을 수행하였을 때, COUNT(*) 값은? (단, Enrollment 테이블 생성 시 sno 속성과 cno 속성은 각각 Student 테이블과 Course 테이블 기본키의 외래키이며, 두 외래키에 모두 ON DELETE CASCADE 조건이 적용된다)
Student
snosnameyeardept
100John4Com
200David3EE
300Tom1Com
400Mark4Com
500Simon2ME

Course
cnocnamecreditdeptprofessor
C123Java3ComAndy
C312Data Structure3ComJoseph
C324File System3ComHelen
C413Database3ComLuna
E412OS3EEElsa

Enrollment
snocnogrademidtermfinal
200C123B8580
300C312A9095
400C312A9095
500C312B8580
300C324C7575
400C324A9590
100C413A9095
300C413A9590
400C413B8085
100E412A9595
400E412C6575

SQL 구문
DELETE FROM Student WHERE sname= ‘Simon’;
DELETE FROM Course WHERE cname= ‘OS’;
SELECT COUNT(*) FROM Enrollment;
16
27
38
49
정답 및 해설

두 DELETE 후 Enrollment에 남는 행은 8개이다. ON DELETE CASCADE로 삭제된 학생·과목을 참조하던 수강 행이 함께 삭제된다.

처음 Enrollment는 11행이다.
Simon(sno 500) 삭제 → (500, C312) 1행 연쇄 삭제 → 10행
OS(cno E412) 삭제 → (100, E412), (400, E412) 2행 연쇄 삭제 → 8행

  • 6행: 5행이 삭제되어야 나오는 값이지만 연쇄 삭제 대상은 모두 3행뿐이다.
  • 7행: 4행이 삭제되어야 나오는 값으로, sno 500·cno E412를 참조하는 행 수와 맞지 않는다.
  • 9행: OS를 수강한 2행 중 하나만 지운 경우의 값이다.
문제 17
다음 직원 테이블과 부서 테이블로 구성된 데이터베이스에서 ‘기본 인덱스를 사용하여 여러 개의 레코드를 검색하는 방식’으로 구현되는 SELECT문으로 옳은 것은? (단, 직원 테이블의 부서번호 속성은 부서 테이블 기본키의 외래키이다)
○ 직원(직원번호, 이름, 봉급, 부서번호)
○ 부서(부서번호, 부서명, 관리자)
1SELECT * FROM 직원 WHERE 부서번호 = 5;
2SELECT * FROM 부서 WHERE 부서번호 > 5;
3SELECT * FROM 직원 WHERE 직원번호 = 100;
4SELECT * FROM 직원 WHERE 부서번호 = 5 AND 봉급 > 30000;
정답 및 해설

부서 테이블에서 기본키 부서번호 > 5로 검색하는 문장이 기본 인덱스로 여러 레코드를 찾는 방식이다.

기본 인덱스는 기본키 순으로 정렬된 파일에 대한 인덱스이므로, 인덱스로 부서번호 5의 위치를 찾은 뒤 그 다음 레코드들을 순서대로 읽어 범위 조건을 만족하는 여러 레코드를 가져온다.

  • 직원의 부서번호 = 5: 부서번호는 직원 테이블의 기본키가 아닌 외래키라 클러스터링 또는 보조 인덱스를 쓰는 검색이다.
  • 직원번호 = 100: 기본 인덱스를 쓰지만 기본키 동등 조건이라 레코드가 하나만 검색된다.
  • 부서번호 = 5 AND 봉급 > 30000: 여러 조건을 결합한 접합(conjunctive) 선택으로, 기본키 조건이 없어 기본 인덱스로 처리되지 않는다.
문제 18
다음 수강 릴레이션에 대한 설명으로 옳지 않은 것은? (단, 수강 릴레이션에 기본키가 설정되어 있으며, 한 강사는 한 과목만 강의할 수 있고, 한 학생은 서로 다른 한 개 이상의 과목들을 수강할 수 있다)
수강
학번강사명과목명
100John데이터베이스
100Marry네트워크
200Jeremy데이터베이스
300Iaan인공지능
300John데이터베이스
1{강사명, 과목명}은 후보키가 아니다.
2강사 ‘James’가 강의할 ‘빅데이터’ 과목을 신설하는 경우 수강 학생이 없이 투플을 삽입할 수 있다.
3학번이 100인 학생이 ‘네트워크’ 과목 수강을 취소하여 그 수강 투플이 삭제되는 경우, ‘네트워크’ 과목의 강사명도 함께 사라진다.
4‘데이터베이스’ 과목의 강사를 ‘John’에서 ‘Tony’로 변경한다면, ‘John’이 강의하는 과목을 수강하는 모든 학생의 강사명을 수정해야 한다.
정답 및 해설

수강 학생 없이 '빅데이터' 과목 투플을 삽입할 수 있다는 설명이 틀렸다. 기본키에 포함된 학번에 NULL을 넣을 수 없어 삽입할 수 없는 삽입 이상이 생긴다.

한 강사는 한 과목만 맡으므로 강사명→과목명이 성립하고, 후보키는 {학번, 강사명}·{학번, 과목명}으로 모두 학번을 포함한다. 개체 무결성상 기본키 속성은 NULL일 수 없다.

  • {강사명, 과목명}: John·데이터베이스 조합이 두 투플에 나타나 유일성을 만족하지 못하므로 후보키가 아니다.
  • 네트워크 수강 취소: Marry·네트워크 정보가 그 투플에만 있어 함께 사라지는 삭제 이상이므로 옳다.
  • 데이터베이스 강사 변경: John 정보가 여러 투플에 중복되어 모두 고쳐야 하는 갱신 이상이므로 옳다.
문제 19
다음과 같이 실행되고 있는 트랜잭션 T1~T4의 스케줄과 동등한(equivalent) 충돌 직렬가능(conflict serializable) 스케줄이 아닌 것은?
T1T2T3T4
read(Z)
write(Z)
write(Y)
read(X)
read(Z)
write(Z)
write(X)
read(Y)
write(Y)
1T1→T3→T2→T4
2T2→T3→T4→T1
3T2→T1→T4→T3
4T3→T2→T4→T1
정답 및 해설

T2→T1→T4→T3은 동등한 충돌 직렬가능 스케줄이 아니다. 원래 스케줄에서는 T3이 T4보다 먼저 Z를 사용한다.

충돌 쌍은 Z에 대한 T3과 T4(T3→T4), Y에 대한 T2의 write(Y)와 T4의 read(Y)·write(Y)(T2→T4)뿐이다. X는 T1만 접근하므로 T1은 어느 위치에 와도 된다.

  • T1→T3→T2→T4: T3·T2가 모두 T4 앞에 있어 동등하다.
  • T2→T3→T4→T1: 두 간선을 모두 지키므로 동등하다.
  • T3→T2→T4→T1: 두 간선을 모두 지키므로 동등하다.
문제 20
트랜잭션 T1과 T2가 병행 수행될 때, 정확한 결과를 보장할 수 있는 스케줄만을 모두 고르면? (단, 두 트랜잭션 수행 전 A와 B의 값은 각각 50이다)
ㄱ.
T1T2
read(A)
A := A×2
write(A)
read(B)
B := B×2
write(B)
read(A)
A := A+100
write(A)
read(B)
B := B+100
write(B)

ㄴ.
T1T2
read(A)
A := A+100
read(A)
A := A×2
write(A)
write(A)
read(B)
B := B×2
read(B)
B := B+100
write(B)
write(B)

ㄷ.
T1T2
lock(A)
read(A)
A := A+100
write(A)
unlock(A)
lock(A)
read(A)
A := A×2
write(A)
unlock(A)
lock(B)
read(B)
B := B×2
write(B)
unlock(B)
lock(B)
read(B)
B := B+100
write(B)
unlock(B)

ㄹ.
T1T2
lock(A)
read(A)
A := A+100
write(A)
lock(B)
unlock(A)
lock(A)
read(A)
A := A×2
write(A)
read(B)
B := B+100
write(B)
unlock(B)
lock(B)
unlock(A)
read(B)
B := B×2
write(B)
unlock(B)
1ㄱ, ㄴ
2ㄱ, ㄹ
3ㄴ, ㄷ
4ㄷ, ㄹ
정답 및 해설

정확한 결과를 보장하는 스케줄은 ㄱ, ㄹ이다. 직렬 수행 결과는 T1 후 T2이면 A=B=300, T2 후 T1이면 A=B=200이다.

ㄱ은 T2 후 T1을 수행하는 직렬 스케줄로 A=B=200이다. ㄹ은 T1이 B의 로크를 얻은 뒤에야 A를 해제하는 2단계 로킹을 지켜 A=150→300, B=150→300으로 T1 후 T2 직렬 결과와 같다.

  • ㄴ: T1과 T2가 모두 A=50, B=50을 읽어 한쪽 갱신이 덮어써지는 갱신 손실이 생기고 A=150, B=100이 된다.
  • ㄷ: 로크를 쓰지만 항목마다 바로 해제해 A는 T1 후 T2(300), B는 T2 후 T1(200) 순으로 섞여 직렬 결과와 다르다.
문제 21
분산 데이터베이스 시스템에 대한 설명으로 옳지 않은 것은?
1사용자들은 원하는 데이터가 어느 지역에 저장되어 있는지를 명확하게 알 수 있다.
2데이터베이스를 여러 지역에 중복하여 분산 저장하면 가용성(availability)이 높아진다.
3지역 사이트들도 어느 정도 자치성(autonomy)을 가지고 독립적으로 동작할 수 있다.
4수평적 단편화(horizontal fragmentation)는 릴레이션 투플들을 몇 개의 부분집합(단편)으로 분할한 후, 각 부분집합을 서로 다른 사이트에 저장하는 것이다.
정답 및 해설

사용자가 데이터의 저장 위치를 명확히 알 수 있다는 설명이 틀렸다. 분산 DB는 위치 투명성을 제공해 사용자가 저장 위치를 몰라도 접근할 수 있게 한다.

분산 DBMS는 단편화·중복·위치를 숨겨 하나의 데이터베이스처럼 보이게 하는 분산 투명성을 목표로 한다.

  • 중복 저장: 한 사이트가 고장 나도 다른 사이트의 사본을 쓸 수 있어 가용성이 높아지므로 옳다.
  • 지역 자치성: 각 사이트가 자체 데이터를 독립적으로 관리·운영할 수 있으므로 옳다.
  • 수평적 단편화: 투플(행) 단위로 부분집합을 나눠 각 사이트에 저장하는 방식이므로 옳다.
문제 22
다음 두 트랜잭션이 테이블 R(A, B)에 대해 병행 수행되고 있다. 트랜잭션 T2에서 “select sum(B) from R;”의 결과가 항상 동일한 값을 출력하도록 보장하는 트랜잭션 고립성 수준(isolation level)은? (단, 테이블 R의 속성 A, B의 도메인은 정수이다)
T1T2
begin transaction;
insert into R values (3, 150);
commit;
begin transaction;
select sum(B) from R;
select sum(B) from R;
commit;
1직렬가능(SERIALIZABLE)
2반복 가능한 읽기(REPEATABLE READ)
3커밋된 데이터 읽기(READ COMMITTED)
4커밋되지 않은 데이터 읽기(READ UNCOMMITTED)
정답 및 해설

직렬가능(SERIALIZABLE) 수준이어야 두 번의 sum(B) 결과가 항상 같다. T1의 insert는 새 투플을 추가하므로 팬텀 읽기를 막아야 한다.

두 select 사이에 T1이 (3, 150)을 삽입·커밋하면 두 번째 합계가 150만큼 커질 수 있다. SQL 표준 고립성 수준 중 팬텀까지 막는 것은 SERIALIZABLE뿐이다.

  • 반복 가능한 읽기: 이미 읽은 투플의 변경은 막지만 새로 삽입된 투플(팬텀)은 허용한다.
  • 커밋된 데이터 읽기: 반복 불가능 읽기와 팬텀이 모두 발생할 수 있다.
  • 커밋되지 않은 데이터 읽기: 오손 읽기까지 허용하는 가장 낮은 수준이다.
문제 23
다음 관계 대수식에서 동등 규칙(equivalence rule)이 성립하는 것만을 모두 고르면? (단, E,E1,E2E, E_1, E_2는 관계대수식을, θ,θ1,θ2\theta, \theta_1, \theta_2는 술어(predicate) 조건을, L1,L2L_1, L_2는 속성을 의미한다)
ㄱ. ΠL1(ΠL2(E))≡ΠL2(E)\Pi_{L_1}(\Pi_{L_2}(E)) \equiv \Pi_{L_2}(E)
ㄴ. σθ1∧θ2(E)≡σθ2(σθ1(E))\sigma_{\theta_1 \wedge \theta_2}(E) \equiv \sigma_{\theta_2}(\sigma_{\theta_1}(E))
ㄷ. σθ(E1−E2)≡σθ(E1)−E2\sigma_{\theta}(E_1 - E_2) \equiv \sigma_{\theta}(E_1) - E_2
ㄹ. E1⟕E2≡E2⟕E1E_1 \mathbin{\text{⟕}} E_2 \equiv E_2 \mathbin{\text{⟕}} E_1
1ㄱ, ㄷ
2ㄴ, ㄷ
3ㄴ, ㄹ
4ㄱ, ㄴ, ㄹ
정답 및 해설

동등 규칙이 성립하는 것은 ㄴ, ㄷ이다.

ㄴ은 선택의 연쇄 분해와 교환법칙에 따라 성립한다. ㄷ은 차집합 결과가 E1E_1의 투플 중 E2E_2에 없는 것이므로, E1E_1에만 선택을 적용한 뒤 E2E_2를 빼도 결과가 같다.

  • ㄱ: 연쇄 프로젝션은 L1⊆L2L_1 \subseteq L_2일 때 바깥쪽인 ΠL1(E)\Pi_{L_1}(E)로 줄어들며, 안쪽 ΠL2(E)\Pi_{L_2}(E)와는 같지 않다.
  • ㄹ: 왼쪽 외부 조인은 왼쪽 릴레이션의 투플을 모두 보존하므로 피연산자 순서를 바꾸면 결과가 달라져 교환법칙이 성립하지 않는다.
문제 24
트랜잭션 T1~T4가 다음 연산과 조건에 따라 수행하는 아래 스케줄에 대한 설명으로 옳은 것은?
○ S(A): 데이터 A에 읽기 연산(R(A))을 위한 공용 로크(shared lock) 요청
○ X(A): 데이터 A에 쓰기 연산(W(A))을 위한 전용 로크(exclusive lock) 요청
○ 로크를 요청한 트랜잭션은 요청한 로크가 허용될 때까지 대기한다.
○ 트랜잭션이 소유한 로크는 트랜잭션이 완료될 때 해제된다.

T1T2T3T4
S(A)
R(A)
X(C)
W(C)
X(D)
W(D)
S(B)
R(B)
X(C)
X(A)
X(C)
X(B)
1모든 트랜잭션 T1~T4가 교착상태에 빠졌다.
2트랜잭션 T3을 철회(abort)하면 교착상태가 해결될 수 있다.
3교착상태를 해결하기 위해 철회할 트랜잭션으로 T4를 선택하는 것이 가장 좋다.
4트랜잭션 T2를 철회하면, 트랜잭션 T3은 C에 대한 전용 로크를 획득할 수 있다.
정답 및 해설

T2를 철회하면 T3은 C에 대한 전용 로크를 획득할 수 있다는 설명이 옳다.

대기 관계(기다리는 쪽→로크 보유 쪽)는 T4→T2(C), T2→T1(A의 공용 로크), T1→T4(B의 공용 로크), T3→T2(C)이다. 사이클은 T1→T4→T2→T1이고 T3은 사이클 밖에서 대기만 한다.

T2를 철회하면 C가 해제되어 사이클이 끊기고, C를 먼저 요청한 T4가 완료되어 로크를 놓은 뒤 T3이 C의 전용 로크를 얻는다.

  • 모든 트랜잭션의 교착: T3을 기다리는 트랜잭션이 없어 T3은 교착상태에 포함되지 않는다.
  • T3 철회: T3은 사이클 밖에 있어 철회해도 T1·T2·T4의 순환 대기가 그대로 남는다.
  • T4를 희생자로 선택: T4를 철회해도 사이클은 끊기지만 T1·T2도 같은 사이클에 있어 T4가 가장 좋다고 볼 근거가 없고, T4는 가장 많은 연산을 수행해 철회 비용도 크다.
문제 25
다음은 OLAP(Online Analytical Processing)의 기능에 대한 설명이다. (가), (나)에 들어갈 용어를 바르게 연결한 것은?
○ ( (가) )은 교차 테이블(cross-tab)에서 데이터를 분석하는 차원을 다양하게 변경하는 기능이다.
○ 집계 연산에 대해 사용자가 원하는 크기의 데이터로 보여주기 위해, 미세한 단위부터 큰 단위로 변화시키는 연산을 ( (나) )이라고 한다.

(가)  (나)
1피보팅(pivoting)  롤업(roll-up)
2피보팅(pivoting)  드릴다운(drill-down)
3슬라이싱(slicing)  롤업(roll-up)
4슬라이싱(slicing)  드릴다운(drill-down)
정답 및 해설

(가)는 피보팅(pivoting), (나)는 롤업(roll-up)이다.

피보팅은 교차 테이블의 행·열 차원을 회전·교체해 다른 관점으로 보는 기능이고, 롤업은 일→월→년처럼 세부 단위를 큰 단위로 요약하는 연산이다.

  • 드릴다운: 롤업의 반대로 큰 단위에서 세부 단위로 내려가는 연산이라 (나)에 맞지 않는다.
  • 슬라이싱: 큐브의 한 차원을 특정 값으로 고정해 부분 데이터를 잘라내는 기능이라 (가)에 맞지 않는다.