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

23년 1회차

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

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

23년 1회차

총 25문항 · 객관식 · 정답·해설 포함
문제 1
데이터 독립성에 대한 설명으로 옳은 것만을 모두 고르면?
ㄱ. 물리적 데이터 독립성은 데이터의 물리적 구조가 변경될 때, 데이터의 논리적 구조도 이에 따라 자동으로 변경되게 한다.
ㄴ. 응용프로그램이나 데이터베이스의 논리적 구조에 독립적으로 데이터의 물리적 구조를 변경할 수 있다.
ㄷ. 논리적 데이터 독립성은 개념 스키마가 변경되어도 외부 스키마나 응용프로그램에 영향을 끼치지 않는 것을 의미한다.
ㄹ. 3단계 데이터베이스 구조의 내부 단계에서는 파일에 데이터를 효율적으로 저장하고 관리하기 위하여 여러 개의 내부 스키마를 가지고 있다.
1ㄱ, ㄴ
2ㄱ, ㄹ
3ㄴ, ㄷ
4ㄷ, ㄹ
정답 및 해설

옳은 설명은 ㄴ, ㄷ이다.

물리적 데이터 독립성은 내부 스키마(물리적 구조)를 바꿔도 개념 스키마·응용프로그램이 영향을 받지 않는 성질이고, 논리적 데이터 독립성은 개념 스키마가 바뀌어도 외부 스키마·응용프로그램이 영향을 받지 않는 성질이다.

  • ㄱ: 물리적 구조가 바뀔 때 논리적 구조가 자동으로 함께 바뀐다는 설명은 틀렸다 — 독립성은 논리적 구조를 바꾸지 않아도 되게 하는 것이다.
  • ㄴ: 논리적 구조와 무관하게 물리적 구조를 바꿀 수 있다는 설명은 물리적 데이터 독립성의 정의로 옳다.
  • ㄷ: 개념 스키마 변경이 외부 스키마·응용프로그램에 영향을 주지 않는다는 설명은 논리적 데이터 독립성으로 옳다.
  • ㄹ: 내부 스키마는 데이터베이스당 하나이므로 여러 개를 가진다는 설명은 틀렸다(여러 개일 수 있는 것은 외부 스키마이다).
문제 2
다음에서 설명하는 데이터베이스 용어는?
○ 데이터베이스의 갱신이 발생할 때 DBMS가 자동으로 수행하는 사용자 정의 프로시저이다.
○ 무한 호출에 따라 실행의 종료를 보장할 수 없는 문제가 있다.
○ 무결성 제약조건을 유지하기 위하여 데이터베이스 갱신을 모니터링하고, 데이터베이스 갱신을 전파한다.
1assertion
2catalog
3check
4trigger
정답 및 해설

설명하는 용어는 트리거(trigger)이다.

트리거는 삽입·삭제·갱신 같은 이벤트가 발생하면 DBMS가 자동으로 실행하는 사용자 정의 프로시저로, 무결성 유지와 갱신 전파에 쓰이며 트리거가 다른 트리거를 연쇄 호출하면 종료가 보장되지 않을 수 있다.

  • assertion은 데이터베이스 전체에 걸친 조건을 선언하는 제약으로, 갱신을 전파하는 프로시저가 아니다.
  • catalog는 스키마·제약조건 등 메타데이터를 저장하는 시스템 테이블이다.
  • check는 속성·튜플 값이 만족해야 할 조건을 선언하는 제약조건으로, 자동 실행 프로시저가 아니다.
문제 3
릴레이션 R(A, B, C, D, E, F)에 대한 함수적 종속성(functional dependency)의 집합 F가 다음과 같이 주어졌을 때, 기본 키는?
F = { A → BC, E → CF, B → E, D → E }
1A
2AB
3AD
4AE
정답 및 해설

기본 키는 AD이다.

어떤 함수 종속의 오른쪽에도 나오지 않는 A와 D는 반드시 키에 포함되어야 한다. AD의 폐포를 구하면 A → B, C, B → E, E → F, D → E 로 모든 속성이 결정된다.

(AD)+={A,B,C,D,E,F}(AD)^{+} = \{A, B, C, D, E, F\}이고, A나 D 하나만으로는 전체를 결정하지 못하므로 AD는 최소성도 만족한다.

  • A 단독의 폐포는 {A, B, C, E, F}로 D가 빠져 키가 될 수 없다.
  • AB는 D를 결정하지 못하므로 키가 아니다.
  • AE도 D를 결정하지 못하므로 키가 아니다.
문제 4
다음 릴레이션에서 키에 대한 설명으로 옳지 않은 것은? (단, 밑줄 친 속성은 기본 키이고, 고객 릴레이션에서 주민등록번호 속성의 값은 중복되지 않는다)
고객
고객ID고객이름주민등록번호등급적립금추천고객
K123김탁구96××××-×××××××Gold2000P492
L243이승룡97××××-×××××××Vip3000K123
C524최무선93××××-×××××××Gold2000K123
P492박하얀95××××-×××××××Silver1000L243
주문
주문번호주문고객주문제품수량단가주문일자
1K123우동1020002023 - 01 - 01
2C524라면510002023 - 01 - 02
3P492만두730002023 - 01 - 03
1고객 릴레이션에서 고객ID, 주민등록번호, (고객ID, 고객이름)의 쌍, (고객이름, 주민등록번호)의 쌍은 슈퍼 키가 될 수 있다.
2고객 릴레이션에서 추천고객 속성은 자신의 고객ID 속성을 참조하는 외래 키로 정의가 가능하며, NULL 값을 가질 수 있다.
3주문 릴레이션의 주문고객 속성을 고객 릴레이션의 고객ID에 대한 외래 키로 정의할 때, 주문고객의 값으로 ‘S254’를 가질 수 있다.
4고객 릴레이션에서 고객ID, 주민등록번호는 후보 키가 될 수 있으나, (고객ID, 고객이름)의 쌍은 후보 키가 될 수 없다.
정답 및 해설

옳지 않은 것은 주문고객 값으로 'S254'를 가질 수 있다는 설명이다.

외래 키 값은 참조하는 릴레이션의 기본 키 값 중 하나이거나 NULL이어야 하는데(참조 무결성), 고객 릴레이션에는 고객ID가 S254인 튜플이 없다.

  • 고객ID, 주민등록번호는 각각 유일하므로 이를 포함한 (고객ID, 고객이름), (고객이름, 주민등록번호)도 모두 슈퍼 키가 된다.
  • 추천고객은 같은 릴레이션의 고객ID를 참조하는 자기 참조 외래 키로 정의할 수 있고, 추천인이 없으면 NULL을 가질 수 있다.
  • 고객ID와 주민등록번호는 최소성을 만족하는 후보 키이지만, (고객ID, 고객이름)은 고객ID만으로도 유일하므로 최소성을 만족하지 못해 후보 키가 아니다.
문제 5
다음 릴레이션 R과 S에 대한 관계대수식의 결과로 옳지 않은 것은? (단, 기호 ⋈N\bowtie_N은 자연조인을 의미하고, 릴레이션에서 A, B, C, D는 속성 이름이다)
R
ABC
a1b1c1
a2b2c2
a3b3c3
a4b4c5
S
BCD
b1c1d1
b3c2d2
b3c3d3
b5c5d5
1σB=′b3′(S)\sigma_{B='b3'}(S)
BCD
b3c2d2
b3c3d3
2πB,C(R⋈NS)\pi_{B,C}(R \bowtie_N S)
BC
b1c1
b3c3
3πA,B(σC=′c3′(R))\pi_{A,B}(\sigma_{C='c3'}(R))
AB
a3b3
4πA,C(σB=′b3′(R⋈NS))\pi_{A,C}(\sigma_{B='b3'}(R \bowtie_N S))
AC
a2c2
정답 및 해설

옳지 않은 것은 πA,C(σB=′b3′(R⋈NS))\pi_{A,C}(\sigma_{B='b3'}(R \bowtie_N S))의 결과를 (a2, c2)로 제시한 것이다.

자연조인은 공통 속성 B, C가 모두 같은 튜플끼리 결합하므로 조인 결과는 (a1, b1, c1, d1), (a3, b3, c3, d3) 두 튜플이다. 여기서 B='b3'을 선택하고 A, C를 추출하면 결과는 (a3, c3)이다.

  • S에서 B='b3'인 튜플은 (b3, c2, d2), (b3, c3, d3)로 제시된 결과가 맞다.
  • 조인 결과의 B, C를 추출하면 (b1, c1), (b3, c3)로 제시된 결과가 맞다.
  • R에서 C='c3'인 튜플은 (a3, b3, c3)뿐이므로 A, B 추출 결과 (a3, b3)가 맞다.
문제 6
크기가 100바이트인 고정길이 레코드 630개로 구성한 정렬된 순차 파일(sequential file)에서 이진검색으로 레코드를 검색할 때, 최대로 접근하는 블록의 수는? (단, 블록의 크기는 1,024바이트이며, 하나의 레코드가 두 개 이상의 블록에 나누어 저장되지 않는다고 가정한다)
16
210
364
4320
정답 및 해설

최대로 접근하는 블록 수는 6개이다.

블로킹 인수(블록당 레코드 수): ⌊1024/100⌋=10\lfloor 1024 / 100 \rfloor = 10
필요한 블록 수: ⌈630/10⌉=63\lceil 630 / 10 \rceil = 63

정렬된 63개 블록을 블록 단위로 이진검색하면 최대 접근 횟수는 ⌈log⁡2(63+1)⌉=6\lceil \log_2 (63 + 1) \rceil = 6이다.

레코드가 블록 경계를 넘지 않으므로 블록당 남는 24바이트는 쓰지 않는다. 블록이 아닌 레코드 단위로 계산하거나 순차 탐색으로 계산하면 더 큰 값이 나온다.

문제 7
다음과 같은 조건을 모두 만족하는 B+B^{+}-트리에 T, W, M, E, F, G, K, C, S, D, B, L 순으로 키 값이 입력되었을 때, 루트(root)에 있는 키 값을 바르게 나열한 것은? (단, [Xi][X_i]는 포인터 PiP_i가 가리키는 서브트리의 모든 키 값들을 의미하고, 트리는 비어 있는(empty) 상태이며, 기호 ≡\equiv는 동치를 의미한다)
○ 한 노드에 최대 네 개의 키 값을 가질 수 있다.
○ 내부노드의 구조는 <P1,K1,…,Pi,Ki,…,Kq−1,Pq>\lt P_1, K_1, \ldots, P_i, K_i, \ldots, K_{q-1}, P_q \gt이며, KiK_i는 ii번째 키, PiP_i는 ii번째 서브트리를 가리키는 포인터이다.
○ i≡1i \equiv 1이면 [X1]<K1[X_1] \lt K_1이고, i≡qi \equiv q이면 Kq−1≤[Xq]K_{q-1} \le [X_q]를 만족한다.
○ 1<i<q1 \lt i \lt q이면 Ki−1≤[Xi]<KiK_{i-1} \le [X_i] \lt K_i를 만족한다.
○ 노드 분할 시 상위 노드로 올리는 값은 분할대상 키 값들 중 중간 값을 올리는 것으로 가정한다.
1C, K
2D, L
3F, M
4G, S
정답 및 해설

