본문으로 건너뛰기

단원 11~15 섞어 풀기

정보처리기사 목차권한과 트랜잭션문제 25개

11~15단원(33레슨)을 섞은 25문제입니다. 1~20번은 필기 꼴로, 시험의 한 과목과 같은 20문제입니다. 30분 안에 풀어 보고, 8문제보다 적게 맞혔다면 틀린 문제의 레슨부터 다시 보세요. 문제의 SQL은 아래 네 표로 Oracle에서 돌린다고 보고 풀어 보세요. 21~25번은 실기 꼴이라 종이에 답을 끝까지 쓴 뒤 펼칩니다. 띄어쓰기만 다르면 같은 답입니다. 하루 이상 지나 다시 풀면 더 오래 남습니다. 다만 두 번째 점수에는 문제를 기억해서 오른 몫이 섞여 있습니다.

학과

학과코드학과명건물
CS컴퓨터공학관
EE전자공학관
BA경영경영관

학생

학번이름학년학과코드
101김민수3CS
102이서준2CS
103김지민2CS
104박서연1EE
105최민준3EE
106정하윤3EE
107강도현1NULL

과목

과목코드과목명학점선수과목
DS자료구조3NULL
OS운영체제3DS
NW네트워크2OS

수강

학번과목코드점수
101DS85
101OS75
101NW80
102DS70
102OS60
103DS65
103NW55
104OS75
104NW95
105DS100
105NW90
107NW50

문제 1

학생 표를 만들 때 학년에 1부터 4까지만 들어오게 정해 두었습니다. (가) 이렇게 담을 틀과 지킬 규칙을 미리 정하는 일과 (나) 뒤에 학년 7을 넣으려는 문장을 막는 일은 각각 DBMS의 어느 필수 기능인지 고르세요.

  • ① (가) 정의 기능 · (나) 제어 기능
  • ② (가) 정의 기능 · (나) 정의 기능
  • ③ (가) 제어 기능 · (나) 정의 기능
  • ④ (가) 제어 기능 · (나) 제어 기능
정답

① — 데이터의 틀과 지킬 규칙을 정해 두는 쪽이 정의 기능이고, 정해 둔 규칙을 어기는 일을 막아 데이터를 지켜 주는 쪽이 제어 기능입니다. 무결성·보안·병행 제어가 모두 제어 기능에 듭니다.

  • ② (나)도 틀을 정하는 일로 봤습니다. 틀은 이미 정해져 있고, (나)는 그 틀을 지키게 막는 일입니다.
  • ③ 두 자리를 거꾸로 봤습니다. 규칙을 정해 두는 때와 그 규칙이 지켜지게 하는 때가 다릅니다.
  • ④ (가)도 지켜 주는 일로 봤습니다. CHECK 조건을 적는 것은 표의 틀을 정하는 일입니다.

다시 볼 레슨: 데이터베이스와 DBMS

문제 2

한 데이터베이스에 스키마가 몇 벌씩 있는지로 알맞은 것을 고르세요.

  • ① 외부 하나 · 개념 하나 · 내부 여럿
  • ② 외부 하나 · 개념 여럿 · 내부 하나
  • ③ 외부 여럿 · 개념 하나 · 내부 하나
  • ④ 외부 여럿 · 개념 여럿 · 내부 여럿
정답

③ — 외부 스키마는 보는 쪽마다 따로 있어 여럿이고, 조직 전체를 한 벌로 모은 개념 스키마와 저장 쪽에서 본 내부 스키마는 데이터베이스마다 하나입니다.

  • ① 외부와 내부를 거꾸로 봤습니다. 사용자마다 다른 쪽은 외부 스키마이고, 저장 구조는 한 벌입니다.
  • ② 개념 스키마가 업무마다 따로 있다고 봤습니다. 업무를 모두 모아 한 벌로 적은 것이 개념 스키마입니다.
  • ④ 세 층 모두 여럿이라고 봤습니다. 층을 나눈 까닭은 관점을 가르는 것이고, 전체 구조와 저장 구조는 각각 한 벌이어야 사상이 성립합니다.

다시 볼 레슨: 스키마 3단계와 데이터 독립성

문제 3

