[7급 국가직 데이터베이스론] 26년 1회차 기출문제 정답·해설 페이지
- CHECK는 조건식으로 속성이 가질 수 있는 값의 범위를 제한하므로 옳다.
- DEFAULT는 삽입 시 값이 생략되면 지정한 기본값을 넣으므로 옳다.
- NOT NULL은 외래키 속성에도 지정할 수 있으며, 이 경우 참조 관계가 반드시 존재하도록 강제하므로 옳다.
- 외래키가 참조할 수 없는 값을 가질 수 없다는 것은 참조 무결성의 정의 그대로이므로 옳다.
- 개체 무결성은 기본키를 구성하는 어떤 속성도 NULL을 가질 수 없다는 규칙이므로 옳다.
- 기본키는 유일성을 가지므로 중복 값이 허용되지 않는다.
- 속성 기반 접근 제어(ABAC)는 사용자·자원·환경의 속성 조합으로 접근 허용 여부를 판단한다.
- 임의 접근 제어(DAC)는 데이터 소유자가 GRANT·REVOKE로 권한을 임의로 부여·회수한다.
- 역할 기반 접근 제어(RBAC)는 직무(역할)에 권한을 묶고 사용자에게 역할을 할당한다.
- 뷰는 일반 테이블과 같이 SELECT로 검색할 수 있다.
- 뷰 정의에 WITH CHECK OPTION을 두면 뷰 조건을 벗어나는 삽입·갱신을 막을 수 있다.
- DISTINCT로 중복이 제거된 뷰는 원본 투플과 일대일로 대응하지 않아 변경이 제한된다.
- 수직 단편화는 속성(열) 집합으로 나누는 방식인데, 각 사이트에 세 속성이 모두 저장되므로 해당하지 않는다.
- 혼합 단편화는 수평·수직 단편화를 함께 적용하는 것으로, 여기서는 수평 분할만 있었다.
- 자연 조인으로 복원하는 것은 수직 단편화의 경우이며, 수평 단편은 합집합으로 복원한다.
- C1, C2만 남기고 (C2, P2)를 결과로 둔 표는 C3의 (음료, P1)을 빠뜨렸고, 라면·음료를 모두 갖지 않은 조합을 남겼다.
- 음료 3투플과 C1의 2투플을 세 속성 그대로 둔 표는 결과에서 제수 속성을 빼지 않았다.
- 라면·과자 투플을 세 속성 그대로 둔 표는 제수와 짝을 이루지 않는 투플을 남긴 것으로, 나눗셈의 결과 속성 구성부터 맞지 않는다.
- (가)의 덧셈은 의 지역 변수에서만 일어나므로 버퍼의 X는 아직 1,000이다.
- (나)에서 이 1,500을 기록해 버퍼 값이 1,500이 된다.
- (다)에서 가 자신이 읽은 1,000으로 계산한 800을 덮어써 의 갱신이 사라지는 갱신 손실이 발생한다.
- 군집 분석을 A, 분류 분석을 B로 연결한 조합은 기준 유무를 뒤바꾼 것이다.
- 분류 분석을 C, 연관 분석을 A로 연결한 조합은 범주 판정과 규칙 탐색을 혼동한 것이다.
- 군집 분석을 C, 연관 분석을 B로 연결한 조합은 그룹화와 규칙 탐색을 뒤바꾼 것이다.
- 외부/개념 사상은 외부 스키마의 데이터가 개념 스키마의 어느 부분에 대응하는지 정의하므로 옳다.
- 개념/내부 사상은 개념 스키마의 데이터가 내부 스키마를 통해 물리적으로 저장되는 대응을 정의하므로 옳다.
- 내부 스키마가 바뀌면 개념/내부 사상만 고치면 되어 개념 스키마는 그대로이므로 옳다.
- RAID 레벨 2는 해밍 코드 오류 정정 정보를 별도 디스크에 기록하므로 쓰기마다 추가 기록이 필요하다.
- RAID 레벨 3은 바이트 단위 스트라이핑에 전용 패리티 디스크를 두어 모든 쓰기가 패리티 디스크를 거친다.
- RAID 레벨 6은 두 종류의 패리티를 분산 저장해 쓰기마다 패리티 두 개를 갱신하므로 쓰기 성능이 불리하다.
- 서버에서 여러 SQL을 한꺼번에 처리하므로 클라이언트와 서버 사이의 데이터 전송량이 줄어든다.
- SQL/PSM 외에 C, Java 같은 외부 언어로도 작성할 수 있다.
- 대화형 SQL에서 CALL 문으로 호출할 수 있다.
- ㄱ: 일관성(C)은 모든 복사본이 같은 값을 가져야 함을 뜻하므로 옳다.
- ㄴ: 네트워크 고장 중에도 동작을 지속한다는 것은 분할 허용성의 정의이므로 옳지 않다.
- ㄷ: NoSQL은 확장성·가용성을 위해 엄격한 ACID 대신 BASE(최종 일관성)를 따르는 경우가 많으므로 옳다.
- ㄱ: 인덱스 중첩 루프 조인은 외부 투플마다 내부 인덱스를 한 번씩 탐색하므로, 투플 수가 적은 쪽을 외부로 두면 탐색 횟수가 줄어 유리하다.
- ㄴ: 정렬 기준을 기본키로 한정했으므로 옳지 않다.
- ㄷ: 블록 중첩 루프 조인 비용은 처럼 외부 릴레이션의 블록 수가 따로 더해지므로, 어느 쪽을 외부 릴레이션으로 두는지에 따라 달라진다.
- ㄱ: 파일은 한 가지 순서로만 물리 정렬되므로 기본 인덱스는 최대 하나, 보조 인덱스는 여러 개 둘 수 있다.
- ㄴ: 보조 인덱스는 정렬되지 않은 속성에 정의하는 인덱스이므로 정렬이 필요하다는 설명은 옳지 않다.
- ㄷ: 다단계 인덱스는 삽입·삭제 시 여러 단계를 고쳐야 하므로 갱신이 빠르다고 할 수 없다.
- ㄹ: 클러스터링 인덱스는 탐색키 순으로 물리 정렬된 레코드에 만들므로 연속 블록을 읽는 범위 검색에 유리하다.
- B < 10 선택 후 조인: 관계대수 결과는 a1의 2투플인데, SQL은 INNER JOIN에 ON 조건이 없어 조인 조건이 적용되지 않는다.
- 자연 조인: 관계대수 결과는 (A, B, C) 4투플이지만, SQL은 R, S의 카티션 곱에서 R.A만 걸러 R의 세 투플과 S의 모든 C가 조합된 12투플이 된다.
- 왼쪽 외부 조인: 관계대수 결과에는 (a4, 20, NULL)이 포함되지만, SQL은 동등 조인이라 a4가 빠진다.
- 지속성은 커밋된 결과의 영구 보존이고, TRIGGER는 이벤트 발생 시 자동 실행되는 동작이라 미완료 트랜잭션 복구 수단이 아니다.
- 고립성은 동시 트랜잭션 간 간섭 방지인데 동시 트랜잭션이 없고, SAVEPOINT는 부분 철회 지점을 표시할 뿐이다.
- 일관성은 무결성 제약 유지이며, START TRANSACTION은 트랜잭션 시작 명령이라 이미 수행된 작업을 취소하지 못한다.
- ㄱ: 의 write(y)를 빼도 의 write(y) 뒤 의 read(y)로 가 남아 사이클이 유지되므로 충돌 직렬가능하지 않다.
- ㄴ: 의 read(z)를 빼면 이 사라져 의 비순환 그래프가 되므로 충돌 직렬가능하다.
- ㄷ: 마지막 연산이 write(z)가 되면 는 없어지지만, 의 read(z)·write(z) 뒤 의 write(z)로 가 생기고 도 남아 사이클이 된다.
- EMP_VIEW1은 WITH CHECK OPTION이 있어 SALARY가 1000을 넘지 않는 (1004, 강감찬, 1000) 삽입은 거부된다.
- A2는 EMP_VIEW1에 SELECT 권한이 있으므로 SUM(SALARY) 같은 집계 조회를 실행할 수 있다.
- EMP_VIEW1은 단일 테이블 기반의 갱신 가능 뷰이고 A1이 뷰의 소유자이므로, SELECT·INSERT처럼 DELETE 권한도 A2에게 부여할 수 있다.
- 그룹별 COUNT(*)를 PAD 상품 수와 비교하는 질의는 상품 종류가 아닌 주문 건수를 세므로, 같은 PAD를 여러 번 주문하고 다른 PAD는 주문하지 않은 고객도 선택될 수 있다.
- HAVING COUNT(*) >= 1 질의는 PAD 상품을 하나라도 주문한 고객을 모두 출력한다.
- NOT IN 이중 질의는 PAD가 아닌 상품을 주문한 적이 없는 고객(주문이 없는 고객 포함)을 찾을 뿐, 모든 PAD의 주문 여부를 확인하지 않는다.
- BEFORE UPDATE에서 old.재직상태를 검사하는 트리거는 이미 퇴사예정이던 사원이 수정될 때 동작하고, 새로 퇴사예정으로 바뀌는 경우는 잡지 못한다.
- BEFORE INSERT 트리거는 값 변경이 아닌 신규 삽입에 반응하며, 삽입에는 변경 전 투플(old)이 없다.
- AFTER INSERT 트리거도 신규 삽입에만 반응하므로 재직상태 변경을 감지하지 못하고, old 투플도 존재하지 않는다.
- C6의 주문 삽입은 ‘고객’에 C6이 없어 참조 무결성 위반으로 실패한다.
- C3 삭제는 ON DELETE CASCADE로 C3을 추천고객으로 둔 C4까지 삭제되어야 하는데, C4를 주문 O3가 참조하고 있어 실패한다.
- C4를 C7로 바꾸는 갱신은 주문 O3가 C4를 참조하고 ON UPDATE 동작이 없어 거부된다.
- 후보키가 넷이므로 (A, B)가 유일한 후보키라는 설명은 옳지 않다.
- E → B를 빼도 (A, B) → C, C → D, D → E로 전체를 결정하고 A나 B 단독으로는 결정하지 못하므로 (A, B)는 여전히 후보키이다.
- C → D에서 결정자 C가 슈퍼키가 아니므로 BCNF를 충족하지 않는다.
- 디스크 공유 구조는 디스크만 공유하고 각 노드가 자체 주기억장치를 가지므로 옳다.
- 디스크 공유 구조는 모든 디스크 접근이 상호연결망을 거치므로 연결망 병목이 생길 수 있다.
- 비공유 구조는 노드마다 프로세서·메모리·디스크를 따로 두고 네트워크로 연결하므로 옳다.
- 기존 학생과 같은 지도교수번호를 가진 학생 삽입: 1:1 관계에 따른 유일성 제약을 위반하므로 삽입할 수 없다.
- 학생의 지도교수번호에 없는 번호를 가진 교수 삽입: 교수는 부분 참여이고 교수 테이블은 다른 테이블을 참조하지 않으므로 삽입할 수 있다.
- 지도교수번호가 NULL인 학생 삽입: 학생의 전체 참여 제약을 위반하므로 삽입할 수 없다.
- 지도 학생이 없는 교수의 교수번호 출력: 교수 테이블의 교수번호에서 학생 테이블의 지도교수번호를 차집합(NOT IN, 외부조인)으로 빼면 구할 수 있다.
- 루트 5·8 아래 리프가 2·3 / 5·7 / 8·9인 높이 2 트리: 9 삽입 시 생긴 리프 2와 3이 합쳐질 일이 없고 루트 분할도 반영되지 않았다.
- 루트 7 아래 내부 노드가 3·5와 8인 트리: 루트로 올라가는 키는 넘친 내부 노드 3·5·8의 가운데 키 5여야 하며, 7은 마지막 삽입으로 분할을 일으키지 않는다.
- 오른쪽 내부 노드가 7·8이고 리프 5와 7이 분리된 트리: 7 삽입 시 리프 5에 빈자리가 있으므로 분할이 일어나지 않는다.
테이블을 생성하는 SQL 문에서 속성의 제약조건에 대한 설명으로 옳지 않은 것은?
CHECK는 속성이 가질 수 있는 값의 범위를 제한한다.
DEFAULT는 데이터 삽입 시 속성의 값이 명시되지 않을 때 지정된 값이 입력되도록 제한한다.
NOT NULL은 속성에 NULL이 입력되지 않도록 제한하며, FOREIGN KEY로 지정된 속성에 대해서도 지정할 수 있다.
UNIQUE는 기본키를 대체하는 속성에 부여하는 것으로, 중복되지 않고 NULL이 아닌 값이 입력되도록 제한한다.
UNIQUE는 중복만 막을 뿐 NULL은 허용하므로, NULL이 아닌 값이 입력되도록 제한한다는 설명이 옳지 않다.
중복 불가와 NULL 불가를 함께 강제하는 것은 PRIMARY KEY이며, 대체키에 NULL까지 막으려면 UNIQUE와 NOT NULL을 함께 지정해야 한다.
오류나 개정된 내용이 보이면 알려주세요
데이터베이스의 무결성 제약조건에 대한 설명으로 옳지 않은 것은?
참조 무결성 제약조건은 외래키는 참조할 수 없는 값을 가질 수 없다는 규칙이다.
개체 무결성 제약조건은 기본키를 구성하는 모든 속성은 NULL 값을 가지면 안 된다는 규칙이다.
기본키로 정의된 속성은 중복된 값이 허용되지 않는다.
참조 무결성 제약조건에서 자식 릴레이션은 부모 릴레이션의 제약을 받지 않는다.
참조 무결성에서 자식(참조하는) 릴레이션의 외래키 값은 부모 릴레이션의 기본키 값이나 NULL만 가질 수 있으므로, 부모의 제약을 받지 않는다는 설명이 옳지 않다.
자식 릴레이션에 투플을 삽입하거나 외래키를 수정할 때마다 부모 릴레이션에 해당 값이 있는지 검사받는다.
오류나 개정된 내용이 보이면 알려주세요
데이터와 사용자를 다양한 보안등급(1급 비밀, 2급 비밀, 3급 비밀, 일반 정보 등)으로 분류하고 해당 조직에 적합한 보안 정책을 적용하여 다단계 보안을 시행하기 위해 사용하는 접근 제어 기법은?
속성 기반 접근 제어(ABAC)
임의 접근 제어(DAC)
강제 접근 제어(MAC)
역할 기반 접근 제어(RBAC)
데이터와 사용자에게 보안등급을 부여하고 등급 비교로 접근을 통제하는 다단계 보안은 강제 접근 제어(MAC)이다.
MAC은 시스템이 정한 보안 정책에 따라 일괄 적용되며, 데이터 소유자가 임의로 권한을 바꿀 수 없다.
오류나 개정된 내용이 보이면 알려주세요
뷰(view)에 대한 설명으로 옳지 않은 것은?
일반 테이블과 동일한 방법으로 검색을 수행할 수 있다.
집계 함수로 계산된 내용을 포함하고 있는 뷰는 변경(삽입, 삭제, 갱신)이 가능하다.
뷰를 생성할 때, 뷰를 통한 투플의 삽입 또는 갱신 연산에 제한을 둘 수 있다.
DISTINCT 키워드를 포함하여 정의된 뷰는 변경(삽입, 삭제, 갱신)이 제한된다.
집계 함수로 계산된 열을 포함한 뷰는 기본 테이블의 특정 투플로 되돌려 반영할 수 없어 변경이 불가능하다.
뷰의 한 행이 여러 기본 투플을 요약한 값이므로, 삽입·삭제·갱신을 어느 투플에 적용할지 정할 수 없기 때문이다.
오류나 개정된 내용이 보이면 알려주세요
(고객번호, 이름, 지역) 스키마로 정의된 ‘고객’ 릴레이션을 지역이 ‘서울’인 투플은 사이트 1에, 지역이 ‘부산’인 투플은 사이트 2에 분산하여 저장하는 경우에 대한 설명으로 옳은 것은? (단, 각 사이트에는 세 속성이 모두 저장된다)
투플 단위로 나누었으므로 수평 단편화이다.
‘지역’이라는 속성 단위로 나누었으므로 수직 단편화이다.
‘지역’에 따라 투플을 분산하여 저장하므로 혼합 단편화이다.
자연 조인 연산을 통해 두 사이트의 릴레이션을 원래의 릴레이션으로 복원할 수 있다.
속성은 모두 유지한 채 ‘지역’ 값에 따라 투플(행) 단위로 나누었으므로 수평 단편화이다.
수평 단편은 선택 연산으로 만들어지며, 원래 릴레이션은 단편들의 합집합으로 복원한다.
오류나 개정된 내용이 보이면 알려주세요
‘주문’, ‘제품1’, ‘제품2’ 테이블에 대하여 ‘주문 ÷ 제품1’, ‘주문 ÷ 제품2’의 연산 결과로 옳은 것은?
주문
| 주문고객 | 제품이름 | 제조업체 |
|---|---|---|
| C1 | 라면 | P1 |
| C2 | 과자 | P2 |
| C3 | 음료 | P1 |
| C1 | 음료 | P1 |
| C2 | 음료 | P1 |
| 제품이름 | 제조업체 |
|---|---|
| 음료 | P1 |
| 제품이름 |
|---|
| 라면 |
| 음료 |
| 주문고객 |
|---|
| C3 |
| C1 |
| C2 |
| 주문고객 | 제조업체 |
|---|---|
| C1 | P1 |
| 주문고객 |
|---|
| C1 |
| C2 |
| 주문고객 | 제조업체 |
|---|---|
| C2 | P2 |
| 주문고객 | 제품이름 | 제조업체 |
|---|---|---|
| C3 | 음료 | P1 |
| C1 | 음료 | P1 |
| C2 | 음료 | P1 |
| 주문고객 | 제품이름 | 제조업체 |
|---|---|---|
| C1 | 라면 | P1 |
| C1 | 음료 | P1 |
| 주문고객 | 제품이름 | 제조업체 |
|---|---|---|
| C1 | 라면 | P1 |
| C2 | 과자 | P2 |
| 주문고객 | 제품이름 | 제조업체 |
|---|---|---|
| C2 | 과자 | P2 |
‘주문 ÷ 제품1’은 C3, C1, C2, ‘주문 ÷ 제품2’는 (C1, P1) 한 투플이다.
나눗셈 결과의 속성은 피제수 속성에서 제수 속성을 뺀 것이며, 제수의 모든 투플과 짝을 이루는 값만 남는다.
제품1의 (음료, P1)과 짝을 이루는 주문고객은 C3, C1, C2 모두이다.
제품2로 나누면 결과 속성은 (주문고객, 제조업체)이고, 라면과 음료를 모두 가진 조합은 (C1, P1)뿐이다. (C2, P1)·(C3, P1)은 음료만, (C2, P2)는 과자만 있다.
오류나 개정된 내용이 보이면 알려주세요
트랜잭션 , 에 대한 설명으로 옳지 않은 것은? (단, 의 초기값은 1,000이다)
| 시간 | |||
|---|---|---|---|
| read(); | |||
| read(); | |||
| ; | (가) | ||
| ; | |||
| write(); | (나) | ||
| write(); | (다) | ||
| COMMIT; | (라) | ||
| ↓ | COMMIT; |
(가)에서 의 작업 수행 후 메모리 버퍼에 저장된 값은 1,000이다.
(나)에서 의 작업 수행 후 메모리 버퍼에 저장된 값은 1,500이다.
(다)에서 의 작업 수행 후 갱신 손실 문제가 발생한다.(라)에서 “COMMIT”이 “ROLLBACK”으로 변경될 경우 오손 읽기 문제가 발생한다.
(라)에서 이 철회되더라도 는 의 쓰기 이전 값을 읽었으므로 오손 읽기는 발생하지 않는다.
오손 읽기는 커밋되지 않은 다른 트랜잭션의 갱신 값을 읽어야 생기는데, 의 read(X)는 의 write(X)보다 앞서 1,000을 읽었다.
오류나 개정된 내용이 보이면 알려주세요
(가) ~ (다)의 빅데이터 분석 기법과 A ~ C의 설명이 바르게 연결된 것은?(가) 군집 분석 (나) 분류 분석 (다) 연관 분석A. 새로운 데이터가 미리 정해진 기준에 따라 어떤 그룹 또는 등급에 속하는지 판단하는데 사용되는 분석 기법(가) (나) (다)
B. 미리 정해진 기준이 없는 상태에서 유사한 특성이 있는 데이터들을 독립적인 그룹으로 분류하는 분석 기법
C. 데이터 간의 발생 빈도를 분석하여 데이터에서 함께 발생하는 항목 간 숨겨진 규칙을 찾아내는 분석 기법
A B C
B A C
B C A
C A B
(가) 군집 분석은 B, (나) 분류 분석은 A, (다) 연관 분석은 C와 연결된다.
군집 분석은 미리 정해진 기준 없이 유사성으로 그룹을 만드는 비지도 학습이고, 분류 분석은 미리 정의된 범주에 새 데이터를 배정하는 지도 학습이다.
연관 분석은 함께 발생하는 항목 간의 규칙(장바구니 분석)을 찾는다.
오류나 개정된 내용이 보이면 알려주세요
DBMS의 3단계 스키마 구조에서 사상(mapping)과 데이터 독립성에 대한 설명으로 옳지 않은 것은?
외부/개념 사상은 외부 스키마의 데이터가 개념 스키마의 어떤 부분에 해당하는지 대응 관계를 정의한 것이다.
개념/내부 사상은 개념 스키마의 데이터가 내부 스키마를 통해 물리적 장치에 저장되는 대응 관계를 정의한 것이다.
내부 스키마가 변경되어도 개념/내부 사상을 수정하면 개념 스키마가 영향을 받지 않는다.
개념 스키마가 변경되어도 외부 스키마에 영향이 없는 성질을 물리적 데이터 독립성이라 한다.
개념 스키마가 바뀌어도 외부 스키마가 영향받지 않는 성질은 논리적 데이터 독립성이므로, 물리적 데이터 독립성이라 한 설명이 옳지 않다.
물리적 데이터 독립성은 내부 스키마가 바뀌어도 개념 스키마가 영향받지 않는 성질로, 개념/내부 사상을 수정해 보장한다.
오류나 개정된 내용이 보이면 알려주세요
데이터를 여러 디스크에 분배하여 저장하는 구조로, 데이터의 갱신이 중복해서 일어나지 않고, 가장 좋은 쓰기 성능을 갖는 RAID 레벨은?
RAID 레벨 0
RAID 레벨 2
RAID 레벨 3
RAID 레벨 6
패리티나 미러링 없이 데이터를 여러 디스크에 나누어 쓰는 RAID 레벨 0(스트라이핑)이 쓰기 성능이 가장 좋다.
중복 정보를 계산·기록하지 않아 쓰기 부담이 없지만, 디스크 하나만 고장 나도 데이터를 잃는 결함 허용이 없는 구조이다.
오류나 개정된 내용이 보이면 알려주세요
저장 프로시저(stored procedure)에 대한 설명으로 옳지 않은 것은?
일반 애플리케이션 함수와 달리 매개변수를 전달할 수 없다.
데이터베이스 서버에서 실행되어 클라이언트와 서버 사이의 데이터 전송량을 줄일 수 있다.
SQL 외에 다른 언어로 작성될 수 있다.
CALL 문장을 가진 대화형 SQL에서 호출될 수 있다.
저장 프로시저는 IN·OUT·INOUT 매개변수를 받을 수 있으므로, 매개변수를 전달할 수 없다는 설명이 옳지 않다.
저장 프로시저는 DBMS에 저장된 프로그램으로 서버 측에서 실행된다.
오류나 개정된 내용이 보이면 알려주세요
NoSQL 데이터베이스에 대한 설명으로 옳은 것만을 모두 고르면?ㄱ. CAP에서 C는 Consistency로, 복제 데이터를 가진 분산 시스템에서 동일한 데이터 항목에 대한 여러 복사본에서 값이 일치해야 함을 의미한다.
ㄴ. CAP의 A는 Availability로, 네트워크 고장으로 분산된 노드들 중 일부에서 작동이 멈추더라도 시스템이 정상적으로 작동하는 것을 의미한다.
ㄷ. NoSQL 데이터베이스는 관계형 데이터베이스와 비교하여 ACID 특성을 엄격히 준수하지 않는다.
ㄱ, ㄴ
ㄱ, ㄷ
ㄴ, ㄷ
ㄱ, ㄴ, ㄷ
옳은 것은 ㄱ, ㄷ이다.
CAP의 가용성(A)은 고장 나지 않은 노드가 모든 요청에 응답하는 성질이고, 네트워크 고장으로 노드가 분리되어도 시스템이 동작하는 성질은 분할 허용성(P)이다.
오류나 개정된 내용이 보이면 알려주세요
관계형 데이터베이스에서 질의 최적화를 위한 조인 연산 처리에 대한 설명으로 옳은 것만을 모두 고르면?ㄱ. 인덱스 기반 중첩 루프 조인에서 두 테이블의 조인 속성에 모두 인덱스가 존재한다면 투플 수가 적은 테이블을 외부 릴레이션으로 사용하는 것이 비용 측면에서 유리하다.
ㄴ. 정렬 합병 조인은 투플들이 기본키 속성에 대해 정렬되어 있을 때 조인 연산을 효율적으로 수행하는 방법이다.
ㄷ. 두 테이블 R과 S에 대하여 페이지(블록) 기반 중첩 루프 조인을 수행할 경우 R⋈S와 S⋈R의 비용이 다를 수 있다.
ㄱ, ㄴ
ㄱ, ㄷ
ㄴ, ㄷ
ㄱ, ㄴ, ㄷ
옳은 것은 ㄱ, ㄷ이다.
정렬 합병 조인은 두 테이블이 조인 속성으로 정렬되어 있을 때 효율적이며, 기본키 정렬 여부와는 관계가 없다.
오류나 개정된 내용이 보이면 알려주세요
인덱스(index)에 대한 설명으로 옳은 것만을 모두 고르면?ㄱ. 테이블은 최대 한 개의 기본 인덱스를 가질 수 있고, 여러 개의 보조 인덱스를 가질 수 있다.
ㄴ. 기본 인덱스와 보조 인덱스는 각각 기본키와 탐색키 값에 따라 레코드들이 정렬되어 있어야 정의할 수 있다.
ㄷ. 다단계 인덱스는 단일 단계 인덱스에 비하여 인덱스의 갱신이 빠르므로 관계형 DBMS에서 많이 이용된다.
ㄹ. 클러스터링 인덱스는 물리적으로 정렬된 테이블의 레코드에 대해 생성할 수 있으므로 범위 검색에 유리하다.
ㄱ, ㄴ
ㄱ, ㄹ
ㄴ, ㄷ
ㄴ, ㄹ
옳은 것은 ㄱ, ㄹ이다.
보조 인덱스는 레코드가 탐색키 순으로 정렬되어 있지 않아도 만들 수 있고, 다단계 인덱스는 검색을 빠르게 하는 대신 갱신 부담이 커서 B+트리 같은 동적 구조로 보완한다.
오류나 개정된 내용이 보이면 알려주세요
다음 R과 S 테이블에 대해, 주어진 ‘관계대수’와 동일한 투플 결과를 출력하는 ‘SQL 문’은? (단, 밑줄로 표기된 속성은 기본키를 의미한다)
R
| A | B |
|---|---|
| a1 | 5 |
| a2 | 10 |
| a3 | 15 |
| a4 | 20 |
| C | A |
|---|---|
| c1 | a1 |
| c2 | a1 |
| c3 | a2 |
| c4 | a3 |
관계대수: σ(B < 10)(R) ⋈R.A=S.A S
SQL 문:SELECT DISTINCT R.A, R.B, S.C, S.A
FROM R INNER JOIN S
WHERE R.B < 10;
관계대수: R ⋈N S
SQL 문:SELECT DISTINCT R.A, R.B, S.C
FROM R, S
WHERE R.A IN (SELECT S.A FROM S);
관계대수: R ⋉ S
SQL 문:SELECT DISTINCT R.A, R.B
FROM R, S
WHERE R.A = S.A;
관계대수: R ⟕ S
SQL 문:SELECT DISTINCT R.A, R.B, S.C
FROM R, S
WHERE R.A = S.A;
세미조인 R ⋉ S와, 동등 조건으로 조인한 뒤 R의 속성만 중복 없이 출력하는 SQL이 같은 결과를 낸다.
R ⋉ S는 S와 A 값이 일치하는 R의 투플만 남겨 (a1, 5), (a2, 10), (a3, 15)가 된다.
SQL은 R.A = S.A로 조인하면 a1이 두 번 나오지만 DISTINCT로 R.A, R.B만 뽑아 같은 세 투플이 된다.
오류나 개정된 내용이 보이면 알려주세요
다음은 항공권 예약 시스템에서 좌석 예매와 결제 처리를 수행하는 트랜잭션 코드이다. 트랜잭션 수행 중 UPDATE 문이 끝난 뒤 (가) 지점에서 장애가 발생하여 이 트랜잭션이 성공적으로 완료되지 못할 때, 이 상황과 관련된 트랜잭션의 특성과 해결 방법으로 옳은 것은? (단, 동시에 수행 중인 다른 트랜잭션은 없다)BEGIN
UPDATE 좌석
SET 상태 = “예약완료”
WHERE 항공편 = “KE011_KR” AND 좌석번호 = “22A”;
(가)
INSERT INTO 결제(결제번호, 항공편, 금액, 상태)
VALUES (“Q_PAY1011”, “KE011_KR”, 1500000, “승인완료”);
END;
원자성(Atomicity)을 보장하기 위한 ROLLBACK 처리
지속성(Durability)을 보장하기 위한 TRIGGER 처리
고립성(Isolation)을 보장하기 위한 SAVEPOINT 처리
일관성(Consistency)을 보장하기 위한 START TRANSACTION 처리
일부만 반영된 상태를 남기지 않도록 원자성을 보장해야 하며, 이미 수행된 UPDATE를 ROLLBACK으로 취소한다.
좌석은 예약완료인데 결제 기록이 없으면 ‘전부 실행 아니면 전부 미실행’ 원칙이 깨지므로, 로그를 이용해 UNDO하여 트랜잭션 시작 전 상태로 되돌린다.
오류나 개정된 내용이 보이면 알려주세요
트랜잭션 , , 에서 데이터 x, y, z에 대한 읽기와 쓰기 작업의 스케쥴이 다음과 같을 때 옳은 것만을 모두 고르면?
| 시간 | |||
|---|---|---|---|
| read(y) | |||
| read(z) | |||
| read(x) | |||
| write(x) | |||
| read(z) | |||
| write(y) | |||
| read(y) | |||
| write(y) | |||
| write(z) | |||
| ↓ | read(x) |
ㄴ. 의 read(z) 연산이 없다면 충돌 직렬가능 스케쥴이다.
ㄷ. 의 read(x)가 write(z)로 대체된다면 충돌 직렬가능하지 않은 스케쥴이다.
ㄱ, ㄴ
ㄱ, ㄷ
ㄴ, ㄷ
ㄱ, ㄴ, ㄷ
ㄱ, ㄴ, ㄷ 모두 옳다.
원래 스케줄의 충돌 간선은 y에서 , x에서 , z에서 (의 read(z) 뒤 의 write(z))이어서 사이클이 생긴다.
오류나 개정된 내용이 보이면 알려주세요
기본키가 EMP_ID인 두 테이블 EMP1(EMP_ID, NAME, SALARY), EMP2(EMP_ID, ADDRESS)에 대하여 사용자 A1이 다음 순서대로 모두 수행하고 ‘순서 5’의 실행 결과가 다음과 같을 때, 옳은 설명은? (단, EMP_ID, NAME, SALARY의 데이터 타입은 각각 정수형, 문자열, 정수형이다)
| 순서 | A1이 수행한 SQL 문 |
|---|---|
| 1 | CREATE VIEW EMP_VIEW1 AS SELECT * FROM EMP1 WHERE SALARY>1000 WITH CHECK OPTION; |
| 2 | CREATE VIEW EMP_VIEW2 AS SELECT NAME, ADDRESS FROM EMP1, EMP2 WHERE EMP1.EMP_ID = EMP2.EMP_ID; |
| 3 | GRANT SELECT, INSERT ON EMP_VIEW1 TO A2; |
| 4 | GRANT SELECT, INSERT ON EMP_VIEW2 TO A2; |
| 5 | SELECT * FROM EMP_VIEW1; |
| EMP_ID | NAME | SALARY |
|---|---|---|
| 1001 | 홍길동 | 1200 |
| 1002 | 이순신 | 1500 |
| 1003 | 신윤복 | 1100 |
EMP1에 EMP_ID가 1004인 투플이 없을 때, A2는 EMP_VIEW1을 통해 EMP1에 새로운 투플 ‘(1004, “강감찬”, 1000)’을 삽입할 수 있다.
A2는 EMP_VIEW1을 통해 SALARY의 합계를 출력하는 SQL 문을 실행할 수 없다.
A2는 EMP_VIEW2에 새로운 투플을 삽입할 수 없다.
A1은 EMP_VIEW1에 대한 DELETE 권한을 A2에 부여할 수 없다.
EMP_VIEW2는 두 테이블을 조인하고 기본키 EMP_ID를 포함하지 않으므로, A2는 이 뷰에 새 투플을 삽입할 수 없다.
조인 뷰에 삽입하면 EMP1·EMP2 중 어디에 어떤 키로 넣을지 정할 수 없고, 기본키가 빠져 개체 무결성도 만족시킬 수 없다.
오류나 개정된 내용이 보이면 알려주세요
상품 주문 관리 데이터베이스를 구성하는 세 테이블의 스키마가 다음과 같다. 2026년도(출시연도)에 출시된 PAD(상품종류)가 두 개 이상일 때, 해당 PAD 상품을 모두 한 번 이상 주문한 고객의 고객번호를 출력하는 SQL 문은? (단, 각 테이블의 밑줄 친 속성은 기본키이고, 주문.고객번호와 주문.상품번호는 각각 고객.고객번호와 상품.상품번호를 참조하는 외래키이다)고객(고객번호, 이름)
상품(상품번호, 상품종류, 출시연도)
주문(주문번호, 고객번호, 상품번호, 주문일자)
SELECT DISTINCT C.고객번호
FROM 고객 C, 상품 P, 주문 O
WHERE C.고객번호 = O.고객번호 AND P.상품번호 = O.상품번호
AND P.상품종류 = “PAD” AND P.출시연도 = 2026
GROUP BY C.고객번호
HAVING COUNT(*) = (SELECT COUNT(*) FROM 상품
WHERE 상품종류 = “PAD” AND 출시연도 = 2026);
SELECT DISTINCT C.고객번호
FROM 고객 C
WHERE NOT EXISTS (
SELECT *
FROM 상품 P
WHERE P.상품종류 = “PAD” AND P.출시연도 = 2026
AND NOT EXISTS (
SELECT *
FROM 주문 O
WHERE C.고객번호 = O.고객번호 AND P.상품번호 =
O.상품번호));
SELECT DISTINCT C.고객번호
FROM 고객 C INNER JOIN 주문 O ON C.고객번호 =
O.고객번호 INNER JOIN 상품 P ON P.상품번호 = O.상품번호
WHERE P.상품종류 = “PAD” AND P.출시연도 = 2026
GROUP BY C.고객번호
HAVING COUNT(*) >= 1;
SELECT DISTINCT C.고객번호
FROM 고객 C
WHERE C.고객번호 NOT IN (
SELECT 고객번호
FROM 주문
WHERE 상품번호 NOT IN (
SELECT 상품번호
FROM 상품
WHERE 상품종류 = “PAD” AND 출시연도 = 2026));
이중 NOT EXISTS로 ‘주문하지 않은 2026년 PAD 상품이 하나도 없는 고객’을 찾는 SQL이 요구를 정확히 구현한다.
안쪽 질의는 해당 고객이 주문하지 않은 PAD 상품을 찾고, 그런 상품이 없을 때만 고객이 선택되므로 관계대수의 나눗셈과 같다.
오류나 개정된 내용이 보이면 알려주세요
인사관리 시스템의 ‘사원’, ‘퇴사예정’ 테이블에 대하여 다음 요구사항을 반영하여 적절하게 구현한 트리거 생성문은? (단, 모든 SQL 문은 정상적으로 수행되며, old, new는 변경 전후 투플 지정자를 의미한다)○ ‘사원’ 테이블에서 어떤 사원의 ‘재직상태’가 “퇴사예정”으로 값이 변경되면, 해당 사원의 투플이 ‘퇴사예정’ 테이블에 추가된다.
○ ‘퇴사예정’ 테이블의 속성은 ‘사원번호’와 ‘이름’이며, 이 정보는 ‘사원’ 테이블에도 포함되어 있다.
CREATE TRIGGER Employee_Trigger
BEFORE UPDATE ON 사원 FOR EACH ROW
BEGIN
IF old.재직상태 = “퇴사예정” THEN
INSERT INTO 퇴사예정 VALUES(old.사원번호, old.이름);
END IF;
END;
CREATE TRIGGER Employee_Trigger
AFTER UPDATE ON 사원 FOR EACH ROW
BEGIN
IF new.재직상태 = “퇴사예정” THEN
INSERT INTO 퇴사예정 VALUES(old.사원번호, old.이름);
END IF;
END;
CREATE TRIGGER Employee_Trigger
BEFORE INSERT ON 사원 FOR EACH ROW
BEGIN
IF old.재직상태 = “퇴사예정” THEN
INSERT INTO 퇴사예정 VALUES(old.사원번호, old.이름);
END IF;
END;
CREATE TRIGGER Employee_Trigger
AFTER INSERT ON 사원 FOR EACH ROW
BEGIN
IF new.재직상태 = “퇴사예정” THEN
INSERT INTO 퇴사예정 VALUES(old.사원번호, old.이름);
END IF;
END;
값이 바뀐 뒤 new.재직상태가 “퇴사예정”인지 검사하는 AFTER UPDATE 트리거가 요구사항에 맞다.
재직상태 변경은 UPDATE 사건이고 변경 후 값은 new로 참조해야 한다. 사원번호·이름은 변경 대상이 아니므로 old로 읽어도 같은 값이 삽입된다.
오류나 개정된 내용이 보이면 알려주세요
다음 SQL 문으로 오류 없이 생성된 ‘고객’과 ‘주문’ 테이블에 다음과 같이 투플이 삽입되어 있을 때 성공적으로 수행되는 SQL 문은?고객CREATE TABLE 고객 (
고객번호 VARCHAR(2),
이름 VARCHAR(10),
추천고객 VARCHAR(2),
PRIMARY KEY(고객번호),
FOREIGN KEY(추천고객) REFERENCES 고객(고객번호)
ON DELETE CASCADE
);
CREATE TABLE 주문 (
주문번호 VARCHAR(2),
고객 VARCHAR(2),
제품 VARCHAR(10),
수량 INT,
PRIMARY KEY(주문번호),
FOREIGN KEY(고객) REFERENCES 고객(고객번호)
);
| 고객번호 | 이름 | 추천고객 |
|---|---|---|
| C1 | 김유신 | NULL |
| C2 | 홍길동 | C1 |
| C3 | 이순신 | C2 |
| C4 | 임꺽정 | C3 |
| C5 | 유관순 | C1 |
| 주문번호 | 고객 | 제품 | 수량 |
|---|---|---|---|
| O1 | C1 | HDD | 2 |
| O2 | C1 | SSD | 1 |
| O3 | C4 | USB | 5 |
INSERT INTO 주문 VALUES (“O4”, “C6”, “VGA”, 2);
DELETE FROM 고객 WHERE 고객번호 = “C3”;
DELETE FROM 고객 WHERE 고객번호 = “C5”;
UPDATE 고객 SET 고객번호=“C7” WHERE 고객번호=“C4”;
추천고객이나 주문에서 참조되지 않는 C5를 삭제하는 문장만 제약 위반 없이 수행된다.
‘주문’의 외래키에는 참조 동작이 지정되지 않아 기본값(NO ACTION/RESTRICT)이 적용되므로, 주문에서 참조 중인 고객번호는 삭제·변경할 수 없다.
오류나 개정된 내용이 보이면 알려주세요
릴레이션 R(A, B, C, D, E)에 대한 함수 종속성 집합 F가 다음과 같을 때, 이에 대한 설명으로 옳은 것은? (단, 모든 속성의 도메인은 원자값으로 구성된다)F = {(A, B) → C, C → D, D → E, E → B}
유일하게 존재하는 후보키 (A, B)가 기본키이다.
F에서 E → B를 삭제하면 (A, B)는 후보키가 아니다.
(A, C, D)의 폐포(closure)는 {A, B, C, D, E}이다.R은 보이스/코드 정규형(BCNF)의 요건을 충족한다.
(A, C, D)의 폐포는 D → E, E → B를 차례로 적용하면 {A, B, C, D, E} 전체가 된다.
A는 어떤 종속의 오른쪽에도 없어 모든 키에 포함되고, A에 B·C·D·E 중 하나만 더해도 전체를 결정하므로 후보키는 (A, B), (A, C), (A, D), (A, E) 넷이다.
오류나 개정된 내용이 보이면 알려주세요
병렬 데이터베이스 시스템과 관련된 설명으로 옳지 않은 것은?
메모리 공유 구조는 이완 결합(loosely-coupled) 구조로 프로세서가 주기억 장치를 공유한다.
디스크 공유 구조는 프로세서가 디스크를 공유하며 각 노드에 자체 주기억장치를 가지고 있다.
디스크 공유 구조에서는 네트워크 병목 현상이 발생할 수 있다.
비공유 구조는 각 노드가 자체 프로세서, 메모리, 디스크를 가지며, 노드 간에는 네트워크로 연결된다.
메모리 공유 구조는 프로세서들이 주기억장치를 공유하는 밀결합(tightly-coupled) 구조이므로, 이완 결합이라 한 설명이 옳지 않다.
이완 결합은 각 노드가 자체 메모리를 갖고 네트워크로 통신하는 디스크 공유·비공유 구조에 해당한다.
오류나 개정된 내용이 보이면 알려주세요
다음은 교수와 학생의 관계를 나타낸 E-R 다이어그램이다. 이를 기준으로 ‘교수’와 ‘학생’ 테이블을 생성하였을 때 옳은 것만을 모두 고르면? (단, ‘교수번호’와 ‘학번’은 기본키이고, ‘지도교수번호’는 학생의 지도교수 정보로, ‘교수번호’를 참조하는 외래키이다)ㄱ. 기존 다른 학생과 동일한 지도교수번호를 갖는 새로운 학생 정보를 ‘학생’ 테이블에 삽입할 수 있다.
ㄴ. ‘학생’ 테이블의 ‘지도교수번호’ 속성에 없는 번호를 교수번호로 갖는 새로운 교수 정보를 ‘교수’ 테이블에 삽입할 수 있다.
ㄷ. ‘지도교수번호’가 NULL인 새로운 학생 정보를 ‘학생’ 테이블에 삽입할 수 있다.
ㄹ. ‘교수’와 ‘학생’ 테이블로부터 지도 학생이 없는 교수의 ‘교수번호’를 출력할 수 있다.
ㄱ, ㄴ
ㄱ, ㄹ
ㄴ, ㄷ
ㄴ, ㄹ
E-R 다이어그램의 '지도' 관계는 교수와 학생이 1:1이고, 학생 쪽이 이중선이므로 학생은 지도 관계에 전체 참여한다. 따라서 옳은 것은 새 교수 삽입과 지도 학생 없는 교수 조회 두 진술이다.
1:1 관계이므로 한 교수는 최대 한 명의 학생만 지도할 수 있어 '지도교수번호'는 학생 테이블에서 중복될 수 없고(UNIQUE), 전체 참여이므로 모든 학생은 지도교수를 가져야 해 NULL이 허용되지 않는다(NOT NULL). 반면 교수 쪽은 단일선(부분 참여)이라 지도 학생이 없는 교수가 존재할 수 있다.
오류나 개정된 내용이 보이면 알려주세요
키값 2, 3, 5를 차례대로 삽입하여 다음과 같은 B+-트리가 생성되었다. 이후 9, 8, 7을 차례대로 삽입한 후 B+-트리로 옳은 것은? (단, B+-트리의 차수는 3이다)
[그림]
[그림]
[그림]
[그림]
차수 3의 B+ 트리에서 9, 8, 7을 차례로 넣으면 루트 5 아래 내부 노드 3과 8이 있고, 리프가 2 / 3 / 5·7 / 8·9인 높이 3의 트리가 된다.
노드당 키는 최대 2개이며, 처음 트리(2·3·5 삽입 → 리프 2 / 3·5)에서 보듯 넘친 리프는 왼쪽 1개·오른쪽 2개로 분할하고 오른쪽 리프의 첫 키를 부모로 복사한다.
9 삽입: 리프 3·5·9가 넘쳐 3 / 5·9로 분할, 5가 루트로 올라가 루트는 3·5가 된다.
8 삽입: 리프 5·8·9가 넘쳐 5 / 8·9로 분할, 8이 올라가 루트가 3·5·8로 넘친다. 내부 노드는 가운데 키 5를 새 루트로 올리고 3과 8로 나뉜다.
7 삽입: 리프 5에 여유가 있어 5·7이 된다.
오류나 개정된 내용이 보이면 알려주세요
[7급 국가직 데이터베이스론] 26년 1회차 시험지 PDF 다운로드·인쇄 →
[7급 국가직 데이터베이스론] 26년 1회차 정답과 해설은 무료인가요?
이 페이지의 25문항 정답과 해설은 로그인 없이 무료로 볼 수 있습니다. 무제한 풀이·실전 모의고사·PDF 출력·전자책 다운로드는 베이직 플랜에 포함됩니다.
이 회차를 CBT 로 직접 풀어볼 수 있나요?
7급 국가직 데이터베이스론 기출문제 암기장에서 이 회차를 회차별·랜덤으로 풀고 오답노트에 자동으로 모을 수 있습니다. 7급 국가직 데이터베이스론 기출문제 풀러 가기 →
시험지 PDF 나 전자책으로도 볼 수 있나요?
이 회차의 인쇄용 시험지 PDF 페이지에서 시험지를 받을 수 있습니다. 시험지 PDF 받기 →