루트에 있는 키 값은 F, M이다.

노드당 최대 4개 키이므로 다섯 번째 키가 들어오면 분할하고, 리프 분할 시 중간 값을 상위 노드로 복사해 올리며 중간 값은 오른쪽 리프에 남는다. T, W, M, E 삽입 → [E, M, T, W]. F 삽입 시 [E, F, M, T, W]가 넘쳐 중간 값 M을 올린다: [E, F] | [M, T, W], 루트 [M].

G, K 삽입 → 왼쪽 리프 [E, F, G, K]. C 삽입 시 [C, E, F, G, K]가 넘쳐 중간 값 F를 올린다: [C, E] | [F, G, K] | [M, T, W], 루트 [F, M].

이후 S → [M, S, T, W], D와 B → [B, C, D, E], L → [F, G, K, L]로 어느 리프도 넘치지 않아 루트는 [F, M]으로 유지된다.

문제 8
데이터베이스 관리시스템(DBMS)에 대한 설명으로 옳은 것만을 모두 고르면?
ㄱ. 일반적으로 데이터베이스는 저장된 데이터가 많아 구조가 복잡하고, 동시 공유를 지원하므로 장애 발생에 대응해서 데이터를 일관된 상태로 회복하는 과정이 복잡하다.
ㄴ. DBMS의 필수 기능으로 정의 기능, 조작 기능, 제어 기능, 처리 기능이 있다.
ㄷ. DBMS의 정의 기능은 데이터를 정확하고 안전하게 유지하기 위한 데이터 무결성 유지, 보안 유지, 병행 제어 기능을 포함한다.
ㄹ. DBMS는 데이터의 중복성과 응용프로그램에 대한 종속성 문제 해결에서 파일 시스템 대비 우수한 장점을 가지고 있다.
1ㄱ, ㄴ
2ㄱ, ㄹ
3ㄴ, ㄷ
4ㄷ, ㄹ
정답 및 해설

옳은 설명은 ㄱ, ㄹ이다.

DBMS의 필수 기능은 정의·조작·제어 세 가지이며, 무결성·보안·병행 제어는 제어 기능에 속한다.

  • ㄱ: 데이터 규모가 크고 동시 공유를 지원하므로 장애 시 일관된 상태로 회복하는 과정이 복잡하다는 설명은 옳다.
  • ㄴ: 필수 기능에 '처리 기능'을 포함한 설명은 틀렸다.
  • ㄷ: 무결성·보안·병행 제어를 정의 기능에 넣은 설명은 틀렸다 — 이는 제어 기능이다.
  • ㄹ: 파일 시스템의 데이터 중복과 응용프로그램 종속 문제를 해결한다는 설명은 옳다.
문제 9
음식점 관리 시스템에서 고객(customer), 주문(order), 음식(food)을 관리하기 위해 릴레이션을 다음과 같이 설계하였다. 이 릴레이션에 대하여, SQL문에 대응하는 관계대수식으로 옳지 않은 것은? (단, 밑줄 친 속성은 기본 키이고, 관계대수 연산자 중에서 ρ\rho는 재명명(rename) 연산자이며, I\mathfrak{I}은 집계함수(aggregate function) 연산을 정의하는 연산자이다)
customer(name, gender, phone, address, year)
order(cname, fname, price, date)
food(name, price, stock)
1SQL:
SELECT name
FROM food AS f
WHERE f.stock < 10 OR f.price > 20000;
관계대수:
πname(σf.stock<10 OR f.price>20000(ρf(food)))\pi_{name}(\sigma_{f.stock \lt 10\ OR\ f.price \gt 20000}(\rho_f(food)))
2SQL:
SELECT c.name, c.phone
FROM customer AS c, order AS o, food AS f
WHERE o.fname = f.name AND c.name = o.cname
AND f.price > 10000;
관계대수:
πc.name, c.phone(σo.fname=f.nameAND c.name=o.cname(ρc(customer)×ρo(order)×ρf(food)))\pi_{c.name,\ c.phone}\left(\sigma_{\substack{o.fname = f.name\\ AND\ c.name = o.cname}}\left(\begin{array}{l}\rho_c(customer)\\ \times \rho_o(order)\\ \times \rho_f(food)\end{array}\right)\right)
3SQL:
SELECT name, SUM(price) AS orderPrice
FROM customer, order
WHERE name = cname
GROUP BY name;
관계대수:
ρ(name,orderPrice)(nameISUM(price)(customer⋈name=cnameorder))\rho_{(name,orderPrice)}({}_{name}\mathfrak{I}_{SUM(price)}(customer \bowtie_{name = cname} order))
4SQL:
SELECT name, AVG(food.price) AS avgPrice
FROM food, order
GROUP BY name;
관계대수:
ρ(name,avgPrice)(nameIAVG(food.price)(food×order))\rho_{(name,avgPrice)}({}_{name}\mathfrak{I}_{AVG(food.price)}(food \times order))
정답 및 해설

옳지 않은 것은 가격이 10000을 넘는 음식을 주문한 고객의 이름·전화번호를 구하는 SQL에 대응시킨 관계대수식이다.

SQL의 WHERE 절에는 조인 조건 외에 f.price > 10000이 있는데, 관계대수식의 선택 조건에는 o.fname = f.name AND c.name = o.cname만 있어 가격 조건이 빠져 있다.

  • 재고 10 미만 또는 가격 20000 초과인 음식 이름 질의는 재명명 후 OR 조건 선택과 name 추출로 정확히 대응한다.
  • 고객별 주문 금액 합계 질의는 name = cname 조인 후 name으로 그룹화해 SUM(price)를 구하고 재명명하므로 대응한다.
  • 조인 조건이 없는 FROM food, order는 카티션 곱이므로, 곱 결과를 name으로 그룹화해 AVG(food.price)를 구하는 식과 대응한다.
문제 10
다음 ERD(entity-relationship diagram)에 대응하는 보고 테이블을 생성하고자 한다. 보고 테이블을 생성하는 SQL문의 (가)에 들어갈 내용으로 옳은 것은? (단, 밑줄 친 속성은 기본 키이고, 직원 개체(entity)는 테이블로 생성되어 있다고 가정한다)

CREATE TABLE 보고(
상급자_사번 CHAR(10),
하급자_사번 CHAR(10),
(가)
);

1PRIMARY KEY (상급자_사번, 하급자_사번),
FOREIGN KEY (상급자_사번) REFERENCES 직원(사번),
FOREIGN KEY (하급자_사번) REFERENCES 직원(사번)
2PRIMARY KEY (상급자_사번),
FOREIGN KEY (상급자_사번) REFERENCES 직원(사번),
FOREIGN KEY (하급자_사번) REFERENCES 직원(사번)
3PRIMARY KEY (상급자_사번, 하급자_사번),
FOREIGN KEY (상급자_사번, 하급자_사번)
REFERENCES 직원(사번)
4PRIMARY KEY (하급자_사번),
FOREIGN KEY (하급자_사번) REFERENCES 직원(사번)
정답 및 해설

직원 개체의 M:N 순환 관계 보고는 두 사번을 묶은 복합 기본 키와 각 사번별로 따로 선언한 외래 키 2개로 테이블을 만든다.

M:N 관계는 한 상급자가 여러 하급자를, 한 하급자가 여러 상급자를 가질 수 있으므로 어느 한쪽 사번만으로는 행을 식별할 수 없다. 또 상급자_사번과 하급자_사번은 각각 직원(사번)이라는 단일 속성을 참조하므로 외래 키도 하나씩 따로 정의해야 한다.

  • 기본 키를 상급자_사번 하나로 두면 한 상급자가 여러 하급자를 둘 때 키가 중복되어 M:N 관계를 표현할 수 없다.
  • 두 속성을 묶어 직원(사번)을 참조하는 외래 키는 2개 열을 1개 열에 대응시키는 것이라 참조 대상의 키 구성과 맞지 않는다.
  • 기본 키를 하급자_사번 하나로 두고 외래 키도 하급자만 두면 1:N 관계가 되고 상급자 쪽 참조 무결성도 빠진다.
문제 11
다음은 사원 정보를 나타내기 위한 EMP 테이블이다. EMP 테이블에서 상사가 없는 사원의 SUPERID가 NULL 처리될 때, 아래 SQL문 실행 결과의 차수(degree)와 카디널리티(cardinality)는? (단, 밑줄 친 속성은 기본 키이다)
EMP
IDNAMESALARYSUPERID
1001Kim8000NULL
1002Lee50001003
1003Park7000NULL
1004Cho30001001
SELECT *
FROM EMP S RIGHT OUTER JOIN EMP E
ON S.ID = E.SUPERID;
차수  카디널리티
14  2
24  8
38  2
48  4
정답 및 해설

결과의 차수는 8, 카디널리티는 4이다.

SELECT *로 S와 E의 속성 4개씩이 모두 나오므로 차수는 4 + 4 = 8이다. 오른쪽 외부 조인은 오른쪽 E의 모든 튜플을 보존한다.

ID가 기본 키라 E의 각 튜플과 일치하는 S 튜플은 최대 하나이다. Lee는 Park과, Cho는 Kim과 결합하고, SUPERID가 NULL인 Kim, Park은 S 쪽 속성을 NULL로 채워 남으므로 4행이다.

  • 차수를 4로 본 것은 SELECT *가 양쪽 속성을 모두 출력함을 놓친 것이다.
  • 카디널리티를 2로 본 것은 일치하는 행만 남기는 내부 조인 결과이다.
