데이터베이스 기초

수주 표(수주번호, 상품번호, 수량, 고객번호, 고객명)의 기본 키는 {수주번호, 상품번호}이고, 함수 종속은 {수주번호, 상품번호} → 수량, 수주번호 → 고객번호, 고객번호 → 고객명이다. 이 표를 제3정규형까지 정규화한 결과로 올바른 것은?

  1. A수주명세(수주번호, 상품번호, 수량, 고객번호), 고객(고객번호, 고객명)
  2. B수주명세(수주번호, 상품번호, 수량), 수주(수주번호, 고객번호), 고객(고객번호, 고객명)
  3. C수주명세(수주번호, 상품번호, 수량), 수주(수주번호, 고객번호, 고객명)
정답과 해설 보기

정답: B. 수주명세(수주번호, 상품번호, 수량), 수주(수주번호, 고객번호), 고객(고객번호, 고객명)

제2정규형은 제1정규형이면서 기본 키의 일부에만 종속하는 열(부분 함수 종속)이 없는 상태입니다. 수주번호 → 고객번호는 기본 키의 일부인 수주번호만으로 고객번호가 정해지는 부분 함수 종속이므로, 원래 표는 제1정규형이지만 제2정규형이 아닙니다. 수주번호로 정해지는 열을 수주(수주번호, 고객번호, 고객명)로 나누면 제2정규형이 됩니다. 제3정규형은 제2정규형이면서 기본 키 이외의 열을 거쳐 정해지는 열(이행적 함수 종속)이 없는 상태입니다. 수주 표에는 수주번호 → 고객번호 → 고객명이라는 이행적 함수 종속이 남아 있으므로, 고객(고객번호, 고객명)을 다시 나눕니다. 이렇게 하여 수주명세(수주번호, 상품번호, 수량), 수주(수주번호, 고객번호), 고객(고객번호, 고객명)의 3개 표가 제3정규형이 됩니다. 나눈 표는 수주번호나 고객번호로 조인하면 원래 표로 되돌릴 수 있습니다.

이 분야 연습하기 분야로 돌아가기

데이터베이스 기초의 다른 문제

  1. 사원 표(사원번호, 이름, 부서코드, 부서명)의 기본 키는 사원번호이며, 모든 열은 하나의 값만 가진다. 함수 종속은 사원번호 → 이름, 사원번호 → 부서코드, 부서코드 → 부서명이다. 이 표의 정규형으로 올바른 것은?
  2. 읽기가 대부분을 차지하는 집계용 데이터베이스에서 정규화한 표를 일부러 하나로 합쳐 같은 데이터를 중복해서 갖게 하는 설계(반정규화)를 하는 경우가 있다. 이 설계의 장점과 단점의 조합으로 올바른 것은?
  3. E-R 다이어그램에서 학생과 과목 사이에 '한 학생은 여러 과목을 수강하고, 한 과목은 여러 학생이 수강한다'는 다대다 관계가 있다. 이 관계를 관계형 데이터베이스의 표로 구현하는 방법으로 적절한 것은?
  4. 계좌 표에서 트랜잭션을 시작하고, 계좌 A의 잔액에서 300을 빼는 UPDATE와 계좌 B의 잔액에 300을 더하는 UPDATE를 실행했다. 그 후 COMMIT 대신 ROLLBACK을 실행했다. 계좌 표는 어떻게 되는가?
  5. 트랜잭션이 가져야 할 ACID 특성 중 '계좌 A에서 출금하여 계좌 B에 입금하는 이체 처리가, 도중에 장애가 일어나도 둘 다 수행되거나 전혀 수행되지 않거나 둘 중 하나가 된다'는 성질은?