데이터베이스 설계 단계를 차례대로 늘어놓은 것을 고르세요.

  • ① 요구 조건 분석 → 개념적 설계 → 논리적 설계 → 물리적 설계 → 구현
  • ② 요구 조건 분석 → 논리적 설계 → 개념적 설계 → 물리적 설계 → 구현
  • ③ 요구 조건 분석 → 개념적 설계 → 물리적 설계 → 논리적 설계 → 구현
  • ④ 개념적 설계 → 요구 조건 분석 → 논리적 설계 → 구현 → 물리적 설계
정답

① — 사용자에게 들은 것을 정리한 뒤, DBMS와 상관없는 그림을 그리고(개념), 표와 열을 정하고(논리), 저장과 찾는 길을 정하고(물리), 실제로 만듭니다(구현).

  • ② 개념적 설계와 논리적 설계를 바꿔 봤습니다. 업무를 그림으로 먼저 나타내고, 그것을 표 구조로 옮깁니다.
  • ③ 논리적 설계와 물리적 설계를 바꿔 봤습니다. 표와 열이 정해져야 저장 방식과 인덱스를 정할 수 있습니다.
  • ④ 요구를 듣기 전에 그림을 그린다고 봤고, 구현을 물리적 설계 앞에 두었습니다. 설계가 모두 끝난 뒤에 만듭니다.

다시 볼 레슨: 데이터베이스 설계 단계

문제 4

E-R 다이어그램의 기호와 뜻을 짝지었습니다. 짝이 잘못된 것을 고르세요.

  • ① 사각형 — 개체
  • ② 마름모 — 속성
  • ③ 이중 타원 — 다중값 속성
  • ④ 이중 사각형 — 약한 개체
정답

② — 마름모는 개체와 개체를 맞대어 잇는 관계의 기호입니다. 속성은 타원으로 그리고, 그 가운데 하나하나를 가려내는 키 속성은 이름에 밑줄을 긋습니다.

  • ① 맞습니다. 업무에서 따로 관리하는 대상을 사각형으로 그립니다.
  • ③ 맞습니다. 한 대상에 값이 여럿일 수 있는 속성을 이중 타원으로 그립니다.
  • ④ 맞습니다. 자기 속성만으로 가려지지 않아 다른 개체에 기대는 개체를 이중 사각형으로 그립니다.

다시 볼 레슨: 개체-관계(E-R) 모델

문제 5

학생 표(학번, 이름, 학년, 학과코드)에서 이름은 겹칠 수 있습니다. 다음 가운데 슈퍼키이지만 후보키는 아닌 것을 고르세요.

  • ① (학번)
  • ② (이름, 학과코드)
  • ③ (학번, 학년)
  • ④ (학년, 학과코드)
정답

③ — 학번이 들어 있어 행마다 다르므로 유일성은 있습니다. 그런데 학년을 빼도 학번만으로 구별되어 최소성이 없습니다. 유일성만 갖춘 키가 슈퍼키입니다.

  • ① 유일성과 최소성을 모두 갖춰 후보키입니다. 후보키는 슈퍼키이기도 하지만, 문제는 후보키가 아닌 것을 묻습니다.
  • ② 이름이 겹칠 수 있어 같은 학과의 동명이인이 두 행에 같은 값으로 나옵니다. 유일성이 없어 슈퍼키부터 아닙니다.
  • ④ 학년과 학과코드가 같은 학생이 여럿입니다. 3학년 전자에 105·106이 있어 유일성이 없습니다.

다시 볼 레슨: 키의 종류

문제 6

관계대수와 관계해석에 대한 설명으로 알맞은 것을 고르세요.

  • ① 관계대수는 비절차적 언어이고 관계해석은 절차적 언어다
  • ② 관계해석은 연산의 순서를 적어야 해서 ÷ 같은 기호를 쓴다
  • ③ 관계해석은 변수가 튜플인 꼴 하나뿐이다
  • ④ 둘은 나타낼 수 있는 질의의 범위가 같다
정답

④ — 관계대수로 적을 수 있는 질의는 관계해석으로도 적을 수 있고, 그 반대도 됩니다. 적는 방식만 다릅니다.

  • ① 두 언어를 거꾸로 봤습니다. 연산의 순서를 적는 관계대수가 절차적, 결과의 조건을 적는 관계해석이 비절차적입니다.
  • ② 관계해석이 연산 기호를 쓴다고 봤습니다. ÷는 관계대수의 연산 기호이고, 관계해석은 같은 물음을 ∀로 적습니다.
  • ③ 한 꼴만 있다고 봤습니다. 변수가 튜플이면 튜플 관계해석, 속성 값이면 도메인 관계해석입니다.