문제 12
다음 고객 테이블에 대한 SQL 구문에서 실행 결과가 다른 하나는? (단, 밑줄 친 속성은 기본 키이다)
고객
고객ID고객이름등급적립금
k123김상중Gold3000
l018이영우Vip4000
c389최영Gold3000
p273박구연Silver2000
h328홍연수Vip5000
j451정영상Silver3000
y524윤성진Gold2000
1SELECT 고객이름
FROM 고객
WHERE 적립금 = (SELECT MAX(적립금) FROM 고객);
2SELECT 고객이름
FROM 고객
WHERE 적립금 >= ALL (SELECT 적립금 FROM 고객);
3SELECT 고객이름
FROM 고객
WHERE 적립금 > ANY (SELECT 적립금 FROM 고객
WHERE 등급 = ‘Vip’);
4SELECT 고객이름
FROM 고객
WHERE 적립금 IN (SELECT 적립금 FROM 고객
WHERE 등급 = ‘Vip’);
정답 및 해설

결과가 다른 것은 IN 부속질의를 쓴 구문이다.

Vip 등급의 적립금은 4000, 5000이므로 IN 조건은 적립금이 4000 또는 5000인 이영우, 홍연수를 반환한다.

  • MAX(적립금)과 같은지 비교: 최댓값 5000인 홍연수만 반환한다.
  • >= ALL: 모든 적립금 이상인 값은 5000뿐이므로 홍연수만 반환한다.
  • Vip 적립금에 대한 > ANY: 4000, 5000 중 하나라도 초과하면 되므로 4000 초과인 홍연수만 반환한다.
문제 13
데이터베이스 시스템의 데이터 언어에 대한 설명으로 옳지 않은 것은?
1데이터 언어는 사용자가 데이터베이스를 구축하고, 이에 접근하기 위해 데이터베이스 관리시스템과 통신하는 수단이다.
2비절차적 데이터 조작어는 사용자가 어떤 데이터를 원하고 해당 데이터를 얻으려면 어떻게 처리해야 하는지에 대한 절차를 구체적으로 명세한다.
3데이터 제어어는 데이터베이스에 저장된 데이터를 여러 사용자가 무결성과 일관성을 유지하며 문제없이 공유할 수 있도록, 내부적으로 필요한 규칙이나 기법을 정의하는 데 사용하는 데이터 언어이다.
4데이터 정의어는 새로운 데이터베이스를 구축하기 위해 스키마를 정의하거나 기존 스키마의 정의를 삭제하거나 수정하기 위해 사용하는 데이터 언어이다.
정답 및 해설

옳지 않은 것은 비절차적 데이터 조작어가 처리 절차까지 명세한다는 설명이다.

비절차적 DML은 어떤(what) 데이터를 원하는지만 명세하고 처리 방법은 DBMS에 맡긴다. 원하는 데이터와 처리 방법(how)을 모두 명세하는 것은 절차적 DML이다.

  • 데이터 언어가 사용자와 DBMS 간의 통신 수단이라는 설명은 옳다.
  • 데이터 제어어가 무결성·일관성을 유지하며 공유하도록 규칙·기법을 정의한다는 설명은 옳다.
  • 데이터 정의어가 스키마를 정의·삭제·수정한다는 설명은 옳다.
문제 14
다음은 분산 데이터베이스에 대한 설명이다. (가), (나)에 들어갈 내용을 바르게 연결한 것은?
○ ( 가 )는 각 조각 스키마의 인스턴스가 물리적으로 저장되어야 하는 지역을 정의한다.
○ ( 나 )는 분산 데이터베이스에 저장할 모든 데이터 구조와 제약조건을 정의하는 것으로서, 관계 데이터 모델의 관점에서 보면 데이터베이스 안에 존재하는 모든 릴레이션 스키마의 집합이다.
(가)  (나)
1지역 스키마  전역 개념 스키마
2단편화 스키마  지역 스키마
3단편화 스키마  할당 스키마
4할당 스키마  전역 개념 스키마
정답 및 해설

(가)는 할당 스키마, (나)는 전역 개념 스키마이다.

분산 데이터베이스 스키마는 전역 개념 스키마 → 단편화 스키마 → 할당 스키마 → 지역 스키마로 구성되며, 조각을 어느 지역(사이트)에 저장할지 정하는 것이 할당 스키마이다.

  • 단편화 스키마는 전역 릴레이션을 어떻게 조각(fragment)으로 나눌지를 정의하므로 (가)에 해당하지 않는다.
  • 지역 스키마는 각 사이트의 지역 DBMS가 관리하는 스키마로, 모든 릴레이션 스키마의 집합인 (나)가 아니다.
문제 15
NoSQL에 대한 설명으로 옳지 않은 것은?
1NoSQL 시스템으로 Ingres 등이 있다.
2가용성을 높이기 위해 일치성을 약하게 보장하는 궁극적 일치성(eventual consistency)을 제공하는 경우가 많다.
3미리 정의된 스키마를 사용하지 않아도 된다.
4다수의 컴퓨터에 데이터를 분산, 저장, 처리하는 것이 가능한 데이터베이스 시스템이다.
정답 및 해설

옳지 않은 것은 Ingres를 NoSQL 시스템으로 든 설명이다.

Ingres는 SQL을 지원하는 대표적인 관계형 DBMS이며, NoSQL의 예로는 MongoDB, Cassandra, Redis, HBase 등이 있다.

  • 가용성을 위해 궁극적 일치성을 제공하는 경우가 많다는 설명은 옳다.
  • 미리 정의된 스키마 없이 데이터를 저장할 수 있다는 설명은 옳다.
  • 여러 컴퓨터에 데이터를 분산 저장·처리한다는 설명은 옳다.
문제 16
다음 두 종류의 로그 및 데이터베이스 기록 내용에서 (가), (나), (다), (라) 시점에 장애가 발생하였을 때, 수행되어야 할 회복 연산이 바르게 연결된 것은? (단, A, C, E, G의 초깃값은 100이며, B, D, F, H의 초깃값은 50이고, (가) ~ (라)의 각 시점에 발생하는 장애는 상호 영향을 주지 않는다)
시간로그데이터베이스
<T1, start>
<T1, A, 100, 90>
<T1, B, 50, 60>A = 90
(가)→B = 60
<T1, commit>
<T2, start>
<T2, C, 100, 90>
<T2, D, 50, 60>C = 90
(나)→D = 60
<T2, commit>
시간로그데이터베이스
<T3, start>
<T3, E, 90>
(다)→<T3, F, 60>
<T3, commit>
E = 90, F = 60
<T4, start>
<T4, G, 90>
(라)→<T4, H, 60>
<T4, commit>
G = 90, H = 60
(가)  (나)  (다)  (라)
1회복작업 없음  Redo(T1)  Undo(T3)  Redo(T3), Undo(T4)
2회복작업 없음  Redo(T1)  회복작업 없음  Redo(T3)
3Undo(T1)  Redo(T1), Undo(T2)  회복작업 없음  Redo(T3)
4Undo(T1)  Redo(T1), Undo(T2)  Undo(T3)  Redo(T3), Undo(T4)
정답 및 해설

바른 연결은 (가) Undo(T1)\mathrm{Undo}(T_1), (나) Redo(T1),Undo(T2)\mathrm{Redo}(T_1), \mathrm{Undo}(T_2), (다) 회복작업 없음, (라) Redo(T3)\mathrm{Redo}(T_3)이다.

첫 번째 로그는 이전 값과 새 값을 모두 기록하므로 즉시 갱신 기법이다. 커밋 전에도 DB에 반영되므로 커밋된 트랜잭션은 Redo, 커밋되지 않은 트랜잭션은 Undo한다.

  • (가): T1T_1이 커밋 전이고 A = 90이 이미 기록되었으므로 Undo가 필요하다.
  • (나): T1T_1은 커밋되었으므로 Redo, T2T_2는 커밋 전에 C가 기록되었으므로 Undo한다.

두 번째 로그는 새 값만 기록하므로 지연 갱신 기법이다. 커밋 후에야 DB에 반영되므로 Undo는 필요 없고 커밋된 트랜잭션만 Redo한다.

  • (다): T3T_3은 커밋 전이라 DB에 반영된 것이 없으므로 회복작업이 없다.
  • (라): 커밋된 T3T_3은 Redo하고, 커밋 전인 T4T_4는 DB에 반영된 것이 없으므로 로그만 무시한다.
문제 17
관계형 데이터베이스의 상태에 대한 제약조건으로 옳지 않은 것은?
1참조되는 릴레이션에 새로운 튜플이 삽입되는 과정에서 참조무결성 제약조건의 위반이 발생하면, 제약조건 위반의 원인이 되는 연산을 거부하도록 해야 한다.
2릴레이션 스키마 R의 임의의 두 튜플 t1t_1, t2t_2에 대하여 t1[SK]≠t2[SK]t_1[SK] \neq t_2[SK]이 성립한다면, 속성 집합 SKSK를 R의 슈퍼 키라고 한다.
3참조하는 릴레이션 R1의 외래 키는 참조되는 릴레이션 R2의 기본 키와 동일한 도메인이어야 하며, 기본 키 값 중 하나이거나 NULL 값이어야 한다.
4데이터베이스는 개체무결성과 참조무결성 제약조건을 만족해야 한다.
정답 및 해설

옳지 않은 것은 참조되는 릴레이션에 튜플을 삽입할 때 참조무결성 위반이 발생한다고 본 설명이다.

피참조 릴레이션에 새 튜플을 삽입해도 기존 외래 키 값은 깨지지 않는다. 삽입 시 위반은 참조하는 릴레이션에 존재하지 않는 키 값을 외래 키로 넣을 때 발생한다.

  • 임의의 두 튜플에서 SK 값이 서로 다르면 SK가 슈퍼 키라는 설명은 유일성 정의로 옳다.
  • 외래 키는 참조되는 기본 키와 같은 도메인이고 그 값 중 하나이거나 NULL이어야 한다는 설명은 옳다.
  • 데이터베이스가 개체무결성과 참조무결성을 만족해야 한다는 설명은 옳다.
문제 18
SQL의 부속질의(subquery)에 대한 설명으로 옳지 않은 것은?
1부속질의는 하나의 SQL문 안에 다른 SQL문이 중첩된 질의를 말한다.
2연산자 ANY는 부속질의가 단일 행을 반환할 때만 적용할 수 있다.
3스칼라(scalar) 부속질의는 결과 값을 단일한 스칼라 값으로 반환한다.
4인라인 뷰(inline view)는 FROM 절에서 사용되는 부속질의이다.
정답 및 해설

옳지 않은 것은 ANY가 단일 행 부속질의에만 적용된다는 설명이다.

ANY·ALL·IN은 부속질의가 여러 행을 반환할 때 쓰는 다중 행 비교 연산자이다. 단일 행 반환에만 쓰는 것은 =, <, > 같은 단일 행 비교 연산자이다.

  • 부속질의가 SQL문 안에 중첩된 질의라는 설명은 옳다.
  • 스칼라 부속질의가 단일 값을 반환한다는 설명은 옳다.
  • 인라인 뷰가 FROM 절의 부속질의라는 설명은 옳다.
