11단원 '데이터베이스와 관계 모델'의 열 레슨에서 한 문제씩 10문제를 내고, 끝에 실기 꼴 3문제를 두었습니다. 2과목의 첫 단원이라 앞 단원에서 섞어 온 문제는 없습니다. 1~10번은 보기 넷 가운데 하나를 고른 뒤 정답을 펼쳐 맞춰 보고, 11~13번은 종이에 답을 끝까지 쓴 뒤 펼치세요. 띄어쓰기만 다르면 같은 답입니다.
문제에 쓰는 표와 값은 아래 네 릴레이션입니다. 학생의 학과코드는 학과를, 수강의 학번은 학생을, 수강의 과목코드와 과목의 선수과목은 과목을 가리킵니다. 학생의 학년은 1부터 4까지만 받습니다.
학과
| 학과코드 | 학과명 | 건물 |
|---|---|---|
| CS | 컴퓨터 | 공학관 |
| EE | 전자 | 공학관 |
| BA | 경영 | 경영관 |
학생
| 학번 | 이름 | 학년 | 학과코드 |
|---|---|---|---|
| 101 | 김민수 | 3 | CS |
| 102 | 이서준 | 2 | CS |
| 103 | 김지민 | 2 | CS |
| 104 | 박서연 | 1 | EE |
| 105 | 최민준 | 3 | EE |
| 106 | 정하윤 | 3 | EE |
| 107 | 강도현 | 1 | NULL |
과목
| 과목코드 | 과목명 | 학점 | 선수과목 |
|---|---|---|---|
| DS | 자료구조 | 3 | NULL |
| OS | 운영체제 | 3 | DS |
| NW | 네트워크 | 2 | OS |
수강
| 학번 | 과목코드 | 점수 |
|---|---|---|
| 101 | DS | 85 |
| 101 | OS | 75 |
| 101 | NW | 80 |
| 102 | DS | 70 |
| 102 | OS | 60 |
| 103 | DS | 65 |
| 103 | NW | 55 |
| 104 | OS | 75 |
| 104 | NW | 95 |
| 105 | DS | 100 |
| 105 | NW | 90 |
| 107 | NW | 50 |
문제 1
데이터베이스의 정의 넷에 대한 설명으로 옳지 않은 것을 고르세요.
- ① 통합된 데이터 — 같은 데이터가 여러 곳에 되풀이되지 않게 한데 모았습니다.
- ② 저장된 데이터 — 컴퓨터가 읽는 저장 장치에 담겨 있습니다.
- ③ 운영 데이터 — 데이터가 늘고 줄며 늘 지금의 모습을 담습니다.
- ④ 공용 데이터 — 여러 사용자와 응용 프로그램이 함께 씁니다.
정답
③ — 운영 데이터는 조직의 업무를 해 나가는 데 꼭 있어야 하는 데이터라는 뜻입니다. ③이 설명한 것은 정의가 아니라 데이터베이스의 특징 가운데 계속적인 변화입니다.
- ① 맞습니다. 중복을 줄여 한데 모았다는 쪽이 통합된 데이터입니다.
- ② 맞습니다. 사람의 기억이나 종이가 아니라 컴퓨터가 읽는 장치에 있다는 쪽입니다.
- ④ 맞습니다. 한 프로그램이 혼자 쓰지 않고 여럿이 나눠 쓴다는 쪽입니다.
다시 볼 레슨: 데이터베이스와 DBMS
문제 2
중고 서점의 데이터베이스에서 판매 기록이 늘어, 저장 장치를 더 빠른 것으로 바꾸고 판매 기록을 판매일 순서대로 붙여 담도록 고쳤습니다. 표와 열, 손님용 검색 화면은 그대로입니다. 이때 바뀐 스키마와 드러난 데이터 독립성으로 알맞은 것을 고르세요.
- ① 개념 스키마 · 논리적 데이터 독립성
- ② 개념 스키마 · 물리적 데이터 독립성
- ③ 내부 스키마 · 논리적 데이터 독립성
- ④ 내부 스키마 · 물리적 데이터 독립성
정답
④ — 데이터를 어느 장치에 어떤 순서로 담을지 정하는 층이 내부 스키마입니다. 내부 스키마가 바뀌어도 위 두 층과 응용 프로그램이 그대로인 성질이 물리적 데이터 독립성입니다.
- ① 두 오해가 겹쳤습니다. 담는 자리와 순서를 바꾼 것은 내부 스키마의 변경이고, 그때 지켜진 것은 물리적 데이터 독립성입니다.
- ② 저장 쪽 변경을 개념 스키마에 넣었습니다. 개념 스키마에 적는 것은 표·열·관계와 지킬 규칙입니다.
- ③ 층은 맞게 짚고 독립성을 바꿔 봤습니다. 논리적 데이터 독립성은 개념 스키마가 바뀌어도 외부 스키마가 그대로인 성질입니다.
다시 볼 레슨: 스키마 3단계와 데이터 독립성
문제 3
데이터베이스 설계 단계와 그 단계에서 나오는 산출물을 짝지은 것으로 옳지 않은 것을 고르세요.
- ① 요구 조건 분석 — 요구 조건 명세서
- ② 개념적 설계 — E-R 다이어그램
- ③ 논리적 설계 — 저장 레코드 양식과 접근 경로
- ④ 구현 — SQL 문으로 만든 데이터베이스
정답
③ — 저장 레코드 양식과 접근 경로는 물리적 설계에서 나옵니다. 논리적 설계에서는 표 이름과 열, 기본키를 적은 릴레이션 스키마가 나오고 정규화도 여기서 합니다.
- ① 맞습니다. 사용자에게 들은 것을 정리해 남긴 문서입니다.
- ② 맞습니다. 어느 DBMS를 쓸지와 상관없이 그리는 그림입니다.
- ④ 맞습니다. 정한 대로 표를 만들고 데이터를 넣는 단계입니다.
다시 볼 레슨: 데이터베이스 설계 단계
문제 4
세탁소 업무를 E-R 다이어그램으로 그립니다. 접수 한 건에 옷이 여러 점 들어오고, 옷에는 '첫째 옷'처럼 그 접수 안에서만 쓰는 번호가 붙습니다. 어느 접수인지 모르면 옷 하나를 가려낼 수 없습니다. 옷을 그릴 기호로 알맞은 것을 고르세요.
- ① 사각형
- ② 이중 사각형
- ③ 이중 마름모
- ④ 이중 타원
정답
② — 자기 속성만으로 하나하나를 가려내지 못하고 다른 개체에 기대는 개체를 약한 개체라 하고, 이중 사각형으로 그립니다.
- ① 자기 속성으로 하나하나를 가려내는 개체의 기호입니다. 옷의 번호는 접수를 알아야 뜻이 생깁니다.
- ③ 약한 개체와 그것이 기대는 개체를 잇는 관계의 기호입니다. 이 문제는 관계가 아니라 대상 쪽을 묻습니다.
- ④ 값이 여럿일 수 있는 속성의 기호입니다. 옷은 접수에 딸린 값이 아니라 따로 관리하는 대상입니다.
다시 볼 레슨: 개체-관계(E-R) 모델
문제 5
어느 꽃집이 주문을 다음 표로 관리합니다. 이 표가 어긴 릴레이션의 특성을 고르세요.
| 주문번호 | 받는 사람 | 꽃 종류 | 금액 |
|---|---|---|---|
| 501 | 유하린 | 장미 | 30000 |
| 502 | 서도윤 | 장미, 튤립 | 45000 |
| 503 | 유하린 | 튤립 | 30000 |
- ① 모든 값이 원자값이어야 한다
- ② 모든 값이 같은 튜플이 없어야 한다
- ③ 튜플의 순서가 없어야 한다
- ④ 속성의 순서가 없어야 한다
정답
① — 502의 꽃 종류 칸에 값이 둘 들어 있습니다. 릴레이션은 칸마다 더 나눌 수 없는 값을 하나씩만 담습니다. 502를 두 줄로 나눠 꽃 종류를 한 칸에 하나씩 적으면 이 특성을 지킵니다.
- ② 받는 사람과 금액이 두 줄에 겹쳐 보입니다. 모든 값이 같아야 중복 튜플인데, 501과 503은 주문번호와 꽃 종류가 다릅니다.
- ③ 세 줄을 어떤 차례로 늘어놓아도 같은 릴레이션입니다. 이 표는 줄의 차례에 뜻을 두지 않았습니다.
- ④ 네 칸의 자리를 바꿔도 같은 릴레이션입니다. 이 표는 칸의 자리에 뜻을 두지 않았습니다.
다시 볼 레슨: 관계 데이터 모델: 릴레이션
문제 6
사진관이 촬영 예약을 예약 표(예약번호, 고객전화, 촬영일, 담당작가)로 관리합니다. 지금 든 예약 열 건은 고객전화가 모두 다릅니다. 고객전화를 기본키로 삼지 않은 까닭으로 알맞은 것을 고르세요.
- ① 고객전화가 비어 있는 예약이 생길 수 있어, 겹침과 상관없이 최소성이 깨집니다.
- ② 속성 하나만으로는 유일성을 따질 수 없어 둘 이상을 묶어야 합니다.
- ③ 고객전화는 고객 표를 가리키는 외래키이므로 기본키로 쓸 수 없습니다.
- ④ 지금은 겹치지 않지만, 한 고객이 두 번 예약하면 겹칩니다.
정답
④ — 키가 될 수 있는지는 지금 든 열 건만 보고 가리지 않습니다. 같은 고객이 다시 예약하면 고객전화가 두 줄에 같이 나와 유일성이 깨집니다.
- ① 비어 있을 수 있다는 것은 최소성과 다른 이야기입니다. 최소성은 묶음에서 속성을 빼면 유일성이 깨지는지를 보는 성질입니다.
- ② 속성 하나로 된 후보키도 있습니다. 학생의 학번처럼 값이 겹치지 않으면 하나로도 됩니다.
- ③ 외래키도 기본키가 될 수 있습니다. 수강의 기본키 (학번, 과목코드)는 둘 다 다른 표를 가리키는 외래키입니다.
다시 볼 레슨: 키의 종류
문제 7
네 릴레이션에 참조 동작을 아무것도 적지 않았습니다. 다음 문장을 하나씩 처음 데이터에 돌릴 때, 오류 없이 실행되는 것을 고르세요.
- ①
DELETE FROM 학과 WHERE 학과코드 = 'BA'; - ②
DELETE FROM 학과 WHERE 학과코드 = 'CS'; - ③
UPDATE 학생 SET 학과코드 = 'AR' WHERE 학번 = 101; - ④
INSERT INTO 학생 VALUES (108, '송유나', 5, 'CS');
정답
① — BA를 가리키는 학생이 없어 지울 수 있습니다. 가리키는 자식 행이 없으면 부모 행을 지워도 참조 무결성이 깨지지 않습니다.
- ② 학생 101·102·103이 CS를 가리킵니다. 참조 동작을 적지 않으면 자식 행이 있는 부모 행은 지워지지 않습니다.
- ③ 학과에 AR이 없습니다. 외래키 값은 부모의 기본키에 있는 값이거나 NULL이어야 하므로 참조 무결성에 걸립니다.
- ④ 학년에 5를 넣었습니다. 학년은 1부터 4까지로 정해 두었으므로 도메인 무결성에 걸립니다.
다시 볼 레슨: 무결성 제약 조건
문제 8
다음 관계대수 식의 결과는 몇 튜플인지 고르세요.
π 학년, 학과코드 (학생)
- ① 3튜플
- ② 4튜플
- ③ 5튜플
- ④ 7튜플
정답
③ — 일곱 학생에게서 학년과 학과코드만 남기면 (3, CS)·(2, CS)·(2, CS)·(1, EE)·(3, EE)·(3, EE)·(1, NULL)입니다. 프로젝트의 결과도 릴레이션이라 겹치는 튜플은 하나만 남아 다섯이 됩니다.
- ① 학년만 남긴 결과를 셌습니다. 학년 하나로 줄이면 1·2·3 세 튜플이지만, 이 식은 속성 둘을 남깁니다.
- ② 학과코드가 NULL인 강도현을 뺐습니다. 프로젝트는 값이 NULL인 튜플도 남깁니다.
- ④ 겹치는 튜플을 그대로 셌습니다. 이서준과 김지민은 (2, CS)로, 최민준과 정하윤은 (3, EE)로 같아 둘씩 하나가 됩니다.
다시 볼 레슨: 관계대수: 셀렉트·프로젝트·조인·디비전
문제 9
학과 표(3열·3행)와 과목 표(4열·3행)의 카티션 곱 학과 × 과목을 구했습니다. 결과 릴레이션의 차수와 카디널리티로 알맞은 것을 고르세요.
- ① 차수 7 · 카디널리티 6
- ② 차수 7 · 카디널리티 9
- ③ 차수 12 · 카디널리티 6
- ④ 차수 12 · 카디널리티 9
정답
② — 카티션 곱은 두 릴레이션의 튜플을 하나씩 모두 짝짓습니다. 속성은 옆으로 이어 붙어 차수가 3 + 4 = 7이고, 튜플은 짝마다 하나씩 생겨 카디널리티가 3 × 3 = 9입니다.
- ① 카디널리티도 차수처럼 더했습니다. 튜플은 짝마다 하나씩 생기니 곱합니다.
- ③ 두 규칙을 거꾸로 썼습니다. 속성 수는 더하고, 튜플 수는 곱합니다.
- ④ 차수도 카디널리티처럼 곱했습니다. 속성은 옆으로 이어 붙을 뿐이라 더합니다.
다시 볼 레슨: 관계대수: 집합 연산과 카티션 곱 · 관계 데이터 모델: 릴레이션
문제 10
다음 관계해석 식의 결과는 몇 명인지 고르세요.
{ t.이름 | 학생(t)
∧ ∀u(수강(u)
∧ u.학번 = t.학번
→ u.과목코드 <> 'OS') }
- ① 3명
- ② 4명
- ③ 6명
- ④ 7명
정답
② — ∀가 참이려면 조건을 어기는 수강이 하나도 없어야 합니다. 운영체제를 들은 수강 행이 없는 학생이 남아 김지민·최민준·정하윤·강도현 넷입니다.
- ① 수강 행이 하나도 없는 정하윤을 뺐습니다. 조건을 어기는 수강이 없으므로 ∀는 참입니다.
- ③ ∀를 ∃로 읽어 '운영체제가 아닌 수강이 하나라도 있는 학생'을 셌습니다. 김민수·이서준·박서연이 들어오고 수강이 없는 정하윤이 빠져 여섯이 됩니다.
- ④ 조건을 보지 않고 학생을 모두 셌습니다. 김민수·이서준·박서연은 운영체제를 들어 빠집니다.
다시 볼 레슨: 관계해석
문제 11 (실기)
영화관 예매 데이터베이스에 회원 표와 예매 표가 있습니다. 예매 표의 회원번호 자리에는 회원 표에서 회원 한 명을 집어내는 속성의 값이나 NULL만 들어갈 수 있습니다. 답을 끝까지 쓴 뒤 정답을 펼치세요.
- (가) 예매 표의 회원번호처럼 다른 릴레이션의 그 속성을 가리키는 속성의 이름을 영문 약어로 쓰세요.
- (나) 회원 표에서 회원 한 명을 집어내도록 골라 둔 그 속성의 이름을 영문 약어로 쓰세요.
정답
받는 답: (가) FK · (나) PK
(가)의 실마리는 '다른 릴레이션을 가리키고, 비어 있어도 된다'입니다. (나)는 '그 릴레이션에서 한 줄을 집어내도록 골라 둔 하나'입니다.
- 같은 이름의 다른 꼴: (가) 외래키·Foreign Key · (나) 기본키·Primary Key — 한글 이름과 영문 원어입니다. 문제가 영문 약어로 물었습니다.
- 틀리는 꼴 PK — (가)에: 자기 릴레이션에서 한 줄을 집어내도록 고른 키입니다. (가)는 다른 릴레이션을 가리키는 쪽입니다.
- 틀리는 꼴 후보키 — (나)에: 유일성과 최소성을 갖춘 묶음을 모두 가리키는 이름입니다. 그 가운데 골라 둔 하나를 묻고 있습니다.
다시 볼 레슨: 키의 종류
문제 12 (실기)
어느 농구 리그 데이터베이스에 출전(선수번호, 경기번호)과 경기(경기번호) 두 릴레이션이 있습니다. '리그의 모든 경기에 한 번도 빠지지 않고 나온 선수'를 구하려고 두 릴레이션에 연산 하나를 걸었습니다. 그 연산의 이름을 한글로 쓰고 기호도 함께 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.
정답
받는 답: 디비전(÷)
실마리는 '한쪽 릴레이션의 값을 하나도 빠뜨리지 않고 모두 가진 줄만 남긴다'입니다. 결과의 속성은 나뉘는 쪽의 속성에서 나누는 쪽의 속성을 뺀 선수번호 하나입니다.
- 같은 이름의 다른 꼴: DIVISION — 영문 이름입니다. 문제가 한글 이름과 기호로 물었습니다.
- 틀리는 꼴 조인(⋈): 공통 속성의 값이 같은 줄끼리 이어 붙이는 연산입니다. 몇 경기에 나왔는지는 가려 주지 않아 한 경기만 나온 선수도 남습니다.
- 틀리는 꼴 교집합(∩): 두 릴레이션에 모두 있는 줄만 남기는 연산입니다. 출전은 속성이 둘, 경기는 하나라 합병 가능하지 않아 걸 수 없습니다.
다시 볼 레슨: 관계대수: 셀렉트·프로젝트·조인·디비전 · 관계대수: 집합 연산과 카티션 곱
문제 13 (실기)
음악 스트리밍 데이터베이스가 다음 두 입력을 거절했습니다. (가)·(나)에서 지켜진 규칙의 이름을 영문으로 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.
- (가) 재생기록 표의 곡번호 자리에, 곡 표에서 이미 지워진 곡의 번호를 적으려 했습니다.
- (나) 재생기록 표의 별점 자리에 6을 적으려 했습니다. 이 자리는 1부터 5까지만 받기로 정해 두었습니다.
정답
받는 답: (가) Referential Integrity · (나) Domain Integrity
(가)의 실마리는 '가리키는 쪽 표에 그 값이 없다', (나)는 '값이 미리 정해 둔 범위를 벗어났다'입니다.
- 같은 이름의 다른 꼴: (가) 참조 무결성 · (나) 도메인 무결성 — 한글 이름입니다. 문제가 영문으로 물었습니다.
- 틀리는 꼴 Entity Integrity — (가)에: 한 줄을 집어내는 속성이 비거나 겹치는 것을 막는 규칙입니다. (가)의 곡번호는 비지도 겹치지도 않았습니다.
- 틀리는 꼴 Referential Integrity — (나)에: 가리키는 쪽에 그 값이 있는지 보는 규칙입니다. 별점은 다른 표를 가리키지 않습니다.
다시 볼 레슨: 무결성 제약 조건