Skip to Content
독학사독학사 4단계데이터베이스23. 독학사형 종합 연습 ② 정규화·ER 사상·고급 SQL

이 문제 세트는 실제 기출문제를 그대로 옮긴 것이 아닙니다. 국가평생교육진흥원이 공개한 독학학위제 4단계 데이터베이스 평가영역(출제기준) 중 함수적 종속·정규화·ER/EER 사상·SQL 고급 항목을 근거로, 다루는 개념·계산 유형·오답 구성 방식을 참고해 지문과 데이터를 모두 새로 구성한 예상문제입니다. 실제 회차의 문항 수·배점·시험 시간은 매 공고마다 달라질 수 있으므로 반드시 응시 회차의 공식 공고를 확인하시기 바랍니다. 이 편은 10·11편(ER 사상), 15·17편(FD·정규화), 13·14편(고급 SQL)에서 다룬 내용을 섞은 혼합 문제 22개로 구성했습니다.

정규화 문항은 폐포(closure) 계산과 분해 절차를 해설에 전부 풀어 두었고, SQL 문항은 실행 결과를 표의 데이터로 직접 검산할 수 있게 구성했습니다. 정답 번호만 확인하지 말고, 표의 데이터를 손으로 짚어 가며 검산하시기 바랍니다.

문항 배분

영역문항 수문항 번호
함수적 종속과 이상 현상41–4
정규화 I(1NF–BCNF)55–9
정규화 II(4NF·5NF)210–11
ER/EER → 관계 사상512–16
SQL 고급(그룹화·뷰·서브쿼리·DCL, Oracle 문법)617–22
합계221–22

함수적 종속과 이상 현상 (1–4번)

다음 릴레이션은 1번부터 4번, 9번까지 정규화 문항에서 공통으로 사용합니다.

도서대출(대출번호, 회원번호, 회원이름, 도서번호, 도서명, 저자, 대출일)

대출번호회원번호회원이름도서번호도서명저자대출일
L1M1김하늘B01데이터베이스개론이일산2024-03-02
L2M1김하늘B02자료구조박준서2024-03-05
L3M2정수아B01데이터베이스개론이일산2024-03-10
L4M3오지훈B03운영체제최민규2024-03-12
L5M2정수아B03운영체제최민규2024-03-15

이 릴레이션에는 다음 함수적 종속(FD) 집합 FF가 성립합니다.

F={ 대출번호{회원번호,도서번호,대출일},  회원번호회원이름,  도서번호{도서명,저자} }F = \{\ \text{대출번호} \rightarrow \{\text{회원번호}, \text{도서번호}, \text{대출일}\},\ \ \text{회원번호} \rightarrow \text{회원이름},\ \ \text{도서번호} \rightarrow \{\text{도서명}, \text{저자}\}\ \}
문제 14지선다
위 도서대출 릴레이션의 FD 집합 F가 주어졌을 때, 이 릴레이션의 후보키로 옳은 것은?
문제 24지선다
도서 B01의 저자 정보가 '이일산'에서 '이도현'으로 바뀌었다고 하자. 이 릴레이션에서 저자 정보를 올바르게 수정하려면 L1, L3 두 행을 모두 고쳐야 하고, 하나만 고치면 같은 도서인데 저자가 다르게 저장되는 문제가 생긴다. 이 문제에 해당하는 이상 현상은?
문제 34지선다
위 FD 집합 F에서 {회원번호}의 폐포(closure)를 계산한 결과로 옳은 것은?
문제 44지선다
F에 포함된 도서번호 → 도서명과 도서번호 → 저자로부터 Armstrong 공리의 합집합률(union rule)을 이용해 유도할 수 있는 함수적 종속은?

정규화 I: 1NF~BCNF (5–9번)

문제 54지선다
어느 테이블의 '취미' 컬럼에 한 학생당 '축구, 등산'처럼 여러 값을 콤마로 묶어 한 칸에 저장하고 있다. 이 설계가 위반하는 정규형은?
문제 64지선다
수강성적(학번, 과목코드, 학생이름, 성적) 릴레이션의 기본키는 {학번, 과목코드}이고, 학번 → 학생이름이 성립하며 학번만으로는 성적을 결정할 수 없다. 이 릴레이션에 대한 설명으로 옳은 것은?
문제 74지선다
앞서 제시한 도서대출(대출번호, 회원번호, 회원이름, 도서번호, 도서명, 저자, 대출일) 릴레이션이 3NF를 만족하는지에 대한 설명으로 옳은 것은? (후보키는 {대출번호}이다)
문제 84지선다
BCNF(Boyce-Codd 정규형)의 판별 기준으로 옳은 것은?
문제 94지선다
도서대출 릴레이션을 이행적 종속 기준으로 무손실·의존성 보존 분해했을 때, 결과로 가장 적절한 스키마 구성은?

정규화 II: 4NF·5NF (10–11번)