문제 19
다음 릴레이션 R1R_1, R2R_2, R3R_3에 대한 관계대수식의 의미가 다른 것은?
R1(A,B,C)R2(D,E)R3(F,G,H)R_1(A, B, C) \quad R_2(D, E) \quad R_3(F, G, H)
1σB=5(R1⋈A=DR2)⋈E=FR3\sigma_{B=5}(R_1 \bowtie_{A=D} R_2) \bowtie_{E=F} R_3
2σB=5 AND A=D(πA,B(R1)×R2)⋈E=FR3\sigma_{B=5\ AND\ A=D}(\pi_{A,B}(R_1) \times R_2) \bowtie_{E=F} R_3
3σA=D(σB=5(R1)×R2)⋈E=FR3\sigma_{A=D}(\sigma_{B=5}(R_1) \times R_2) \bowtie_{E=F} R_3
4σB=5((R2⋈E=FR3)⋈A=DR1)\sigma_{B=5}((R_2 \bowtie_{E=F} R_3) \bowtie_{A=D} R_1)
정답 및 해설

의미가 다른 것은 πA,B(R1)\pi_{A,B}(R_1)을 곱하는 식이다.

이 식은 조인 전에 속성 C를 제거하므로 결과 릴레이션에 C가 없다. 나머지 식은 모두 R1,R2,R3R_1, R_2, R_3의 전체 속성을 유지하는 동등 변환이다.

  • 조인 결과에 B=5를 선택하는 식이 기준 질의이다.
  • B=5 선택을 먼저 수행한 뒤 곱과 A=D 선택으로 조인하는 식은 선택 연산을 아래로 내린 동등 변환이다.
  • R2R_2와 R3R_3을 먼저 조인한 뒤 R1R_1과 조인하고 B=5를 선택하는 식은 조인의 교환·결합 법칙에 의한 동등 변환이다.
문제 20
두 개의 트랜잭션 T1과 T2를 수행하는 과정에서 다음과 같은 현상이 발생하였다. 이 현상이 발생하는 격리 수준은?
○ T1에서 1번 상품의 가격을 조회하였을 때 10만 원으로 나타났고, T2에서 1번 상품의 가격을 15만 원으로 변경하고 커밋(commit)을 수행하였다. 그 후에 T1에서 1번 상품의 가격을 조회하니 15만 원으로 나타났다.
○ T2에서 1번 상품의 가격을 10만 원에서 15만 원으로 변경하다가 커밋을 수행하지 않고 롤백(rollback)하는 과정에서 T1에서 1번 상품의 가격을 조회하였으나 허용되지 않았다.
○ T1에서 등록된 상품을 조회하였는데 0건이 조회되었고, T2에서 1번 상품을 등록하고 커밋을 수행하였다. T1에서 등록된 상품을 다시 조회하였더니 1개 상품이 나타났다.
1Read Committed
2Serializable
3Repeatable Read
4Read Uncommitted
정답 및 해설

이 현상이 나타나는 격리 수준은 Read Committed이다.

커밋된 변경 때문에 같은 데이터를 다시 읽을 때 값이 달라지는 반복 불가능 읽기와 새 튜플이 나타나는 팬텀 읽기는 발생하지만, 커밋되지 않은 값 읽기(dirty read)는 허용되지 않았다.

  • Serializable은 반복 불가능 읽기와 팬텀 읽기를 모두 막는다.
  • Repeatable Read는 같은 데이터를 다시 읽을 때 값이 바뀌는 현상을 막는다.
  • Read Uncommitted는 롤백 중인 미커밋 값을 읽는 것도 허용한다.
문제 21
릴레이션 R과 S에 대한 조인 연산의 구현 방법을 설명한 것으로 옳지 않은 것은?
1중첩 루프 조인(nested loop join): R과 S의 레코드들에 대한 별도의 인덱스나 정렬을 필요로 하지 않는다.
2단일 루프 조인(single loop join): R과 S 중 하나의 릴레이션에 있는 레코드들은 조인 속성 값에 따라 물리적으로 정렬되어 있어야 한다.
3정렬-합병 조인(sort-merge join): R과 S의 레코드들이 조인 속성 값에 따라 물리적으로 정렬되어 있을 때 가장 효율적이다.
4해시 조인(hash join): R과 S의 레코드들은 조인 속성을 해시 키로 하고 동일한 해시 함수를 이용해 해시되어 있어야 한다.
정답 및 해설

옳지 않은 것은 단일 루프 조인에 물리적 정렬이 필요하다는 설명이다.

단일 루프 조인은 한 릴레이션의 조인 속성에 인덱스(또는 해시 키)가 있을 때, 다른 릴레이션의 각 레코드로 그 접근 구조를 탐색해 일치 레코드를 찾는 방법이다. 필요한 것은 정렬이 아니라 접근 구조이다.

  • 중첩 루프 조인은 모든 레코드 쌍을 비교하므로 별도의 인덱스나 정렬이 필요 없다.
  • 정렬-합병 조인은 두 릴레이션이 조인 속성으로 정렬되어 있을 때 한 번씩만 훑으면 되어 가장 효율적이다.
  • 해시 조인은 두 릴레이션을 같은 해시 함수로 조인 속성에 따라 분할해 같은 버킷끼리 비교한다.
문제 22
회복 기법과 그 특징이 바르게 짝 지어진 것은?
1지연 갱신에 기반을 둔 기법: UNDO/REDO
2즉시 갱신에 기반을 둔 기법: NO-UNDO/NO-REDO
3그림자 페이지 기법: UNDO/NO-REDO
4ARIES 기법: 분석 → REDO → UNDO
정답 및 해설

바르게 짝 지어진 것은 ARIES 기법의 분석 → REDO → UNDO 단계이다.

ARIES는 분석 단계에서 갱신된 페이지와 활성 트랜잭션을 파악하고, REDO로 장애 시점 상태를 재현한 뒤, UNDO로 미완료 트랜잭션을 취소한다.

  • 지연 갱신은 커밋 전 DB에 반영하지 않으므로 NO-UNDO/REDO이다.
  • 즉시 갱신은 커밋 전에도 반영하므로 UNDO/REDO(또는 UNDO/NO-REDO)이다.
  • 그림자 페이지 기법은 그림자 페이지 테이블로 이전 상태를 보존하므로 NO-UNDO/NO-REDO이다.
문제 23
데이터베이스 보안에 대한 설명으로 옳지 않은 것은?
1권한 관리를 이용하여 접근 권한이 없는 사용자의 접근으로부터 데이터베이스를 보호한다.
2사용자가 소유한 데이터베이스 객체에 대한 권한 부여는 반드시 데이터 관리자에 의해 수행되어야 한다.
3접근이 허락된 사용자가 실수 등의 이유로 데이터 무결성을 위반하지 않도록 정의된 제약조건 등을 이용하여 통제할 수 있어야 한다.
4보안을 위한 데이터 단위는 데이터베이스 전체로부터 특정 테이블의 특정 행과 열 수준까지 정의될 수 있다.
정답 및 해설

옳지 않은 것은 소유 객체의 권한 부여를 반드시 데이터 관리자가 해야 한다는 설명이다.

객체를 생성한 소유자는 그 객체에 대한 모든 권한을 가지며 GRANT로 다른 사용자에게 직접 권한을 부여할 수 있다.

  • 권한 관리로 권한 없는 사용자의 접근을 막는다는 설명은 옳다.
  • 허가된 사용자의 실수에 의한 무결성 위반을 제약조건으로 통제한다는 설명은 옳다.
  • 보안 단위를 데이터베이스 전체부터 특정 행·열까지 정할 수 있다는 설명은 옳다.
문제 24
데이터 웨어하우스(data warehouse)에 대한 설명으로 옳지 않은 것은?
1데이터 웨어하우스는 의사결정에 필요한 주제에 따라 데이터를 관리하는 주제 지향성(subject orientation) 특징을 가진다.
2데이터 웨어하우스는 데이터가 일관된 형식으로 정의되는 통합성(integration) 특징을 가진다.
3데이터 웨어하우스는 데이터에 접근하는 현재 시간을 기준으로 최신의 값을 유지하는 시불변성(time invariance) 특징을 가진다.
4데이터 웨어하우스는 읽기 전용의 데이터를 유지하는 비휘발성(nonvolatilization) 특징을 가진다.
정답 및 해설

옳지 않은 것은 데이터 웨어하우스가 최신 값만 유지한다는 설명이다.

데이터 웨어하우스는 시간에 따른 변화를 이력으로 보관하는 시변성(time variant)을 가진다. 현재 시점의 최신 값만 유지하는 것은 운영 데이터베이스의 특성이다.

  • 의사결정 주제별로 데이터를 관리하는 주제 지향성은 옳다.
  • 여러 원천 데이터를 일관된 형식으로 정의하는 통합성은 옳다.
  • 적재 후 갱신하지 않고 읽기 위주로 유지하는 비휘발성은 옳다.
문제 25
데이터베이스에서 동시성 제어(concurrency control)를 위한 로킹(locking) 기법과 이를 이용하여 제어할 수 있는 상황이 바르게 짝 지어진 것은?
ㄱ. 직렬가능(serializable) 스케줄 보장
ㄴ. 교착상태(deadlock) 방지
ㄷ. 복구가능한(recoverable) 스케줄 보장
12PL(two-phase locking) - ㄷ
2엄격한(strict) 2PL - ㄱ, ㄷ
3엄중한(rigorous) 2PL - ㄱ, ㄴ
4엄중한(rigorous) 2PL - ㄱ, ㄴ, ㄷ
정답 및 해설

바르게 짝 지어진 것은 엄격한(strict) 2PL과 ㄱ, ㄷ이다.

2PL 계열은 모두 직렬가능성을 보장하지만 교착상태는 막지 못한다. 엄격한 2PL은 배타 로크를 커밋·철회 시까지 유지해 미커밋 값을 읽지 못하게 하므로 복구가능 스케줄도 보장한다.

  • 기본 2PL은 ㄱ은 보장하지만 커밋 전 로크 해제로 미커밋 값을 읽을 수 있어 ㄷ은 보장하지 못한다.
  • 엄중한 2PL과 ㄱ, ㄴ의 짝은 틀렸다 — 로크 대기 순환이 생길 수 있어 교착상태 방지는 보장하지 않는다.
  • 엄중한 2PL과 ㄱ, ㄴ, ㄷ의 짝도 ㄴ을 포함하므로 틀렸다(ㄱ, ㄷ만 보장).