다시 볼 레슨: 관계해석 · 관계대수: 셀렉트·프로젝트·조인·디비전

문제 7

표 둘을 봅니다. 값은 모두 원자값입니다.

  • (가) 출고(출고번호, 창고코드, 창고주소, 수량) — 기본키는 출고번호이고, 창고주소는 창고코드로 정해집니다.
  • (나) 배차(노선번호, 차량번호, 기사이름, 운행일) — 기본키는 '노선번호 + 차량번호'이고, 기사이름은 차량번호로 정해집니다.

각 표에 있는 함수 종속의 이름과 그것을 없애는 정규화 단계로 알맞은 것을 고르세요.

  • ① (가) 이행 함수 종속·3정규형 · (나) 부분 함수 종속·2정규형
  • ② (가) 이행 함수 종속·2정규형 · (나) 부분 함수 종속·3정규형
  • ③ (가) 부분 함수 종속·2정규형 · (나) 이행 함수 종속·3정규형
  • ④ (가) 부분 함수 종속·3정규형 · (나) 이행 함수 종속·2정규형
정답

① — (가)의 기본키는 한 속성이라 '일부'가 없습니다. 창고주소는 키가 아닌 창고코드를 거쳐 딸려 오므로 이행 함수 종속이고, 3정규형에서 없앱니다. (나)의 기사이름은 기본키의 일부인 차량번호만으로 정해지므로 부분 함수 종속이고, 2정규형에서 없앱니다.

  • ② 종속은 맞게 짚고 단계를 바꿔 봤습니다. 부분은 2정규형, 이행은 3정규형에서 없앱니다.
  • ③ 두 표의 종속을 바꿔 봤습니다. 결정자가 기본키의 일부인지, 키가 아닌 속성인지로 가립니다.
  • ④ 두 가지를 모두 바꿔 봤습니다. 기본키가 한 속성인 표에는 부분 함수 종속이 생기지 않습니다.

다시 볼 레슨: 함수 종속 · 1·2·3정규형

문제 8

급식(급식일, 메뉴코드, 수량, 메뉴명) 표의 기본키는 '급식일 + 메뉴코드'이고, 메뉴명은 메뉴코드로 정해집니다. 이 표를 2정규형으로 만드는 방법으로 알맞은 것을 고르세요.

  • ① 급식(급식일, 메뉴코드, 수량, 메뉴명)을 그대로 두고 메뉴명 열을 지운다
  • ② 급식(급식일, 메뉴코드, 수량)과 메뉴(메뉴코드, 메뉴명)로 나눈다
  • ③ 급식(급식일, 메뉴코드, 메뉴명)과 수량(급식일, 수량)으로 나눈다
  • ④ 급식일(급식일, 수량)과 메뉴(메뉴코드, 메뉴명)로 나눈다
정답

② — 부분 함수 종속을 없애려면 결정자인 메뉴코드와 그것이 정하는 메뉴명을 새 표로 떼어 냅니다. 남은 표에는 기본키 전체로 정해지는 수량만 둡니다. 두 표를 메뉴코드로 다시 이으면 처음 정보가 그대로 돌아옵니다.

  • ① 열을 지워 종속을 없앴습니다. 정규화는 정보를 잃지 않게 나누는 일이라, 메뉴명은 다른 표에 남겨야 합니다.
  • ③ 떼어 낼 쪽을 거꾸로 봤습니다. 메뉴명이 메뉴코드에 딸려 있으니 그 둘을 함께 떼어 내고, 기본키 전체로 정해지는 수량은 남깁니다.
  • ④ 기본키의 두 속성을 서로 다른 표로 갈랐습니다. 수량은 급식일과 메뉴코드를 함께 알아야 정해져, 이렇게 나누면 어느 급식의 수량인지 알 수 없습니다.

다시 볼 레슨: 1·2·3정규형 · 함수 종속

문제 9

정규형과 그 단계에서 없애는 것을 짝지었습니다. 짝이 옳지 않은 것을 고르세요.

  • ① 2정규형 — 부분 함수 종속
  • ② 3정규형 — 이행 함수 종속
  • ③ BCNF — 후보키가 아닌 결정자
  • ④ 4정규형 — 조인 종속
정답