문제 104지선다
강사담당(강사명, 담당과목, 보유자격증) 릴레이션에서 한 강사가 여러 과목을 담당하고 동시에 여러 자격증을 보유하며, 담당과목과 보유자격증이 서로 완전히 독립적이어서 강사명이 같은 행끼리는 모든 조합이 테이블에 나타난다. 이 릴레이션에 대한 설명으로 옳은 것은?
문제 114지선다
조인 종속(JD)과 다중값 종속(MVD)의 관계에 대한 설명으로 옳지 않은 것은?

ER/EER → 관계 사상 (12–16번)

다음 EER 다이어그램 설명은 12번부터 16번까지 공통으로 사용합니다. “병원(강한 엔티티, 병원코드가 기본키)은 여러 의사를 고용한다(1:N, employs). 의사(강한 엔티티, 의사번호가 기본키)는 여러 환자를 진료하고 환자도 여러 의사에게 진료받을 수 있다(M:N, treats, 관계 속성으로 진료일·진단내용을 가짐). 환자(강한 엔티티, 환자번호가 기본키)는 보호자연락처(약한 엔티티, 부분 키는 연락처이름)를 가진다. 의료진(ISA 슈퍼클래스)은 의사와 간호사(ISA 서브클래스, 두 서브클래스는 서로 겹치지 않고 모든 의료진이 둘 중 하나에 반드시 속함)로 나뉜다.”

문제 124지선다
강한 엔티티 집합을 관계 스키마로 변환하는 규칙에 대한 설명으로 옳은 것은?
문제 134지선다
환자의 약한 엔티티인 보호자연락처(부분 키: 연락처이름)를 관계 스키마로 변환할 때 기본키 구성으로 옳은 것은?
문제 144지선다
병원(1) – 의사(N) 관계(employs)를 관계 스키마로 사상하는 방법으로 옳은 것은?
문제 154지선다
의사(M) – 환자(N) 진료 관계(treats, 관계 속성: 진료일·진단내용)를 관계 스키마로 사상하는 방법으로 옳은 것은?
문제 164지선다
의료진(ISA 슈퍼클래스) – 의사·간호사(ISA 서브클래스, 분리적이며 전체 참여)를 관계 스키마로 사상할 때 가장 적합한 전략은?

SQL 고급: 그룹화·뷰·서브쿼리·DCL (17–22번, Oracle 문법)

다음 두 테이블은 17번부터 22번까지 공통으로 사용합니다.

고객(고객번호, 고객명, 등급)

고객번호고객명등급
C1김도윤VIP
C2이서준일반
C3박서연VIP

주문(주문번호, 고객번호, 상품코드, 수량, 단가)

주문번호고객번호상품코드수량단가
O1C1P01215000
O2C1P02130000
O3C2P01315000
O4C3P03NULL20000
O5C2P02230000

O4는 아직 수량이 확정되지 않아 NULL로 남아 있는 주문입니다.

문제 174지선다
다음 질의를 실행했을 때 결과에 남는 고객번호는?
SELECT 고객번호
FROM 주문
GROUP BY 고객번호
HAVING SUM(수량 * 단가) > 60000;
문제 184지선다
상관 서브쿼리(correlated subquery)를 이용한 EXISTS·NOT EXISTS 사용법에 대한 설명으로 옳지 않은 것은?
문제 194지선다
다음과 같이 고객과 주문을 조인한 뷰를 정의했다. VIPORDER 뷰에 대한 설명으로 옳지 않은 것은? CREATE VIEW VIPORDER AS SELECT c.고객명, o.주문번호, o.수량, o.단가 FROM 고객 c JOIN 주문 o ON c.고객번호 = o.고객번호 WHERE c.등급 = 'VIP';
문제 204지선다
다음 SQL 문을 순서대로 실행했다. 세 번째 문장 실행 결과에 대한 설명으로 옳은 것은?
GRANT SELECT ON 주문 TO park WITH GRANT OPTION;
GRANT SELECT ON 주문 TO choi; -- (park이 choi에게 부여)
REVOKE SELECT ON 주문 FROM park;
(choi의 SELECT 권한은 park으로부터 전파받은 것이라고 가정한다)
문제 214지선다
다음 두 질의의 차집합(Oracle의 MINUS)을 계산한 결과의 행 수는? 질의1: 상품코드가 'P01'인 주문의 고객번호 목록, 질의2: 상품코드가 'P02'인 주문의 고객번호 목록. (SELECT 고객번호 FROM 주문 WHERE 상품코드='P01') MINUS (SELECT 고객번호 FROM 주문 WHERE 상품코드='P02')
문제 224지선다
다음 질의를 실행하면 반환되는 행 수는?
SELECT *
FROM 주문 O1
WHERE O1.수량 > (SELECT AVG(수량) FROM 주문 O2);

참고 자료

Last updated on