7급 국가직 데이터베이스론 기출문제모두CBT · moducbt.com
23년 1회차
총 25문항 · 객관식 · 정답·해설 포함
문제 1
데이터 독립성에 대한 설명으로 옳은 것만을 모두 고르면?
ㄱ. 물리적 데이터 독립성은 데이터의 물리적 구조가 변경될 때, 데이터의 논리적 구조도 이에 따라 자동으로 변경되게 한다.
ㄴ. 응용프로그램이나 데이터베이스의 논리적 구조에 독립적으로 데이터의 물리적 구조를 변경할 수 있다.
ㄷ. 논리적 데이터 독립성은 개념 스키마가 변경되어도 외부 스키마나 응용프로그램에 영향을 끼치지 않는 것을 의미한다.
ㄹ. 3단계 데이터베이스 구조의 내부 단계에서는 파일에 데이터를 효율적으로 저장하고 관리하기 위하여 여러 개의 내부 스키마를 가지고 있다.
1ㄱ, ㄴ
2ㄱ, ㄹ
3ㄴ, ㄷ
4ㄷ, ㄹ
정답 및 해설

옳은 설명은 ㄴ, ㄷ이다.

물리적 데이터 독립성은 내부 스키마(물리적 구조)를 바꿔도 개념 스키마·응용프로그램이 영향을 받지 않는 성질이고, 논리적 데이터 독립성은 개념 스키마가 바뀌어도 외부 스키마·응용프로그램이 영향을 받지 않는 성질이다.

  • ㄱ: 물리적 구조가 바뀔 때 논리적 구조가 자동으로 함께 바뀐다는 설명은 틀렸다 — 독립성은 논리적 구조를 바꾸지 않아도 되게 하는 것이다.
  • ㄴ: 논리적 구조와 무관하게 물리적 구조를 바꿀 수 있다는 설명은 물리적 데이터 독립성의 정의로 옳다.
  • ㄷ: 개념 스키마 변경이 외부 스키마·응용프로그램에 영향을 주지 않는다는 설명은 논리적 데이터 독립성으로 옳다.
  • ㄹ: 내부 스키마는 데이터베이스당 하나이므로 여러 개를 가진다는 설명은 틀렸다(여러 개일 수 있는 것은 외부 스키마이다).
문제 2
다음에서 설명하는 데이터베이스 용어는?
○ 데이터베이스의 갱신이 발생할 때 DBMS가 자동으로 수행하는 사용자 정의 프로시저이다.
○ 무한 호출에 따라 실행의 종료를 보장할 수 없는 문제가 있다.
○ 무결성 제약조건을 유지하기 위하여 데이터베이스 갱신을 모니터링하고, 데이터베이스 갱신을 전파한다.
1assertion
2catalog
3check
4trigger
정답 및 해설

설명하는 용어는 트리거(trigger)이다.

트리거는 삽입·삭제·갱신 같은 이벤트가 발생하면 DBMS가 자동으로 실행하는 사용자 정의 프로시저로, 무결성 유지와 갱신 전파에 쓰이며 트리거가 다른 트리거를 연쇄 호출하면 종료가 보장되지 않을 수 있다.

  • assertion은 데이터베이스 전체에 걸친 조건을 선언하는 제약으로, 갱신을 전파하는 프로시저가 아니다.
  • catalog는 스키마·제약조건 등 메타데이터를 저장하는 시스템 테이블이다.
  • check는 속성·튜플 값이 만족해야 할 조건을 선언하는 제약조건으로, 자동 실행 프로시저가 아니다.
문제 3
릴레이션 R(A, B, C, D, E, F)에 대한 함수적 종속성(functional dependency)의 집합 F가 다음과 같이 주어졌을 때, 기본 키는?
F = { A → BC, E → CF, B → E, D → E }
1A
2AB
3AD
4AE
정답 및 해설

기본 키는 AD이다.

어떤 함수 종속의 오른쪽에도 나오지 않는 A와 D는 반드시 키에 포함되어야 한다. AD의 폐포를 구하면 A → B, C, B → E, E → F, D → E 로 모든 속성이 결정된다.

(AD)+={A,B,C,D,E,F}(AD)^{+} = \{A, B, C, D, E, F\}이고, A나 D 하나만으로는 전체를 결정하지 못하므로 AD는 최소성도 만족한다.

  • A 단독의 폐포는 {A, B, C, E, F}로 D가 빠져 키가 될 수 없다.
  • AB는 D를 결정하지 못하므로 키가 아니다.
  • AE도 D를 결정하지 못하므로 키가 아니다.
문제 4
다음 릴레이션에서 키에 대한 설명으로 옳지 않은 것은? (단, 밑줄 친 속성은 기본 키이고, 고객 릴레이션에서 주민등록번호 속성의 값은 중복되지 않는다)
고객
고객ID고객이름주민등록번호등급적립금추천고객
K123김탁구96××××-×××××××Gold2000P492
L243이승룡97××××-×××××××Vip3000K123
C524최무선93××××-×××××××Gold2000K123
P492박하얀95××××-×××××××Silver1000L243
주문
주문번호주문고객주문제품수량단가주문일자
1K123우동1020002023 - 01 - 01
2C524라면510002023 - 01 - 02
3P492만두730002023 - 01 - 03
1고객 릴레이션에서 고객ID, 주민등록번호, (고객ID, 고객이름)의 쌍, (고객이름, 주민등록번호)의 쌍은 슈퍼 키가 될 수 있다.
2고객 릴레이션에서 추천고객 속성은 자신의 고객ID 속성을 참조하는 외래 키로 정의가 가능하며, NULL 값을 가질 수 있다.
3주문 릴레이션의 주문고객 속성을 고객 릴레이션의 고객ID에 대한 외래 키로 정의할 때, 주문고객의 값으로 ‘S254’를 가질 수 있다.
4고객 릴레이션에서 고객ID, 주민등록번호는 후보 키가 될 수 있으나, (고객ID, 고객이름)의 쌍은 후보 키가 될 수 없다.
정답 및 해설

옳지 않은 것은 주문고객 값으로 'S254'를 가질 수 있다는 설명이다.

외래 키 값은 참조하는 릴레이션의 기본 키 값 중 하나이거나 NULL이어야 하는데(참조 무결성), 고객 릴레이션에는 고객ID가 S254인 튜플이 없다.

  • 고객ID, 주민등록번호는 각각 유일하므로 이를 포함한 (고객ID, 고객이름), (고객이름, 주민등록번호)도 모두 슈퍼 키가 된다.
  • 추천고객은 같은 릴레이션의 고객ID를 참조하는 자기 참조 외래 키로 정의할 수 있고, 추천인이 없으면 NULL을 가질 수 있다.
  • 고객ID와 주민등록번호는 최소성을 만족하는 후보 키이지만, (고객ID, 고객이름)은 고객ID만으로도 유일하므로 최소성을 만족하지 못해 후보 키가 아니다.
문제 5
다음 릴레이션 R과 S에 대한 관계대수식의 결과로 옳지 않은 것은? (단, 기호 ⋈N\bowtie_N은 자연조인을 의미하고, 릴레이션에서 A, B, C, D는 속성 이름이다)
R
ABC
a1b1c1
a2b2c2
a3b3c3
a4b4c5
S
BCD
b1c1d1
b3c2d2
b3c3d3
b5c5d5
1σB=′b3′(S)\sigma_{B='b3'}(S)
BCD
b3c2d2
b3c3d3
2πB,C(R⋈NS)\pi_{B,C}(R \bowtie_N S)
BC
b1c1
b3c3
3πA,B(σC=′c3′(R))\pi_{A,B}(\sigma_{C='c3'}(R))
AB
a3b3
4πA,C(σB=′b3′(R⋈NS))\pi_{A,C}(\sigma_{B='b3'}(R \bowtie_N S))
AC
a2c2
정답 및 해설

옳지 않은 것은 πA,C(σB=′b3′(R⋈NS))\pi_{A,C}(\sigma_{B='b3'}(R \bowtie_N S))의 결과를 (a2, c2)로 제시한 것이다.

자연조인은 공통 속성 B, C가 모두 같은 튜플끼리 결합하므로 조인 결과는 (a1, b1, c1, d1), (a3, b3, c3, d3) 두 튜플이다. 여기서 B='b3'을 선택하고 A, C를 추출하면 결과는 (a3, c3)이다.

  • S에서 B='b3'인 튜플은 (b3, c2, d2), (b3, c3, d3)로 제시된 결과가 맞다.
  • 조인 결과의 B, C를 추출하면 (b1, c1), (b3, c3)로 제시된 결과가 맞다.
  • R에서 C='c3'인 튜플은 (a3, b3, c3)뿐이므로 A, B 추출 결과 (a3, b3)가 맞다.
문제 6
크기가 100바이트인 고정길이 레코드 630개로 구성한 정렬된 순차 파일(sequential file)에서 이진검색으로 레코드를 검색할 때, 최대로 접근하는 블록의 수는? (단, 블록의 크기는 1,024바이트이며, 하나의 레코드가 두 개 이상의 블록에 나누어 저장되지 않는다고 가정한다)
16
210
364
4320
정답 및 해설

최대로 접근하는 블록 수는 6개이다.

블로킹 인수(블록당 레코드 수): ⌊1024/100⌋=10\lfloor 1024 / 100 \rfloor = 10
필요한 블록 수: ⌈630/10⌉=63\lceil 630 / 10 \rceil = 63

정렬된 63개 블록을 블록 단위로 이진검색하면 최대 접근 횟수는 ⌈log⁡2(63+1)⌉=6\lceil \log_2 (63 + 1) \rceil = 6이다.

레코드가 블록 경계를 넘지 않으므로 블록당 남는 24바이트는 쓰지 않는다. 블록이 아닌 레코드 단위로 계산하거나 순차 탐색으로 계산하면 더 큰 값이 나온다.

문제 7
다음과 같은 조건을 모두 만족하는 B+B^{+}-트리에 T, W, M, E, F, G, K, C, S, D, B, L 순으로 키 값이 입력되었을 때, 루트(root)에 있는 키 값을 바르게 나열한 것은? (단, [Xi][X_i]는 포인터 PiP_i가 가리키는 서브트리의 모든 키 값들을 의미하고, 트리는 비어 있는(empty) 상태이며, 기호 ≡\equiv는 동치를 의미한다)
○ 한 노드에 최대 네 개의 키 값을 가질 수 있다.
○ 내부노드의 구조는 <P1,K1,…,Pi,Ki,…,Kq−1,Pq>\lt P_1, K_1, \ldots, P_i, K_i, \ldots, K_{q-1}, P_q \gt이며, KiK_i는 ii번째 키, PiP_i는 ii번째 서브트리를 가리키는 포인터이다.
○ i≡1i \equiv 1이면 [X1]<K1[X_1] \lt K_1이고, i≡qi \equiv q이면 Kq−1≤[Xq]K_{q-1} \le [X_q]를 만족한다.
○ 1<i<q1 \lt i \lt q이면 Ki−1≤[Xi]<KiK_{i-1} \le [X_i] \lt K_i를 만족한다.
○ 노드 분할 시 상위 노드로 올리는 값은 분할대상 키 값들 중 중간 값을 올리는 것으로 가정한다.
1C, K
2D, L
3F, M
4G, S
정답 및 해설