④ — 4정규형이 없애는 것은 다치 종속입니다. 조인 종속은 표 둘로는 되살아나지 않고 셋 이상으로 나눠야 되살아나는 관계이고, 5정규형에서 없앱니다.

  • ① 맞습니다. 기본키의 일부가 정하는 속성을 떼어 내는 단계입니다.
  • ② 맞습니다. 키가 아닌 속성을 거쳐 딸려 오는 속성을 떼어 내는 단계입니다.
  • ③ 맞습니다. 값을 정하는 쪽이 모두 후보키여야 한다고 요구하는 단계입니다.

다시 볼 레슨: BCNF·4NF·5NF · 1·2·3정규형

문제 10

(가) 반정규화를 하는 때와 (나) 반정규화로 잃는 것으로 알맞은 것을 고르세요.

  • ① (가) 정규화를 하기 전 · (나) 조인이 늘어난다
  • ② (가) 정규화를 하기 전 · (나) 갱신 이상의 위험이 생긴다
  • ③ (가) 정규화를 마친 뒤 · (나) 조인이 늘어난다
  • ④ (가) 정규화를 마친 뒤 · (나) 갱신 이상의 위험이 생긴다
정답

④ — 반정규화는 정규화를 모두 마친 뒤, 읽기가 잦아 느린 곳에만 일부러 중복을 허용하는 일입니다. 같은 값이 여러 곳에 남아 한 곳만 고치면 값이 어긋나는 위험이 생깁니다.

  • ① 두 자리를 모두 거꾸로 봤습니다. 중복을 없앤 뒤에 되돌리는 일이고, 조인은 줄어듭니다.
  • ② 하는 때를 거꾸로 봤습니다. 먼저 정규화로 중복을 없애고, 필요한 곳만 되돌립니다.
  • ③ 잃는 것을 거꾸로 봤습니다. 조인을 줄이려고 하는 일이라 조인은 늘어나지 않습니다.

다시 볼 레슨: 반정규화

문제 11

SQL 명령어와 그 종류를 짝지었습니다. 짝이 잘못된 것을 고르세요.

  • ① CREATE — DDL
  • ② GRANT — DCL
  • ③ SELECT — DDL
  • ④ UPDATE — DML
정답

③ — SELECT는 표의 틀을 바꾸지 않고 행을 꺼내 오는 문장이라 DML입니다. 종류는 무엇을 다루는지로 가립니다 — 틀은 DDL, 행은 DML, 권한은 DCL입니다.

  • ① 맞습니다. 표의 틀을 새로 만드는 문장이라 DDL입니다.
  • ② 맞습니다. 사용자에게 권한을 주는 문장이라 DCL입니다.
  • ④ 맞습니다. 표 안의 행 값을 바꾸는 문장이라 DML입니다.

다시 볼 레슨: SQL의 분류

문제 12

다음 쿼리의 결과로 알맞은 것을 고르세요.

SELECT 학번,
  이름
FROM 학생
WHERE 이름 LIKE '김%'
  AND 학년 <= 2
ORDER BY 학번;
  • ① 김지민
  • ② 김민수·김지민
  • ③ 이서준·김지민·박서연·강도현
  • ④ 김민수·이서준·김지민·박서연·강도현
정답

① — '김%'은 '김'으로 시작하는 이름을 모두 맞혀 김민수·김지민이 남습니다. 뒤 조건이 3학년 김민수를 걸러 김지민 한 행입니다. AND로 이은 두 조건은 모두 만족해야 합니다.

  • ② 학년 조건을 빼고 이름만 봤습니다. 김민수는 3학년이라 학년 <= 2에 맞지 않습니다.
  • ③ 이름 조건을 빼고 학년만 봤습니다. 2학년 이하는 네 명이고, 그 가운데 '김'으로 시작하는 이름은 김지민뿐입니다.
  • ④ 두 조건을 OR로 읽었습니다. 둘 가운데 하나만 맞아도 남긴 꼴입니다.
학번이름
103김지민

다시 볼 레슨: SELECT 기본: 조건과 정렬

문제 13

학생 106이 자료구조(DS)를 신청했지만 점수는 아직 적지 않았습니다. 다음 쿼리의 두 값으로 알맞은 것을 고르세요.

INSERT INTO 수강
  (학번, 과목코드)
VALUES (106, 'DS');
SELECT COUNT(*) AS 인원,
  COUNT(점수) AS 점수있음
