데이터베이스 구축 · 오답노트
2025년 1회
데이터 제어 언어(DCL)의 기능으로 옳지 않은 것은?
핵심 해설
SQL은 기능에 따라 정의어(DDL), 조작어(DML), 제어어(DCL)로 나뉜다. 데이터 제어 언어(DCL)는 데이터베이스에 저장된 데이터를 관리하기 위해 무결성, 보안, 회복, 병행수행 제어 등을 정의하는 언어로 GRANT, REVOKE, COMMIT, ROLLBACK 등이 여기에 속한다. 반면 논리적·물리적 데이터 구조를 정의하고 변경하는 일은 CREATE, ALTER, DROP을 쓰는 데이터 정의 언어(DDL)의 기능이다. 따라서 '데이터 구조 정의'는 DCL이 아니라 DDL의 역할이다.
보기별 해설
정리
병행제어의 로킹(Locking) 단위에 대한 설명으로 옳지 않은 것은?
핵심 해설
로킹 단위(Locking Granularity)란 병행제어에서 한꺼번에 잠글 수 있는 데이터 객체의 크기를 말하며, 데이터베이스 전체·파일·릴레이션·튜플·필드 등이 그 대상이 될 수 있다. 로킹 단위가 크면 잠금의 개수가 적어져 관리할 락 정보가 줄고 로킹 오버헤드는 감소하지만, 한 트랜잭션이 넓은 범위를 독점하므로 병행성(공유도)은 떨어진다. 반대로 로킹 단위가 작아지면 여러 트랜잭션이 서로 다른 부분을 동시에 다룰 수 있어 공유도는 증가하지만, 설정·해제해야 할 락이 많아져 로킹 오버헤드는 오히려 증가한다. 따라서 '단위가 작아지면 오버헤드가 감소한다'는 서술이 사실과 반대이다.
보기별 해설
정리
이행적 함수 종속 관계를 의미하는 것은?
핵심 해설
이행적 함수 종속(Transitive Functional Dependency)은 속성 A가 B를 결정하고(A → B), B가 다시 C를 결정할 때(B → C), 그 결과로 A가 C를 결정하게 되는(A → C) 종속 관계를 말한다. 중간 매개 속성 B를 거쳐 종속이 '전이(transitive)'된다는 점이 핵심이며, 화살표의 방향이 A → B → C로 한쪽으로 이어져야 한다. 이런 종속이 남아 있으면 갱신 이상이 생기므로 제3정규형(3NF)에서 이를 제거한다. 따라서 A → B, B → C일 때 A → C가 성립하는 관계가 이행적 함수 종속이다.
보기별 해설
정리
SQL의 분류 중 DDL에 해당하지 않는 것은?
핵심 해설
데이터 정의 언어(DDL)는 데이터베이스의 구조, 즉 스키마·테이블·뷰·인덱스 같은 객체를 정의하고 변경하고 삭제하는 명령어로 CREATE, ALTER, DROP 세 가지가 전부이다. 반면 이미 정의된 구조 안에 들어 있는 데이터 값을 검색·삽입·수정·삭제하는 명령어는 데이터 조작 언어(DML)로 SELECT, INSERT, UPDATE, DELETE가 여기에 속한다. UPDATE는 테이블의 행 값을 바꾸는 명령이므로 구조가 아니라 데이터를 다루는 DML이다. 따라서 DDL에 해당하지 않는 것은 UPDATE이다.
보기별 해설
정리
데이터베이스 로그(log)를 필요로 하는 회복 기법은?
핵심 해설
로그(Log)는 트랜잭션이 수행한 변경 내역을 발생 순서대로 기록해 둔 파일로, 장애 발생 시 REDO와 UNDO를 수행할 근거가 된다. 로그를 이용하는 대표적 회복 기법에는 즉각 갱신 기법(Immediate Update)과 지연 갱신 기법(Deferred Update)이 있으며, 이 밖에 검사점 기법과 그림자 페이징 기법이 있다. 즉각 갱신 기법은 트랜잭션이 완료되기 전이라도 변경 내용을 즉시 데이터베이스에 반영하되, 반영 전에 반드시 로그를 먼저 기록해 두어 장애 시 UNDO로 취소하고 완료된 트랜잭션은 REDO로 재수행한다. 따라서 로그를 필수적으로 요구하는 회복 기법은 즉각 갱신 기법이다.
보기별 해설
정리
Commit과 Rollback 명령어에 의해 보장 받는 트랜잭션의 특성은?
핵심 해설
트랜잭션은 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 영속성(Durability)의 ACID 특성을 만족해야 한다. 이 중 원자성은 트랜잭션의 연산이 데이터베이스에 모두 반영되거나 전혀 반영되지 않아야 한다는 All or Nothing 원칙이다. COMMIT은 트랜잭션의 모든 연산을 성공적으로 끝내 그 결과를 영구 반영하는 명령이고, ROLLBACK은 오류 발생 시 지금까지의 변경을 모두 취소해 트랜잭션 시작 이전 상태로 되돌리는 명령이다. 두 명령 덕분에 '전부 반영' 또는 '전부 취소' 둘 중 하나만 남고 중간 상태가 남지 않으므로, 이들이 직접 보장하는 특성은 원자성이다.
보기별 해설
정리
한 릴레이션 스키마가 4개 속성, 2개 후보키 그리고 그 스키마의 대응 릴레이션 인스턴스가 7개 튜플을 갖는다면 그 릴레이션의 차수(Degree)는?
핵심 해설
릴레이션에서 차수(Degree)는 속성(Attribute), 즉 열의 개수를 뜻하고, 카디널리티(Cardinality)는 튜플(Tuple), 즉 행의 개수를 뜻한다. 문제에서 릴레이션 스키마가 4개 속성을 가진다고 했으므로 차수는 4이다. 튜플이 7개라는 정보는 카디널리티가 7이라는 뜻이고, 후보키가 2개라는 정보는 유일성과 최소성을 만족하는 속성 집합이 두 벌 존재한다는 뜻일 뿐 차수와는 무관한 함정이다. 따라서 차수는 4이다.
보기별 해설
정리
사용자 X1에게 department 테이블에 대한 검색 연산을 회수하는 명령은?
핵심 해설
SQL에서 권한을 다루는 DCL 명령은 부여하는 GRANT와 회수하는 REVOKE 두 가지이다. GRANT는 'GRANT 권한 ON 테이블 TO 사용자' 형태로 쓰고, REVOKE는 'REVOKE 권한 ON 테이블 FROM 사용자' 형태로 쓴다. 즉 부여할 때는 대상 사용자에게 준다는 의미로 TO, 회수할 때는 대상 사용자로부터 뺏는다는 의미로 FROM을 쓴다는 점이 구분 기준이다. 사용자 X1에게서 department 테이블의 검색(SELECT) 권한을 회수하려면 REVOKE SELECT ON department FROM X1; 이 된다.
보기별 해설
정리
개체관계- 모델의 E-R 다이어그램에서 사용되는 기호와 그 의미의 연결이 틀린 것은?
핵심 해설
개체-관계(E-R) 다이어그램은 현실 세계를 개체, 속성, 관계로 표현하는 개념적 설계 도구로 각 요소마다 정해진 기호가 있다. 사각형은 개체(Entity) 타입, 마름모는 관계(Relationship) 타입, 타원은 속성(Attribute), 이중 타원은 다중값 속성, 밑줄 친 타원은 기본키 속성을 나타내며, 선은 개체·속성·관계를 서로 연결하고 그 위에 1:1, 1:N 같은 대응수를 표기한다. 삼각형은 표준 E-R 표기법에서 사용하는 기호가 아니며, 속성을 나타내는 기호는 타원이다. 따라서 '삼각형 - 속성'이 잘못된 연결이다.
보기별 해설
정리
3NF에서 BCNF가 되기 위한 조건은?
핵심 해설
보이스코드 정규형(BCNF)은 제3정규형을 만족하면서 릴레이션의 모든 결정자가 후보키인 상태로, 강한 제3정규형이라고도 부른다. 결정자(Determinant)는 함수 종속 X → Y에서 화살표 왼쪽의 속성 X를 말하는데, 3NF까지만 만족한 릴레이션에는 후보키가 아니면서도 다른 속성을 결정하는 결정자가 남아 있을 수 있고 이 때문에 삽입·삭제·갱신 이상이 계속 발생한다. BCNF는 바로 그런 '후보키가 아닌 결정자'를 분해해 제거하는 단계이다. 따라서 3NF에서 BCNF로 가기 위한 조건은 결정자이면서 후보키가 아닌 것의 제거이다.
보기별 해설
정리
뷰(VIEW)에 대한 설명으로 옳지 않은 것은?
핵심 해설
뷰(View)는 하나 이상의 기본 테이블로부터 유도된 가상 테이블로, 실제 데이터를 저장하지 않고 정의만 데이터 사전에 보관한다. 필요한 열과 행만 보여 줄 수 있어 보안 수단으로 쓰이고, 이미 정의된 뷰를 기반으로 또 다른 뷰를 정의할 수도 있으며, 물리적 데이터가 없으므로 독립적인 인덱스를 가질 수 없다. 다만 뷰는 실체가 없는 가상 테이블이기 때문에 삽입·갱신·삭제 연산에 제약이 따르는데, 집계 함수·GROUP BY·DISTINCT가 포함되거나 여러 테이블을 조인한 뷰는 갱신할 수 없다. 따라서 '제약사항이 따르지 않는다'는 설명이 틀렸다.
보기별 해설
정리
다음 릴레이션의 카디널리티와 차수가 옳게 나타낸 것은? 아이디 성명 나이 등급 적립금 가입년도 yuyu01 원유철 36 3 2000 2008 sykim10 김성일 29 2 3300 2014 kshan4 한경선 45 3 2800 2009 namsu52 이남수 33 5 1000 2016
핵심 해설
카디널리티(Cardinality)는 릴레이션의 튜플, 즉 행의 개수이고 차수(Degree)는 속성, 즉 열의 개수이다. 제시된 표의 열은 아이디, 성명, 나이, 등급, 적립금, 가입년도로 6개이므로 차수는 6이다. 행은 yuyu01(원유철), sykim10(김성일), kshan4(한경선), namsu52(이남수)의 4개이므로 카디널리티는 4이다. 따라서 카디널리티 4, 차수 6이 옳다.
보기별 해설
정리
다음 SQL 문에서 ( ) 안에 들어갈 내용으로 옳은 것은? UPDATE 인사급여 ( ) 호봉 = 15 WHERE 성명 = ‘홍길동’;
핵심 해설
UPDATE 문의 기본 형식은 UPDATE 테이블명 SET 속성명 = 값 WHERE 조건; 이다. 절 순서대로 보면 UPDATE 인사급여가 갱신 대상 테이블을 지정하고, WHERE 성명 = '홍길동'이 그 테이블에서 성명이 홍길동인 튜플만 골라내며, SET 호봉 = 15가 선택된 튜플의 호봉 속성 값을 15로 바꾼다. 따라서 변경할 속성과 값을 지정하는 자리에 들어갈 키워드는 SET이다.
보기별 해설
정리
병행제어 기법의 종류가 아닌 것은?
핵심 해설
병행제어(Concurrency Control)는 여러 트랜잭션이 동시에 수행될 때 데이터베이스의 일관성이 깨지지 않도록 상호작용을 제어하는 기법이다. 대표적인 기법으로는 데이터에 잠금을 걸어 접근을 통제하는 로킹(Locking) 기법, 트랜잭션에 고유한 시각을 부여해 그 순서대로 직렬 가능하게 만드는 타임 스탬프(Time Stamp) 기법, 갱신 시마다 새 버전을 만들어 읽기와 쓰기의 충돌을 피하는 다중 버전 병행제어(MVCC), 그리고 일단 수행한 뒤 검증하는 낙관적 병행제어가 있다. 시분할(Time Sharing)은 운영체제가 CPU 시간을 잘게 나누어 여러 사용자에게 번갈아 할당하는 스케줄링 방식으로 병행제어 기법이 아니다.
보기별 해설
정리
SQL의 논리 연산자가 아닌 것은?
핵심 해설
SQL의 연산자는 산술 연산자(+, -, *, /), 비교 연산자(=, <>, >, <, >=, <=), 논리 연산자로 나뉜다. 이 중 논리 연산자는 조건식을 결합하거나 부정하는 데 쓰이며 AND(그리고), OR(또는), NOT(부정) 세 가지뿐이다. OTHER는 SQL에 존재하지 않는 키워드이므로 논리 연산자가 아니다. 참고로 BETWEEN, IN, LIKE, IS NULL은 논리 연산자가 아니라 WHERE 절에서 쓰는 특수 비교(술어) 연산자로 분류한다.
보기별 해설
정리
관계대수에 대한 설명으로 틀린 것은?
핵심 해설
관계대수(Relational Algebra)는 원하는 결과를 얻기 위해 릴레이션에 어떤 연산을 어떤 순서로 적용할지 명시하는 절차적 언어이다. 피연산자도 릴레이션이고 결과도 릴레이션이며, 합집합(∪)·교집합(∩)·차집합(−)·카티션 프로덕트(×)의 일반 집합 연산과, 셀렉트(σ)·프로젝트(π)·조인(⋈)·디비전(÷)의 순수 관계 연산으로 구분된다. 반면 '무엇을 원하는지'만 기술하고 절차는 밝히지 않는 비절차적 언어는 관계해석(Relational Calculus)이다. 따라서 관계대수를 비절차적 언어라고 한 서술이 틀렸다.
보기별 해설
정리
SQL문에서 HAVING을 사용할 수 있는 절은?
핵심 해설
SELECT 문의 절은 FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY 순으로 처리된다. FROM에서 테이블을 읽고, WHERE에서 개별 행을 걸러 내며, GROUP BY에서 남은 행을 지정한 열 값이 같은 것끼리 묶어 그룹을 만든다. HAVING은 그 다음 단계에서 만들어진 그룹 자체에 조건을 걸어 COUNT(*) >= 3 같은 집계 결과로 그룹을 걸러 내는 절이므로, 그룹이 존재해야만 의미가 있어 반드시 GROUP BY 절과 함께 사용한다. 따라서 HAVING을 사용할 수 있는 절은 GROUP BY 절이다.
보기별 해설
정리
데이터베이스의 무결성 규정(Integrity Rule)과 관련한 설명으로 틀린 것은?
핵심 해설
무결성(Integrity)은 데이터베이스에 저장된 데이터가 정확하고 일관된 상태를 유지하는 성질이며, 무결성 규정은 데이터가 만족해야 할 제약 조건을 명세한 것이다. 개체 무결성(기본키는 NULL이나 중복 불가), 참조 무결성(외래키는 참조 릴레이션의 기본키 값이거나 NULL), 도메인 무결성(속성 값은 정의된 도메인에 속함) 등이 이에 해당한다. 반면 불법적인 사용자로부터 데이터베이스를 보호하는 것은 무결성이 아니라 보안(Security)의 목적이며, GRANT·REVOKE 같은 권한 제어로 다룬다. 무결성은 '인가된 사용자가 실수로 부정확한 데이터를 넣는 것'을 막고, 보안은 '인가되지 않은 사용자의 접근 자체'를 막는다는 점이 결정적 차이이다.
보기별 해설
정리
분산 데이터베이스 시스템(Distributed Database System)에 대한 설명으로 틀린 것은?
핵심 해설
분산 데이터베이스 시스템은 물리적으로 여러 사이트에 흩어져 있는 데이터베이스를 논리적으로는 하나인 것처럼 사용하게 하는 시스템이다. 주요 구성 요소는 각 사이트에서 자체 처리 능력을 갖는 분산 처리기(Distributed Processor), 여러 사이트에 물리적으로 분산된 분산 데이터베이스(Distributed Database), 사이트들을 연결하는 통신 네트워크(Network), 그리고 이를 조정하는 분산 트랜잭션 관리자이다. 목표로는 위치 투명성, 중복(복제) 투명성, 병행 투명성, 장애 투명성의 네 가지 투명성을 든다. 따라서 구성 요소로 'P2P 시스템'과 '단일 데이터베이스'를 든 설명은 틀렸으며, 단일 데이터베이스는 분산이라는 전제 자체와 모순된다.
보기별 해설
정리
CREATE TABLE문에 포함되지 않는 기능은?
핵심 해설
CREATE TABLE은 새 테이블을 만들면서 속성의 이름과 자료형, NOT NULL 여부, 기본키(PRIMARY KEY)와 외래키(FOREIGN KEY), UNIQUE, CHECK, DEFAULT 같은 제약 조건을 한꺼번에 정의하는 DDL 명령이다. 즉 처음 만들 때 구조를 '설정'하는 명령이지, 이미 만들어진 테이블의 구조를 '변경'하는 명령이 아니다. 이미 존재하는 속성의 자료형을 바꾸거나 열을 추가·삭제하려면 ALTER TABLE의 MODIFY, ADD, DROP COLUMN을 사용해야 한다. 따라서 속성 타입 변경은 CREATE TABLE에 포함되지 않는 기능이다.