루트에 있는 키 값은 F, M이다.

노드당 최대 4개 키이므로 다섯 번째 키가 들어오면 분할하고, 리프 분할 시 중간 값을 상위 노드로 복사해 올리며 중간 값은 오른쪽 리프에 남는다. T, W, M, E 삽입 → [E, M, T, W]. F 삽입 시 [E, F, M, T, W]가 넘쳐 중간 값 M을 올린다: [E, F] | [M, T, W], 루트 [M].

G, K 삽입 → 왼쪽 리프 [E, F, G, K]. C 삽입 시 [C, E, F, G, K]가 넘쳐 중간 값 F를 올린다: [C, E] | [F, G, K] | [M, T, W], 루트 [F, M].

이후 S → [M, S, T, W], D와 B → [B, C, D, E], L → [F, G, K, L]로 어느 리프도 넘치지 않아 루트는 [F, M]으로 유지된다.

문제 8
데이터베이스 관리시스템(DBMS)에 대한 설명으로 옳은 것만을 모두 고르면?
ㄱ. 일반적으로 데이터베이스는 저장된 데이터가 많아 구조가 복잡하고, 동시 공유를 지원하므로 장애 발생에 대응해서 데이터를 일관된 상태로 회복하는 과정이 복잡하다.
ㄴ. DBMS의 필수 기능으로 정의 기능, 조작 기능, 제어 기능, 처리 기능이 있다.
ㄷ. DBMS의 정의 기능은 데이터를 정확하고 안전하게 유지하기 위한 데이터 무결성 유지, 보안 유지, 병행 제어 기능을 포함한다.
ㄹ. DBMS는 데이터의 중복성과 응용프로그램에 대한 종속성 문제 해결에서 파일 시스템 대비 우수한 장점을 가지고 있다.
1ㄱ, ㄴ
2ㄱ, ㄹ
3ㄴ, ㄷ
4ㄷ, ㄹ
정답 및 해설

옳은 설명은 ㄱ, ㄹ이다.

DBMS의 필수 기능은 정의·조작·제어 세 가지이며, 무결성·보안·병행 제어는 제어 기능에 속한다.

  • ㄱ: 데이터 규모가 크고 동시 공유를 지원하므로 장애 시 일관된 상태로 회복하는 과정이 복잡하다는 설명은 옳다.
  • ㄴ: 필수 기능에 '처리 기능'을 포함한 설명은 틀렸다.
  • ㄷ: 무결성·보안·병행 제어를 정의 기능에 넣은 설명은 틀렸다 — 이는 제어 기능이다.
  • ㄹ: 파일 시스템의 데이터 중복과 응용프로그램 종속 문제를 해결한다는 설명은 옳다.
문제 9
음식점 관리 시스템에서 고객(customer), 주문(order), 음식(food)을 관리하기 위해 릴레이션을 다음과 같이 설계하였다. 이 릴레이션에 대하여, SQL문에 대응하는 관계대수식으로 옳지 않은 것은? (단, 밑줄 친 속성은 기본 키이고, 관계대수 연산자 중에서 ρ\rho는 재명명(rename) 연산자이며, I\mathfrak{I}은 집계함수(aggregate function) 연산을 정의하는 연산자이다)
customer(name, gender, phone, address, year)
order(cname, fname, price, date)
food(name, price, stock)
1SQL:
SELECT name
FROM food AS f
WHERE f.stock < 10 OR f.price > 20000;
관계대수:
πname(σf.stock<10 OR f.price>20000(ρf(food)))\pi_{name}(\sigma_{f.stock \lt 10\ OR\ f.price \gt 20000}(\rho_f(food)))
2SQL:
SELECT c.name, c.phone
FROM customer AS c, order AS o, food AS f
WHERE o.fname = f.name AND c.name = o.cname
AND f.price > 10000;
관계대수:
πc.name, c.phone(σo.fname=f.nameAND c.name=o.cname(ρc(customer)×ρo(order)×ρf(food)))\pi_{c.name,\ c.phone}\left(\sigma_{\substack{o.fname = f.name\\ AND\ c.name = o.cname}}\left(\begin{array}{l}\rho_c(customer)\\ \times \rho_o(order)\\ \times \rho_f(food)\end{array}\right)\right)
3SQL:
SELECT name, SUM(price) AS orderPrice
FROM customer, order
WHERE name = cname
GROUP BY name;
관계대수:
ρ(name,orderPrice)(nameISUM(price)(customer⋈name=cnameorder))\rho_{(name,orderPrice)}({}_{name}\mathfrak{I}_{SUM(price)}(customer \bowtie_{name = cname} order))
4SQL:
SELECT name, AVG(food.price) AS avgPrice
FROM food, order
GROUP BY name;
관계대수:
ρ(name,avgPrice)(nameIAVG(food.price)(food×order))\rho_{(name,avgPrice)}({}_{name}\mathfrak{I}_{AVG(food.price)}(food \times order))
정답 및 해설

옳지 않은 것은 가격이 10000을 넘는 음식을 주문한 고객의 이름·전화번호를 구하는 SQL에 대응시킨 관계대수식이다.

SQL의 WHERE 절에는 조인 조건 외에 f.price > 10000이 있는데, 관계대수식의 선택 조건에는 o.fname = f.name AND c.name = o.cname만 있어 가격 조건이 빠져 있다.

  • 재고 10 미만 또는 가격 20000 초과인 음식 이름 질의는 재명명 후 OR 조건 선택과 name 추출로 정확히 대응한다.
  • 고객별 주문 금액 합계 질의는 name = cname 조인 후 name으로 그룹화해 SUM(price)를 구하고 재명명하므로 대응한다.
  • 조인 조건이 없는 FROM food, order는 카티션 곱이므로, 곱 결과를 name으로 그룹화해 AVG(food.price)를 구하는 식과 대응한다.
문제 10
다음 ERD(entity-relationship diagram)에 대응하는 보고 테이블을 생성하고자 한다. 보고 테이블을 생성하는 SQL문의 (가)에 들어갈 내용으로 옳은 것은? (단, 밑줄 친 속성은 기본 키이고, 직원 개체(entity)는 테이블로 생성되어 있다고 가정한다)

CREATE TABLE 보고(
상급자_사번 CHAR(10),
하급자_사번 CHAR(10),
(가)
);

1PRIMARY KEY (상급자_사번, 하급자_사번),
FOREIGN KEY (상급자_사번) REFERENCES 직원(사번),
FOREIGN KEY (하급자_사번) REFERENCES 직원(사번)
2PRIMARY KEY (상급자_사번),
FOREIGN KEY (상급자_사번) REFERENCES 직원(사번),
FOREIGN KEY (하급자_사번) REFERENCES 직원(사번)
3PRIMARY KEY (상급자_사번, 하급자_사번),
FOREIGN KEY (상급자_사번, 하급자_사번)
REFERENCES 직원(사번)
4PRIMARY KEY (하급자_사번),
FOREIGN KEY (하급자_사번) REFERENCES 직원(사번)
정답 및 해설

직원 개체의 M:N 순환 관계 보고는 두 사번을 묶은 복합 기본 키와 각 사번별로 따로 선언한 외래 키 2개로 테이블을 만든다.

M:N 관계는 한 상급자가 여러 하급자를, 한 하급자가 여러 상급자를 가질 수 있으므로 어느 한쪽 사번만으로는 행을 식별할 수 없다. 또 상급자_사번과 하급자_사번은 각각 직원(사번)이라는 단일 속성을 참조하므로 외래 키도 하나씩 따로 정의해야 한다.

  • 기본 키를 상급자_사번 하나로 두면 한 상급자가 여러 하급자를 둘 때 키가 중복되어 M:N 관계를 표현할 수 없다.
  • 두 속성을 묶어 직원(사번)을 참조하는 외래 키는 2개 열을 1개 열에 대응시키는 것이라 참조 대상의 키 구성과 맞지 않는다.
  • 기본 키를 하급자_사번 하나로 두고 외래 키도 하급자만 두면 1:N 관계가 되고 상급자 쪽 참조 무결성도 빠진다.
문제 11
다음은 사원 정보를 나타내기 위한 EMP 테이블이다. EMP 테이블에서 상사가 없는 사원의 SUPERID가 NULL 처리될 때, 아래 SQL문 실행 결과의 차수(degree)와 카디널리티(cardinality)는? (단, 밑줄 친 속성은 기본 키이다)
EMP
IDNAMESALARYSUPERID
1001Kim8000NULL
1002Lee50001003
1003Park7000NULL
1004Cho30001001
SELECT *
FROM EMP S RIGHT OUTER JOIN EMP E
ON S.ID = E.SUPERID;
차수  카디널리티
14  2
24  8
38  2
48  4
정답 및 해설

결과의 차수는 8, 카디널리티는 4이다.

SELECT *로 S와 E의 속성 4개씩이 모두 나오므로 차수는 4 + 4 = 8이다. 오른쪽 외부 조인은 오른쪽 E의 모든 튜플을 보존한다.

ID가 기본 키라 E의 각 튜플과 일치하는 S 튜플은 최대 하나이다. Lee는 Park과, Cho는 Kim과 결합하고, SUPERID가 NULL인 Kim, Park은 S 쪽 속성을 NULL로 채워 남으므로 4행이다.

  • 차수를 4로 본 것은 SELECT *가 양쪽 속성을 모두 출력함을 놓친 것이다.
  • 카디널리티를 2로 본 것은 일치하는 행만 남기는 내부 조인 결과이다.