FROM 수강
WHERE 과목코드 = 'DS';
  • ① 인원 4 · 점수있음 4
  • ② 인원 5 · 점수있음 4
  • ③ 인원 4 · 점수있음 5
  • ④ 인원 5 · 점수있음 5
정답

② — COUNT(*)는 조건에 맞는 모든 행을 세어, 106의 행까지 다섯입니다. COUNT(열)은 그 열이 NULL인 행을 빼고 세므로 점수가 비어 있는 106을 빼 넷입니다.

  • ① 넣은 행이 세어지지 않는다고 봤습니다. 점수가 비어 있어도 행은 수강 표에 들어가 COUNT(*)에 셉니다.
  • ③ 두 함수를 거꾸로 봤습니다. NULL을 빼고 세는 쪽은 괄호에 열 이름을 적은 COUNT(점수)입니다.
  • ④ 둘 다 모든 행을 센다고 봤습니다. COUNT(점수)는 점수가 있는 행만 셉니다.
인원점수있음
54

다시 볼 레슨: 그룹과 집계: GROUP BY·HAVING

문제 14

다음 쿼리에서 RNK가 1인 행은 몇 행인지 고르세요.

SELECT 학번,
  과목코드,
  점수,
  RANK() OVER (
    PARTITION BY 학번
    ORDER BY 점수 DESC
  ) AS RNK
FROM 수강
ORDER BY 학번, RNK;
  • ① 1행
  • ② 4행
  • ③ 6행
  • ④ 12행
정답

③ — PARTITION BY 학번은 학생마다 순위를 따로 매깁니다. 수강 기록이 있는 학생은 101·102·103·104·105·107 여섯이고, 학생마다 가장 높은 점수의 행이 하나씩 1을 받습니다. 한 학생 안에 동점이 없어 1이 둘인 학생도 없습니다.

  • ① 표 전체에 순위를 한 번만 매긴다고 봤습니다. 그러면 가장 높은 100점 한 행만 1입니다.
  • ② 칸을 나누는 열을 과목코드로 봤습니다. 과목마다 1등을 뽑으면 운영체제의 75점 동점 둘까지 넣어 4행입니다.
  • ④ 칸마다 1부터 다시 세니 모든 행이 1을 받는다고 봤습니다. 칸 안에서도 점수 차례로 순위가 붙습니다.
학번과목코드점수RNK
101DS851
101NW802
101OS753
102DS701
102OS602
103DS651
103NW552
104NW951
104OS752
105DS1001
105NW902
107NW501

다시 볼 레슨: 윈도우 함수

문제 15

다음 쿼리의 결과로 알맞은 것을 고르세요.

SELECT 과목명
FROM 과목
WHERE 학점 > ANY (
  SELECT 학점
  FROM 과목
  WHERE 선수과목 IS NOT NULL
)
ORDER BY 과목명;
  • ① 운영체제
  • ② 운영체제·자료구조
  • ③ 네트워크·운영체제·자료구조
  • ④ 한 행도 나오지 않는다
정답

② — 서브쿼리는 선수과목이 적힌 운영체제·네트워크의 학점 3·2를 돌려줍니다. > ANY는 그 가운데 하나라도 넘으면 참이라 가장 작은 2보다 크면 됩니다. 학점이 3인 운영체제와 자료구조가 남습니다.

  • ① 서브쿼리가 고른 두 과목 안에서만 찾았습니다. 서브쿼리가 돌려주는 것은 과목이 아니라 견줄 학점 값입니다.
  • ③ ANY를 '서브쿼리에 행이 있으면 참'으로 봤습니다. 그것은 EXISTS의 동작이고, 네트워크의 학점 2는 2보다 크지 않아 빠집니다.
  • ④ ANY를 ALL로 봤습니다. > ALL이면 가장 큰 3보다 커야 해서 한 행도 남지 않습니다.
과목명
운영체제
자료구조

다시 볼 레슨: 서브쿼리

문제 16

다음 가운데 두 SELECT 문을 UNION으로 이을 수 있는 짝을 고르세요.

  • ① SELECT 학번 FROM 수강과 SELECT 과목코드 FROM 과목
  • ② SELECT 학번, 점수 FROM 수강⁠과 SELECT 학번 FROM 수강
  • ③ SELECT 학과코드 FROM 학생과 SELECT 학과코드 FROM 학과
  • ④ SELECT 이름 FROM 학생과 SELECT 학년 FROM 학생
