12단원 '정규화'의 여섯 레슨에서 한 문제씩 6문제를 내고, 앞 단원에서 2문제를 섞었으며, 끝에 실기 꼴 3문제를 두었습니다. 섞어 온 문제가 어느 레슨인지는 정답을 펼치면 보입니다. 1~8번은 보기 넷 가운데 하나를 고른 뒤 정답을 펼쳐 맞춰 보고, 9~11번은 종이에 답을 끝까지 쓴 뒤 펼치세요. 띄어쓰기만 다르면 같은 답입니다.
문제 1
어느 학원이 수강료 납부를 수강료(학생번호, 학생이름, 강좌코드, 강좌명, 납부액) 한 표에 적습니다. 기본키는 '학생번호 + 강좌코드'입니다. 다음 가운데 삽입 이상이 생기는 것을 고르세요.
- ① 어느 강좌도 신청하지 않은 학생의 이름만 이 표에 올려 두려 하는데, 강좌코드 없이는 행을 만들 수 없다
- ② 이름이 바뀐 학생의 행 여럿 가운데 하나만 손대, 같은 학생의 이름이 행마다 다르다
- ③ 수강생이 한 명뿐인 강좌의 납부 행을 치우니, 그 강좌가 열렸다는 사실도 함께 없어진다
- ④ 같은 강좌를 신청한 학생이 늘어 강좌명이 행마다 되풀이된다
정답
① — 넣고 싶은 정보만으로는 행을 넣을 수 없는 문제가 삽입 이상입니다. 학생 이름만 올리려 해도 기본키의 일부인 강좌코드를 비울 수 없어 막힙니다.
- ② 같은 사실이 적힌 행 가운데 일부만 고쳐 값이 어긋났습니다. 갱신 이상입니다.
- ③ 행을 치우면서 남겨야 할 사실까지 잃었습니다. 삭제 이상입니다.
- ④ 이상 현상의 이름이 아니라 그 원인입니다. 한 표에 여러 주제를 담아 생긴 중복이고, 이 중복 때문에 세 이상 현상이 생깁니다.
다시 볼 레슨: 이상 현상
문제 2
학과(학과코드, 학과명, 건물) · 학생(학번, 이름, 학년, 학과코드) · 과목(과목코드, 과목명, 학점) · 수강(학번, 과목코드, 점수) 네 표를 씁니다. 과목은 자료구조(DS, 3학점) · 운영체제(OS, 3학점) · 네트워크(NW, 2학점) 셋이고, 학생은 한 학년에만 속합니다. 다음 가운데 함수 종속으로 성립하지 않는 것을 고르세요.
- ①
학과코드 → 학과명 - ②
과목코드 → 학점 - ③
학번 → 학년 - ④
학점 → 과목코드
정답
④ — 학점이 3인 과목이 자료구조와 운영체제 둘입니다. 학점 값 하나에 과목코드가 둘이라 하나로 정해지지 않습니다.
- ① 성립합니다. 학과코드 하나에 학과명이 하나로 정해집니다.
- ② 성립합니다. 과목코드 하나에 학점이 하나로 정해집니다. 방향을 돌린 ④는 성립하지 않습니다.
- ③ 성립합니다. 학번 하나에 학년이 하나로 정해집니다. 학년 값 하나에는 학생이 여럿이라 방향을 돌리면 성립하지 않습니다.
다시 볼 레슨: 함수 종속
문제 3
수선 표(의뢰번호, 품목번호, 수선비, 품목명)의 값은 모두 원자값입니다. 기본키는 '의뢰번호 + 품목번호'이고, 품목명은 품목번호만으로 정해집니다. 이 표가 만족하는 가장 높은 정규형을 고르세요.
- ① 1정규형
- ② 2정규형
- ③ 3정규형
- ④ BCNF
정답
① — 품목명이 기본키의 일부인 품목번호만으로 정해지므로 부분 함수 종속이 남아 있습니다. 값이 모두 원자값이라 1정규형은 만족하고, 2정규형부터는 아닙니다.
- ② 부분 함수 종속을 보지 못했습니다. 2정규형은 키가 아닌 속성이 모두 기본키 전체에 종속되어야 합니다.
- ③ 떼어 낼 종속이 없다고 봤습니다. 품목명을 품목번호와 함께 다른 표로 떼어 내 2정규형을 만든 뒤에 3정규형을 따집니다.
- ④ 결정자가 모두 후보키라고 봤습니다. 품목번호는 혼자서 행을 가려내지 못해 후보키가 아닙니다. 정규형은 앞 단계를 만족한 위에서 따집니다.
다시 볼 레슨: 1·2·3정규형
문제 4
어떤 표의 한 칸에 값이 둘 들어 있고, 나머지는 모두 지켜져 있습니다. 이 표에 대한 설명으로 알맞은 것을 고르세요.
- ① 릴레이션의 특성은 지키지만 1정규형은 아니다
- ② 1정규형은 만족하지만 릴레이션의 특성은 어긴다
- ③ 릴레이션의 특성도 1정규형도 지키지 못한다
- ④ 릴레이션의 특성도 1정규형도 지킨다
정답
③ — 한 칸에 더 나눌 수 없는 값 하나만 두라는 요구는 릴레이션의 특성에도 있고 1정규형의 조건에도 있습니다. 같은 요구라서 한쪽이 깨지면 다른 쪽도 깨집니다.
- ① 원자값을 1정규형만 요구한다고 봤습니다. 릴레이션의 특성 넷에도 모든 값이 원자값이라는 조건이 들어 있습니다.
- ② 원자값을 릴레이션의 특성만 요구한다고 봤습니다. 1정규형의 조건이 바로 모든 값이 원자값인 것입니다.
- ④ 한 칸의 값이 둘이어도 읽을 때 쪼개면 된다고 봤습니다. 쪼개 읽어야 하는 값은 원자값이 아닙니다.
다시 볼 레슨: 관계 데이터 모델: 릴레이션 · 1·2·3정규형
문제 5
어느 학원 강사가 가르치는 과목이 셋이고, 강의할 수 있는 요일이 둘입니다. 과목과 요일은 서로 상관이 없습니다. 이것을 강사배정(강사번호, 과목, 요일) 한 표에 담을 때 생기는 행 수와, 이 표가 지키지 못하는 정규형으로 알맞은 것을 고르세요.
- ① 5행 · 4정규형
- ② 5행 · 5정규형
- ③ 6행 · 4정규형
- ④ 6행 · 5정규형
정답
③ — 과목과 요일이 서로 상관이 없으니 모든 조합이 행으로 생겨 3 × 2 = 6행입니다. 값 하나가 값 여러 개를 거느리고 그 묶음이 다른 속성과 상관없는 관계가 다치 종속이고, 다치 종속을 없앤 단계가 4정규형입니다.
- ① 두 묶음을 더해 3 + 2 = 5로 셌습니다. 서로 상관이 없으면 조합이 곱으로 늘어납니다.
- ② 두 오해가 겹쳤습니다. 행은 곱으로 늘고, 걸리는 단계는 4정규형입니다.
- ④ 표 셋으로 나눠야 한다고 봤습니다. 이 표는 강사배정을 과목 쪽과 요일 쪽 둘로 나누면 끝납니다. 5정규형은 둘로 나눠서는 되살아나지 않을 때 걸립니다.
다시 볼 레슨: BCNF·4NF·5NF
문제 6
어느 체육관이 사물함을 사물함(사물함번호, 층, 칸번호, 사용자) 표로 관리합니다. 사물함번호는 사물함마다 다릅니다. 층과 칸번호를 함께 보면 사물함 하나가 가려집니다. 한 사물함은 한 사람만 쓰지만, 한 사람이 사물함을 여럿 쓸 수 있습니다. 이 표의 후보키를 모두 든 것을 고르세요.
- ① (사물함번호)
- ② (사물함번호) · (층, 칸번호)
- ③ (사물함번호) · (층, 칸번호) · (사용자)
- ④ (사물함번호) · (층, 칸번호) · (사물함번호, 층, 칸번호)
정답
② — 사물함번호는 혼자서 모든 행을 가려냅니다. (층, 칸번호)도 모든 행을 가려내고 둘 가운데 하나를 빼면 가려내지 못합니다. 둘 다 유일성과 최소성을 갖춘 후보키입니다.
- ① 한 표의 후보키는 하나뿐이라고 봤습니다. 후보키가 여럿일 수 있고, 그 가운데 하나를 골라 기본키로 삼습니다.
- ③ 사용자도 후보키라고 봤습니다. 한 사람이 사물함을 여럿 쓰면 같은 사용자가 여러 행에 나와 유일성이 깨집니다.
- ④ 유일성만 보고 최소성을 보지 않았습니다. (사물함번호, 층, 칸번호)는 층과 칸번호를 빼도 가려내므로 후보키가 아니라 슈퍼키입니다.
다시 볼 레슨: 키의 종류
문제 7
어느 쇼핑몰이 상품 목록 화면을 빠르게 하려고, 상품 표에 판매자이름 열을 적어 두었습니다. 판매자 표는 그대로 두었습니다. 이 기법의 이름과 이 때문에 새로 생기는 위험으로 알맞은 것을 고르세요.
- ① 테이블 병합 · 판매자 이름이 바뀌면 적어 둔 곳을 모두 찾아 고쳐야 한다
- ② 중복 열 추가 · 판매자 이름이 바뀌면 적어 둔 곳을 모두 찾아 고쳐야 한다
- ③ 테이블 병합 · 상품 표를 읽을 때마다 판매자 표를 이어야 한다
- ④ 중복 열 추가 · 상품 표를 읽을 때마다 판매자 표를 이어야 한다
정답
② — 옆 표에서 자주 꺼내 쓰는 열을 이 표에도 적어 두는 기법이 중복 열 추가입니다. 적어 둔 값은 베낀 것이라 원본이 바뀌어도 따라 바뀌지 않아, 바뀔 때마다 적어 둔 곳을 모두 고쳐야 합니다.
- ① 위험은 맞게 짚고 기법을 바꿔 봤습니다. 테이블 병합은 두 표를 하나로 합치는 기법이고, 여기서는 판매자 표가 그대로 남아 있습니다.
- ③ 두 오해가 겹쳤습니다. 표를 합치지도 않았고, 조인을 없애려고 한 일이라 조인은 줄어듭니다.
- ④ 기법은 맞게 짚고 위험을 거꾸로 봤습니다. 열을 적어 둔 덕분에 판매자 표를 잇지 않아도 이름을 읽습니다.
다시 볼 레슨: 반정규화
문제 8
어느 도서관을 E-R 다이어그램으로 그렸습니다. 지점 하나에 서가가 여럿 있고, 서가는 '3번 서가'처럼 지점 안에서만 쓰는 번호로 불려 어느 지점인지 모르면 가려낼 수 없습니다. 회원은 연락처를 여럿 적을 수 있습니다. 서가와 연락처를 표로 바꾼 결과로 알맞은 것을 고르세요.
- ① 지점 표에 서가번호 열을 더하고, 회원 표에 연락처 열을 더한다
- ② 서가(지점코드, 서가번호, 칸수) 표를 만들어 앞 두 열을 합쳐 기본키로 하고, 회원 표에 연락처 열을 더한다
- ③ 지점 표에 서가번호 열을 더하고, 회원연락처(회원번호, 연락처) 표를 만들어 두 열을 합쳐 기본키로 한다
- ④ 서가(지점코드, 서가번호, 칸수) 표를 만들어 앞 두 열을 합쳐 기본키로 하고, 회원연락처(회원번호, 연락처) 표를 만들어 두 열을 합쳐 기본키로 한다
정답
④ — 자기 속성만으로 가려지지 않는 약한 개체는 기대는 개체의 기본키를 포함해 기본키를 만듭니다. 값이 여럿일 수 있는 다중값 속성은 표를 하나 더 만들고, 개체의 기본키와 함께 기본키로 씁니다.
- ① 둘 다 열 하나로 끝냈습니다. 지점 표의 서가번호 한 칸에 서가 여럿을, 회원 표의 연락처 한 칸에 연락처 여럿을 넣어야 해서 1정규형이 깨집니다.
- ② 약한 개체는 맞게 바꾸고 다중값 속성을 열 하나로 두었습니다. 연락처가 둘이면 한 칸에 값이 둘 들어갑니다.
- ③ 다중값 속성은 맞게 바꾸고 약한 개체를 지점 표의 열로 두었습니다. 지점 하나에 서가가 여럿이라 한 칸에 담을 수 없습니다.
다시 볼 레슨: 논리 데이터 모델링과 품질 검증
문제 9 (실기)
중고차 매매소가 거래(차량번호, 차종명, 매입처코드, 매입처이름, 판매일) 한 표에 판매 기록을 적습니다. 기본키는 차량번호입니다. (가)·(나)에서 생긴 이상 현상의 이름을 영문으로 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.
- (가) 거래가 아직 한 건도 없는 새 매입처는 이 표에 이름만 올릴 방법이 없습니다. 차량번호 없이는 행을 만들 수 없습니다.
- (나) 어느 매입처에서 들여온 차가 한 대뿐이었는데 그 차의 행을 치우니, 그 매입처가 있었다는 것을 알 길이 함께 없어졌습니다.
정답
받는 답: (가) Insertion Anomaly · (나) Deletion Anomaly
(가)의 실마리는 '올리고 싶은 정보만으로는 행을 만들 수 없다', (나)는 '치운 것 말고 남겨야 할 사실까지 잃었다'입니다. 둘 다 매입처 정보를 잃는 이야기라, 올릴 때 막히는지 치울 때 사라지는지로 가릅니다.
- 같은 이름의 다른 꼴: (가) 삽입 이상 · (나) 삭제 이상 — 한글 이름입니다. 문제가 영문으로 물었습니다.
- 틀리는 꼴 Update Anomaly — (나)에: 같은 값이 적힌 행 가운데 일부만 고쳐 값이 어긋나는 문제입니다. (나)는 값을 고치지 않고 행을 치웠습니다.
- 틀리는 꼴 Deletion Anomaly — (가)에: 치울 때 남겨야 할 사실까지 사라지는 문제입니다. (가)는 아직 올리지도 못했습니다.
다시 볼 레슨: 이상 현상
문제 10 (실기)
어느 회사가 출장(사번, 출장일, 출장지코드, 출장지이름, 경비) 한 표에 출장 기록을 적습니다. 기본키는 '사번 + 출장일'이고, 출장지이름은 출장지코드만 보면 정해집니다. (가)·(나)에 맞는 종속의 이름을 한글로 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.
- (가) 경비는 사번과 출장일을 함께 알아야 하나로 정해지고, 어느 하나만으로는 정해지지 않습니다. 경비가 기본키에 대해 갖는 종속입니다.
- (나) 출장지이름은 기본키가 정하는 출장지코드를 거쳐 정해집니다. 출장지이름이 기본키에 대해 갖는 종속입니다.
정답
받는 답: (가) 완전 함수 종속 또는 완전 함수적 종속 · (나) 이행 함수 종속 또는 이행적 함수 종속
(가)의 실마리는 '기본키 전체가 있어야 정해지고 일부만으로는 정해지지 않는다', (나)는 '키가 아닌 속성을 한 번 거쳐 간다'입니다.
- 같은 이름의 다른 꼴: (가) Full Functional Dependency · (나) Transitive Functional Dependency — 영문 이름입니다. 문제가 한글로 물었습니다.
- 틀리는 꼴 부분 함수 종속 — (나)에: 결정자가 기본키의 일부일 때 쓰는 이름입니다. 출장지코드는 기본키의 일부가 아니라 키가 아닌 속성입니다.
- 틀리는 꼴 다치 종속 — (가)에: 값 하나가 값 여러 개를 거느리는 관계의 이름입니다. 경비는 값 하나로 정해집니다.
다시 볼 레슨: 함수 종속
문제 11 (실기)
어느 항공사가 승무원 표를 둡니다. 사원번호와 여권번호는 승무원마다 다르고 비는 일이 없으며, 각각 혼자서 승무원 한 명을 집어냅니다. 이 가운데 사원번호를 골라 승무원을 가리킬 때 늘 쓰기로 했습니다. 고르지 않고 남은 여권번호를 부르는 이름을 한글 이름과 영문으로 함께 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.
정답
받는 답: 대체키(Alternate Key) 또는 보조키(Alternate Key)
실마리는 '혼자서 집어내고 더 뺄 속성도 없지만, 가리킬 때 쓰기로 고른 쪽은 아니다'입니다. 보조키는 자료에 따라 부르는 이름이라 함께 받습니다.
- 같은 이름의 다른 꼴: Alternate Key — 영문만 쓴 꼴입니다. 문제가 한글 이름과 영문을 함께 쓰라고 했습니다.
- 틀리는 꼴 후보키: 사원번호와 여권번호가 둘 다 후보키입니다. 그 가운데 고르지 않고 남은 쪽을 묻고 있습니다.
- 틀리는 꼴 슈퍼키: 최소성을 따지지 않는 키입니다. 여권번호는 혼자로 충분해 더 뺄 속성이 없습니다.
다시 볼 레슨: 키의 종류