문제 12
다음 고객 테이블에 대한 SQL 구문에서 실행 결과가 다른 하나는? (단, 밑줄 친 속성은 기본 키이다)
고객
고객ID고객이름등급적립금
k123김상중Gold3000
l018이영우Vip4000
c389최영Gold3000
p273박구연Silver2000
h328홍연수Vip5000
j451정영상Silver3000
y524윤성진Gold2000
1SELECT 고객이름
FROM 고객
WHERE 적립금 = (SELECT MAX(적립금) FROM 고객);
2SELECT 고객이름
FROM 고객
WHERE 적립금 >= ALL (SELECT 적립금 FROM 고객);
3SELECT 고객이름
FROM 고객
WHERE 적립금 > ANY (SELECT 적립금 FROM 고객
WHERE 등급 = ‘Vip’);
4SELECT 고객이름
FROM 고객
WHERE 적립금 IN (SELECT 적립금 FROM 고객
WHERE 등급 = ‘Vip’);
정답 및 해설

결과가 다른 것은 IN 부속질의를 쓴 구문이다.

Vip 등급의 적립금은 4000, 5000이므로 IN 조건은 적립금이 4000 또는 5000인 이영우, 홍연수를 반환한다.

  • MAX(적립금)과 같은지 비교: 최댓값 5000인 홍연수만 반환한다.
  • >= ALL: 모든 적립금 이상인 값은 5000뿐이므로 홍연수만 반환한다.
  • Vip 적립금에 대한 > ANY: 4000, 5000 중 하나라도 초과하면 되므로 4000 초과인 홍연수만 반환한다.
문제 13
데이터베이스 시스템의 데이터 언어에 대한 설명으로 옳지 않은 것은?
1데이터 언어는 사용자가 데이터베이스를 구축하고, 이에 접근하기 위해 데이터베이스 관리시스템과 통신하는 수단이다.
2비절차적 데이터 조작어는 사용자가 어떤 데이터를 원하고 해당 데이터를 얻으려면 어떻게 처리해야 하는지에 대한 절차를 구체적으로 명세한다.
3데이터 제어어는 데이터베이스에 저장된 데이터를 여러 사용자가 무결성과 일관성을 유지하며 문제없이 공유할 수 있도록, 내부적으로 필요한 규칙이나 기법을 정의하는 데 사용하는 데이터 언어이다.
4데이터 정의어는 새로운 데이터베이스를 구축하기 위해 스키마를 정의하거나 기존 스키마의 정의를 삭제하거나 수정하기 위해 사용하는 데이터 언어이다.
정답 및 해설

옳지 않은 것은 비절차적 데이터 조작어가 처리 절차까지 명세한다는 설명이다.

비절차적 DML은 어떤(what) 데이터를 원하는지만 명세하고 처리 방법은 DBMS에 맡긴다. 원하는 데이터와 처리 방법(how)을 모두 명세하는 것은 절차적 DML이다.

  • 데이터 언어가 사용자와 DBMS 간의 통신 수단이라는 설명은 옳다.
  • 데이터 제어어가 무결성·일관성을 유지하며 공유하도록 규칙·기법을 정의한다는 설명은 옳다.
  • 데이터 정의어가 스키마를 정의·삭제·수정한다는 설명은 옳다.
문제 14
다음은 분산 데이터베이스에 대한 설명이다. (가), (나)에 들어갈 내용을 바르게 연결한 것은?
○ ( 가 )는 각 조각 스키마의 인스턴스가 물리적으로 저장되어야 하는 지역을 정의한다.
○ ( 나 )는 분산 데이터베이스에 저장할 모든 데이터 구조와 제약조건을 정의하는 것으로서, 관계 데이터 모델의 관점에서 보면 데이터베이스 안에 존재하는 모든 릴레이션 스키마의 집합이다.
(가)  (나)
1지역 스키마  전역 개념 스키마
2단편화 스키마  지역 스키마
3단편화 스키마  할당 스키마
4할당 스키마  전역 개념 스키마
정답 및 해설

(가)는 할당 스키마, (나)는 전역 개념 스키마이다.

분산 데이터베이스 스키마는 전역 개념 스키마 → 단편화 스키마 → 할당 스키마 → 지역 스키마로 구성되며, 조각을 어느 지역(사이트)에 저장할지 정하는 것이 할당 스키마이다.

  • 단편화 스키마는 전역 릴레이션을 어떻게 조각(fragment)으로 나눌지를 정의하므로 (가)에 해당하지 않는다.
  • 지역 스키마는 각 사이트의 지역 DBMS가 관리하는 스키마로, 모든 릴레이션 스키마의 집합인 (나)가 아니다.
문제 15
NoSQL에 대한 설명으로 옳지 않은 것은?
1NoSQL 시스템으로 Ingres 등이 있다.
2가용성을 높이기 위해 일치성을 약하게 보장하는 궁극적 일치성(eventual consistency)을 제공하는 경우가 많다.
3미리 정의된 스키마를 사용하지 않아도 된다.
4다수의 컴퓨터에 데이터를 분산, 저장, 처리하는 것이 가능한 데이터베이스 시스템이다.
정답 및 해설

옳지 않은 것은 Ingres를 NoSQL 시스템으로 든 설명이다.

Ingres는 SQL을 지원하는 대표적인 관계형 DBMS이며, NoSQL의 예로는 MongoDB, Cassandra, Redis, HBase 등이 있다.

  • 가용성을 위해 궁극적 일치성을 제공하는 경우가 많다는 설명은 옳다.
  • 미리 정의된 스키마 없이 데이터를 저장할 수 있다는 설명은 옳다.
  • 여러 컴퓨터에 데이터를 분산 저장·처리한다는 설명은 옳다.
문제 16
다음 두 종류의 로그 및 데이터베이스 기록 내용에서 (가), (나), (다), (라) 시점에 장애가 발생하였을 때, 수행되어야 할 회복 연산이 바르게 연결된 것은? (단, A, C, E, G의 초깃값은 100이며, B, D, F, H의 초깃값은 50이고, (가) ~ (라)의 각 시점에 발생하는 장애는 상호 영향을 주지 않는다)
시간로그데이터베이스
<T1, start>
<T1, A, 100, 90>
<T1, B, 50, 60>A = 90
(가)→B = 60
<T1, commit>
<T2, start>
<T2, C, 100, 90>
<T2, D, 50, 60>C = 90
(나)→D = 60
<T2, commit>
시간로그데이터베이스
<T3, start>
<T3, E, 90>
(다)→<T3, F, 60>
<T3, commit>
E = 90, F = 60
<T4, start>
<T4, G, 90>
(라)→<T4, H, 60>
<T4, commit>
G = 90, H = 60
(가)  (나)  (다)  (라)
1회복작업 없음  Redo(T1)  Undo(T3)  Redo(T3), Undo(T4)
2회복작업 없음  Redo(T1)  회복작업 없음  Redo(T3)
3Undo(T1)  Redo(T1), Undo(T2)  회복작업 없음  Redo(T3)
4Undo(T1)  Redo(T1), Undo(T2)  Undo(T3)  Redo(T3), Undo(T4)
정답 및 해설

바른 연결은 (가) Undo(T1)\mathrm{Undo}(T_1), (나) Redo(T1),Undo(T2)\mathrm{Redo}(T_1), \mathrm{Undo}(T_2), (다) 회복작업 없음, (라) Redo(T3)\mathrm{Redo}(T_3)이다.

첫 번째 로그는 이전 값과 새 값을 모두 기록하므로 즉시 갱신 기법이다. 커밋 전에도 DB에 반영되므로 커밋된 트랜잭션은 Redo, 커밋되지 않은 트랜잭션은 Undo한다.

  • (가): T1T_1이 커밋 전이고 A = 90이 이미 기록되었으므로 Undo가 필요하다.
  • (나): T1T_1은 커밋되었으므로 Redo, T2T_2는 커밋 전에 C가 기록되었으므로 Undo한다.

두 번째 로그는 새 값만 기록하므로 지연 갱신 기법이다. 커밋 후에야 DB에 반영되므로 Undo는 필요 없고 커밋된 트랜잭션만 Redo한다.

  • (다): T3T_3은 커밋 전이라 DB에 반영된 것이 없으므로 회복작업이 없다.
  • (라): 커밋된 T3T_3은 Redo하고, 커밋 전인 T4T_4는 DB에 반영된 것이 없으므로 로그만 무시한다.
문제 17
관계형 데이터베이스의 상태에 대한 제약조건으로 옳지 않은 것은?
1참조되는 릴레이션에 새로운 튜플이 삽입되는 과정에서 참조무결성 제약조건의 위반이 발생하면, 제약조건 위반의 원인이 되는 연산을 거부하도록 해야 한다.
2릴레이션 스키마 R의 임의의 두 튜플 t1t_1, t2t_2에 대하여 t1[SK]≠t2[SK]t_1[SK] \neq t_2[SK]이 성립한다면, 속성 집합 SKSK를 R의 슈퍼 키라고 한다.
3참조하는 릴레이션 R1의 외래 키는 참조되는 릴레이션 R2의 기본 키와 동일한 도메인이어야 하며, 기본 키 값 중 하나이거나 NULL 값이어야 한다.
4데이터베이스는 개체무결성과 참조무결성 제약조건을 만족해야 한다.
정답 및 해설

옳지 않은 것은 참조되는 릴레이션에 튜플을 삽입할 때 참조무결성 위반이 발생한다고 본 설명이다.

피참조 릴레이션에 새 튜플을 삽입해도 기존 외래 키 값은 깨지지 않는다. 삽입 시 위반은 참조하는 릴레이션에 존재하지 않는 키 값을 외래 키로 넣을 때 발생한다.

  • 임의의 두 튜플에서 SK 값이 서로 다르면 SK가 슈퍼 키라는 설명은 유일성 정의로 옳다.
  • 외래 키는 참조되는 기본 키와 같은 도메인이고 그 값 중 하나이거나 NULL이어야 한다는 설명은 옳다.
  • 데이터베이스가 개체무결성과 참조무결성을 만족해야 한다는 설명은 옳다.
문제 18
SQL의 부속질의(subquery)에 대한 설명으로 옳지 않은 것은?
1부속질의는 하나의 SQL문 안에 다른 SQL문이 중첩된 질의를 말한다.
2연산자 ANY는 부속질의가 단일 행을 반환할 때만 적용할 수 있다.
3스칼라(scalar) 부속질의는 결과 값을 단일한 스칼라 값으로 반환한다.
4인라인 뷰(inline view)는 FROM 절에서 사용되는 부속질의이다.
정답 및 해설

옳지 않은 것은 ANY가 단일 행 부속질의에만 적용된다는 설명이다.

ANY·ALL·IN은 부속질의가 여러 행을 반환할 때 쓰는 다중 행 비교 연산자이다. 단일 행 반환에만 쓰는 것은 =, <, > 같은 단일 행 비교 연산자이다.

  • 부속질의가 SQL문 안에 중첩된 질의라는 설명은 옳다.
  • 스칼라 부속질의가 단일 값을 반환한다는 설명은 옳다.
  • 인라인 뷰가 FROM 절의 부속질의라는 설명은 옳다.