정답

③ — 집합 연산자로 이으려면 두 SELECT 문의 열 개수가 같고, 같은 자리의 열끼리 형도 맞아야 합니다. 두 학과코드는 열이 하나씩이고 둘 다 글자라 이을 수 있습니다.

  • ① 열은 하나씩이지만 학번은 수, 과목코드는 글자입니다. 형이 달라 ORA-01790 오류가 납니다.
  • ② 열 개수가 2와 1로 다릅니다. 개수부터 같아야 해서 ORA-01789 오류가 납니다.
  • ④ 열은 하나씩이지만 이름은 글자, 학년은 수입니다. ①과 같은 까닭으로 이을 수 없습니다.

다시 볼 레슨: 집합 연산자

문제 17

학생 표를 만들 때 학번에 기본키를 걸었습니다. 인덱스를 만드는 문장은 한 번도 쓰지 않았는데 USER_INDEXES에 줄이 하나 있습니다. 그 까닭으로 알맞은 것을 고르세요.

  • ① 기본키를 걸면 그 열에 고유 인덱스가 저절로 생긴다
  • ② 표를 만들면 표마다 인덱스가 하나씩 저절로 생긴다
  • ③ NOT NULL 제약 조건이 걸린 열에 인덱스가 저절로 생긴다
  • ④ 외래키를 걸면 그 열에 인덱스가 저절로 생긴다
정답

① — 기본키 값은 겹치면 안 되므로, DBMS가 그 열에 고유 인덱스를 만들어 겹침을 빠르게 검사합니다. 학생 표에서는 학생_PK가 그 인덱스입니다.

  • ② 표마다 하나씩 생긴다고 봤습니다. 기본키나 UNIQUE 제약 조건이 없는 표에는 인덱스가 생기지 않습니다.
  • ③ NOT NULL이 인덱스를 만든다고 봤습니다. 비어 있는지만 보는 제약 조건이라 값을 정렬해 둘 필요가 없습니다.
  • ④ 외래키에도 저절로 생긴다고 봤습니다. 학생 표의 학과코드에는 외래키가 걸려 있지만 인덱스는 생기지 않아, 줄은 하나뿐입니다.

다시 볼 레슨: 인덱스

문제 18

다른 사용자가 가진 표 가운데 내가 권한을 받아 쓸 수 있는 표의 목록을 보려 합니다. 조회할 데이터 사전 뷰로 알맞은 것을 고르세요.

  • ① USER_TABLES
  • ② ALL_TABLES
  • ③ DBA_TABLES
  • ④ USER_TAB_COLUMNS
정답

② — 뷰 이름의 앞머리가 누구의 것을 보여 주는지 가립니다. ALL_은 내가 권한을 받아 쓸 수 있는 객체를 보여 줍니다.

  • ① USER_는 내가 가진 객체만 보여 줍니다. 남의 표는 권한을 받았어도 여기에 나오지 않습니다.
  • ③ DBA_는 데이터베이스의 모든 객체를 보여 주지만 관리자 권한이 있어야 합니다. 권한이 없으면 없는 표라는 오류가 납니다.
  • ④ 표가 아니라 열을 담은 뷰입니다. 표 목록은 _TABLES 쪽에서 봅니다.

다시 볼 레슨: 시스템 카탈로그와 데이터 사전

문제 19

어떤 행에 공유 락(S)이 걸려 있습니다. 다른 트랜잭션이 그 행에 할 수 있는 일로 알맞은 것을 고르세요.

  • ① 읽기와 쓰기를 모두 할 수 있다
  • ② 읽기만 할 수 있다
  • ③ 쓰기만 할 수 있다
  • ④ 읽기도 쓰기도 할 수 없다
정답

② — 공유 락은 여러 트랜잭션이 함께 걸 수 있는 락이라, 다른 트랜잭션도 그 행을 읽습니다. 다만 값을 고치려면 혼자만 걸 수 있는 배타 락이 필요해 쓰기는 기다려야 합니다.

  • ① 쓰기까지 된다고 봤습니다. 읽는 중에 값이 바뀌면 읽은 값을 믿을 수 없어 쓰기를 막습니다.
  • ③ 두 가지를 거꾸로 봤습니다. 공유 락이 막는 쪽은 쓰기입니다.
  • ④ 배타 락의 동작으로 봤습니다. 읽기까지 막는 쪽은 하나만 걸 수 있는 배타 락입니다.