문제 19
다음 릴레이션 R1R_1, R2R_2, R3R_3에 대한 관계대수식의 의미가 다른 것은?
R1(A,B,C)R2(D,E)R3(F,G,H)R_1(A, B, C) \quad R_2(D, E) \quad R_3(F, G, H)
1σB=5(R1⋈A=DR2)⋈E=FR3\sigma_{B=5}(R_1 \bowtie_{A=D} R_2) \bowtie_{E=F} R_3
2σB=5 AND A=D(πA,B(R1)×R2)⋈E=FR3\sigma_{B=5\ AND\ A=D}(\pi_{A,B}(R_1) \times R_2) \bowtie_{E=F} R_3
3σA=D(σB=5(R1)×R2)⋈E=FR3\sigma_{A=D}(\sigma_{B=5}(R_1) \times R_2) \bowtie_{E=F} R_3
4σB=5((R2⋈E=FR3)⋈A=DR1)\sigma_{B=5}((R_2 \bowtie_{E=F} R_3) \bowtie_{A=D} R_1)
정답 및 해설

의미가 다른 것은 πA,B(R1)\pi_{A,B}(R_1)을 곱하는 식이다.

이 식은 조인 전에 속성 C를 제거하므로 결과 릴레이션에 C가 없다. 나머지 식은 모두 R1,R2,R3R_1, R_2, R_3의 전체 속성을 유지하는 동등 변환이다.

  • 조인 결과에 B=5를 선택하는 식이 기준 질의이다.
  • B=5 선택을 먼저 수행한 뒤 곱과 A=D 선택으로 조인하는 식은 선택 연산을 아래로 내린 동등 변환이다.
  • R2R_2와 R3R_3을 먼저 조인한 뒤 R1R_1과 조인하고 B=5를 선택하는 식은 조인의 교환·결합 법칙에 의한 동등 변환이다.
문제 20
두 개의 트랜잭션 T1과 T2를 수행하는 과정에서 다음과 같은 현상이 발생하였다. 이 현상이 발생하는 격리 수준은?
○ T1에서 1번 상품의 가격을 조회하였을 때 10만 원으로 나타났고, T2에서 1번 상품의 가격을 15만 원으로 변경하고 커밋(commit)을 수행하였다. 그 후에 T1에서 1번 상품의 가격을 조회하니 15만 원으로 나타났다.
○ T2에서 1번 상품의 가격을 10만 원에서 15만 원으로 변경하다가 커밋을 수행하지 않고 롤백(rollback)하는 과정에서 T1에서 1번 상품의 가격을 조회하였으나 허용되지 않았다.
○ T1에서 등록된 상품을 조회하였는데 0건이 조회되었고, T2에서 1번 상품을 등록하고 커밋을 수행하였다. T1에서 등록된 상품을 다시 조회하였더니 1개 상품이 나타났다.
1Read Committed
2Serializable
3Repeatable Read
4Read Uncommitted
정답 및 해설

이 현상이 나타나는 격리 수준은 Read Committed이다.

커밋된 변경 때문에 같은 데이터를 다시 읽을 때 값이 달라지는 반복 불가능 읽기와 새 튜플이 나타나는 팬텀 읽기는 발생하지만, 커밋되지 않은 값 읽기(dirty read)는 허용되지 않았다.

  • Serializable은 반복 불가능 읽기와 팬텀 읽기를 모두 막는다.
  • Repeatable Read는 같은 데이터를 다시 읽을 때 값이 바뀌는 현상을 막는다.
  • Read Uncommitted는 롤백 중인 미커밋 값을 읽는 것도 허용한다.
문제 21
릴레이션 R과 S에 대한 조인 연산의 구현 방법을 설명한 것으로 옳지 않은 것은?
1중첩 루프 조인(nested loop join): R과 S의 레코드들에 대한 별도의 인덱스나 정렬을 필요로 하지 않는다.
2단일 루프 조인(single loop join): R과 S 중 하나의 릴레이션에 있는 레코드들은 조인 속성 값에 따라 물리적으로 정렬되어 있어야 한다.
3정렬-합병 조인(sort-merge join): R과 S의 레코드들이 조인 속성 값에 따라 물리적으로 정렬되어 있을 때 가장 효율적이다.
4해시 조인(hash join): R과 S의 레코드들은 조인 속성을 해시 키로 하고 동일한 해시 함수를 이용해 해시되어 있어야 한다.
정답 및 해설

옳지 않은 것은 단일 루프 조인에 물리적 정렬이 필요하다는 설명이다.

단일 루프 조인은 한 릴레이션의 조인 속성에 인덱스(또는 해시 키)가 있을 때, 다른 릴레이션의 각 레코드로 그 접근 구조를 탐색해 일치 레코드를 찾는 방법이다. 필요한 것은 정렬이 아니라 접근 구조이다.

  • 중첩 루프 조인은 모든 레코드 쌍을 비교하므로 별도의 인덱스나 정렬이 필요 없다.
  • 정렬-합병 조인은 두 릴레이션이 조인 속성으로 정렬되어 있을 때 한 번씩만 훑으면 되어 가장 효율적이다.
  • 해시 조인은 두 릴레이션을 같은 해시 함수로 조인 속성에 따라 분할해 같은 버킷끼리 비교한다.
문제 22
회복 기법과 그 특징이 바르게 짝 지어진 것은?
1지연 갱신에 기반을 둔 기법: UNDO/REDO
2즉시 갱신에 기반을 둔 기법: NO-UNDO/NO-REDO
3그림자 페이지 기법: UNDO/NO-REDO
4ARIES 기법: 분석 → REDO → UNDO
정답 및 해설

바르게 짝 지어진 것은 ARIES 기법의 분석 → REDO → UNDO 단계이다.

ARIES는 분석 단계에서 갱신된 페이지와 활성 트랜잭션을 파악하고, REDO로 장애 시점 상태를 재현한 뒤, UNDO로 미완료 트랜잭션을 취소한다.

  • 지연 갱신은 커밋 전 DB에 반영하지 않으므로 NO-UNDO/REDO이다.
  • 즉시 갱신은 커밋 전에도 반영하므로 UNDO/REDO(또는 UNDO/NO-REDO)이다.
  • 그림자 페이지 기법은 그림자 페이지 테이블로 이전 상태를 보존하므로 NO-UNDO/NO-REDO이다.
문제 23
데이터베이스 보안에 대한 설명으로 옳지 않은 것은?
1권한 관리를 이용하여 접근 권한이 없는 사용자의 접근으로부터 데이터베이스를 보호한다.
2사용자가 소유한 데이터베이스 객체에 대한 권한 부여는 반드시 데이터 관리자에 의해 수행되어야 한다.
3접근이 허락된 사용자가 실수 등의 이유로 데이터 무결성을 위반하지 않도록 정의된 제약조건 등을 이용하여 통제할 수 있어야 한다.
4보안을 위한 데이터 단위는 데이터베이스 전체로부터 특정 테이블의 특정 행과 열 수준까지 정의될 수 있다.
정답 및 해설

옳지 않은 것은 소유 객체의 권한 부여를 반드시 데이터 관리자가 해야 한다는 설명이다.

객체를 생성한 소유자는 그 객체에 대한 모든 권한을 가지며 GRANT로 다른 사용자에게 직접 권한을 부여할 수 있다.

  • 권한 관리로 권한 없는 사용자의 접근을 막는다는 설명은 옳다.
  • 허가된 사용자의 실수에 의한 무결성 위반을 제약조건으로 통제한다는 설명은 옳다.
  • 보안 단위를 데이터베이스 전체부터 특정 행·열까지 정할 수 있다는 설명은 옳다.
문제 24
데이터 웨어하우스(data warehouse)에 대한 설명으로 옳지 않은 것은?
1데이터 웨어하우스는 의사결정에 필요한 주제에 따라 데이터를 관리하는 주제 지향성(subject orientation) 특징을 가진다.
2데이터 웨어하우스는 데이터가 일관된 형식으로 정의되는 통합성(integration) 특징을 가진다.
3데이터 웨어하우스는 데이터에 접근하는 현재 시간을 기준으로 최신의 값을 유지하는 시불변성(time invariance) 특징을 가진다.
4데이터 웨어하우스는 읽기 전용의 데이터를 유지하는 비휘발성(nonvolatilization) 특징을 가진다.
정답 및 해설

옳지 않은 것은 데이터 웨어하우스가 최신 값만 유지한다는 설명이다.

데이터 웨어하우스는 시간에 따른 변화를 이력으로 보관하는 시변성(time variant)을 가진다. 현재 시점의 최신 값만 유지하는 것은 운영 데이터베이스의 특성이다.

  • 의사결정 주제별로 데이터를 관리하는 주제 지향성은 옳다.
  • 여러 원천 데이터를 일관된 형식으로 정의하는 통합성은 옳다.
  • 적재 후 갱신하지 않고 읽기 위주로 유지하는 비휘발성은 옳다.
문제 25
데이터베이스에서 동시성 제어(concurrency control)를 위한 로킹(locking) 기법과 이를 이용하여 제어할 수 있는 상황이 바르게 짝 지어진 것은?
ㄱ. 직렬가능(serializable) 스케줄 보장
ㄴ. 교착상태(deadlock) 방지
ㄷ. 복구가능한(recoverable) 스케줄 보장
12PL(two-phase locking) - ㄷ
2엄격한(strict) 2PL - ㄱ, ㄷ
3엄중한(rigorous) 2PL - ㄱ, ㄴ
4엄중한(rigorous) 2PL - ㄱ, ㄴ, ㄷ
정답 및 해설

바르게 짝 지어진 것은 엄격한(strict) 2PL과 ㄱ, ㄷ이다.

2PL 계열은 모두 직렬가능성을 보장하지만 교착상태는 막지 못한다. 엄격한 2PL은 배타 로크를 커밋·철회 시까지 유지해 미커밋 값을 읽지 못하게 하므로 복구가능 스케줄도 보장한다.

  • 기본 2PL은 ㄱ은 보장하지만 커밋 전 로크 해제로 미커밋 값을 읽을 수 있어 ㄷ은 보장하지 못한다.
  • 엄중한 2PL과 ㄱ, ㄴ의 짝은 틀렸다 — 로크 대기 순환이 생길 수 있어 교착상태 방지는 보장하지 않는다.
  • 엄중한 2PL과 ㄱ, ㄴ, ㄷ의 짝도 ㄴ을 포함하므로 틀렸다(ㄱ, ㄷ만 보장).