다시 볼 레슨: 병행 제어

문제 20

디스크가 망가져 저장된 데이터를 읽을 수 없게 되었습니다. 이 장애의 이름(가)과 회복하는 방법(나)으로 알맞은 것을 고르세요.

  • ① (가) 시스템 장애 · (나) 로그를 읽어 REDO와 UNDO를 한다
  • ② (가) 시스템 장애 · (나) 백업으로 되살린 뒤 로그로 REDO한다
  • ③ (가) 미디어 장애 · (나) 로그를 읽어 REDO와 UNDO를 한다
  • ④ (가) 미디어 장애 · (나) 백업으로 되살린 뒤 로그로 REDO한다
정답

④ — 디스크가 망가져 데이터를 읽을 수 없는 장애가 미디어 장애입니다. 로그만으로는 되살릴 바탕이 없어, 백업으로 데이터베이스를 되살린 뒤 로그의 바꾼 뒤 값을 다시 반영합니다.

  • ① 두 자리를 모두 거꾸로 봤습니다. 디스크가 망가진 쪽은 미디어 장애이고, 백업이 필요합니다.
  • ② 이름을 시스템 장애로 봤습니다. 시스템 장애는 메모리 내용만 날아가고 디스크는 남은 때입니다.
  • ③ 이름은 맞게 짚고 방법을 시스템 장애 쪽으로 봤습니다. 디스크가 망가지면 읽을 로그와 데이터가 그 디스크에 있어 백업부터 되살립니다.

다시 볼 레슨: 회복

문제 21 (실기)

학과 표는 열이 셋, 행이 셋이고 학생 표는 열이 넷, 행이 일곱입니다. 다음 (가)·(나)에 맞는 이름을 영문으로 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.

  • (가) 학과 표는 3, 학생 표는 4인 값을 가리키는 이름입니다.
  • (나) 학과 표는 3, 학생 표는 7인 값을 가리키는 이름입니다.
정답

받는 답: (가) Degree · (나) Cardinality

(가)는 속성의 수, (나)는 튜플의 수입니다. 학과 표는 두 값이 모두 3이지만 학생 표에서 4와 7로 갈립니다.

  • 같은 이름의 다른 꼴: (가) 차수·디그리 · (나) 카디널리티·기수 — 한글로 쓴 이름입니다. 문제가 영문으로 물었습니다.
  • 틀리는 꼴 Attribute — (가)에: 속성 하나를 가리키는 이름입니다. 묻는 것은 속성이 몇인지를 가리키는 이름입니다.
  • 틀리는 꼴 Tuple — (나)에: 행 하나를 가리키는 이름입니다. 행이 몇인지를 가리키는 이름은 Cardinality입니다.

다시 볼 레슨: 관계 데이터 모델: 릴레이션

문제 22 (실기)

다음 (가)·(나)에 맞는 이름을 한글로 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.

  • (가) 주문 표 하나에 고객 정보와 상품 정보가 섞여 같은 값이 여러 줄에 되풀이됐습니다. 주제마다 표를 나눠 같은 사실이 한 곳에만 적히게 했습니다.
  • (나) 그렇게 나눈 표 넷을 화면을 열 때마다 이어 읽는 것이 느려, 주문 표에 상품명을 일부러 한 번 더 적어 두었습니다.
정답

받는 답: (가) 정규화 · (나) 반정규화

(가)의 실마리는 '주제마다 나눠 같은 사실을 한 곳에만 둔다', (나)는 '읽기가 느려 일부러 같은 값을 두 곳에 둔다'입니다.

  • 같은 이름의 다른 꼴: (가) Normalization · (나) Denormalization — 영문 원어입니다. 문제가 한글로 물었습니다.
  • 틀리는 꼴 정규형 — (가)에: 표가 지켜야 할 조건의 단계를 가리키는 이름입니다. 나누는 일 자체의 이름은 정규화입니다.
  • 틀리는 꼴 정규화 — (나)에: 중복을 없애려고 나누는 쪽입니다. (나)는 그 결과를 일부러 되돌렸습니다.

다시 볼 레슨: 1·2·3정규형 · 반정규화

문제 23 (실기)

트랜잭션이 락을 얻기만 하는 단계와 풀기만 하는 단계로 나누어, 한번 풀기 시작하면 더 얻지 않게 정한 규약이 있습니다. 이 규약의 이름을 영문 약어로 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.

정답

받는 답: 2PL

실마리는 '얻는 단계와 푸는 단계가 갈리고, 풀기 시작하면 더 얻지 못한다'입니다. 이 규약을 지키면 차례로 실행한 것과 같은 결과가 보장됩니다.

  • 같은 이름의 다른 꼴: 2단계 로킹 · Two-Phase Locking — 한글 이름과 영문 원어입니다. 문제가 영문 약어로 물었습니다.
  • 틀리는 꼴 확장 단계: 락을 얻기만 하는 앞 단계의 이름입니다. 묻는 것은 두 단계로 나눈 규약 전체의 이름입니다.
  • 틀리는 꼴 타임스탬프 순서: 시작 시각의 순서로 접근을 받아 주는 기법이라 락을 쓰지 않습니다.

다시 볼 레슨: 병행 제어

문제 24 (실기)

다음 쿼리의 결과를 위에서부터 차례로 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.

SELECT 학년,
  COUNT(*) AS 인원
FROM 학생
WHERE 학과코드 = 'EE'
GROUP BY ROLLUP(학년)
ORDER BY 학년;
정답

받는 답: 1학년 1 · 3학년 2 · 학년이 NULL인 총계 줄 3, 모두 3행

전자(EE) 학생은 1학년 104, 3학년 105·106입니다. ROLLUP은 학년별 묶음에 총계 묶음을 하나 더해 셉니다. 총계 줄은 묶지 않은 학년 칸이 NULL로 보이고, Oracle은 오름차순 정렬에서 NULL을 맨 뒤에 둡니다.

  • 틀리는 꼴 1학년 1 · 3학년 2로 끝낸 2행: ROLLUP이 총계 줄을 만들지 않는다고 봤습니다. 묶는 열이 하나여도 총계 줄은 붙습니다.
  • 틀리는 꼴 2학년 0 줄을 넣은 4행: 전자에 없는 학년도 0으로 나온다고 봤습니다. 묶을 행이 없는 학년은 묶음부터 생기지 않습니다.
  • 틀리는 꼴 총계 줄을 맨 위에 둔 꼴: 총계 줄의 학년 칸이 NULL이라 오름차순에서는 맨 뒤입니다.
학년인원
11
32
NULL3

다시 볼 레슨: 그룹 함수: ROLLUP·CUBE

문제 25 (실기)

다음 쿼리의 결과를 위에서부터 차례로 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.

SELECT S.이름,
  COUNT(*) AS 과목수,
  SUM(C.학점) AS 학점합
FROM 학생 S
  JOIN 수강 E
  ON E.학번 = S.학번
  JOIN 과목 C
  ON C.과목코드 = E.과목코드
WHERE E.점수 >= 70
GROUP BY S.이름
HAVING SUM(C.학점) >= 5
ORDER BY S.이름;
정답

받는 답: 김민수 3과목 8학점 · 박서연 2과목 5학점 · 최민준 2과목 5학점, 모두 3행

70점 이상인 수강만 남기면 김민수(101)는 DS·OS·NW 셋, 이서준(102)은 DS 하나, 박서연(104)은 OS·NW 둘, 최민준(105)은 DS·NW 둘입니다. 학점은 DS 3·OS 3·NW 2라 학점합이 김민수 8, 이서준 3, 박서연 5, 최민준 5이고, HAVING이 5보다 적은 이서준을 걸러 냅니다.

  • 틀리는 꼴 김민수·김지민·박서연·이서준·최민준 다섯 줄: WHERE의 점수 조건을 건너뛰고 수강 12행을 모두 셌습니다. 그러면 김지민 5, 이서준 6이 되어 다섯 사람이 남습니다.
  • 틀리는 꼴 김민수 한 줄: >=를 >로 읽었습니다. 박서연과 최민준의 학점합은 정확히 5라 남습니다.
  • 틀리는 꼴 이서준 1과목 3학점을 더한 네 줄: HAVING 조건을 보지 않고 묶음을 모두 냈습니다.
이름과목수학점합
김민수38
박서연25
최민준25

다시 볼 레슨: 조인 · 그룹과 집계: GROUP BY·HAVING

끝까지 내려오면 저절로 표시됩니다. 이 기기에만 저장합니다.

정보처리기사 목차로