데이터베이스 기초

사원 표(사원번호, 이름, 부서코드, 부서명)의 기본 키는 사원번호이며, 모든 열은 하나의 값만 가진다. 함수 종속은 사원번호 → 이름, 사원번호 → 부서코드, 부서코드 → 부서명이다. 이 표의 정규형으로 올바른 것은?

  1. A제2정규형이지만 제3정규형은 아니다
  2. B제1정규형이지만 제2정규형은 아니다
  3. C제3정규형이다
정답과 해설 보기

정답: A. 제2정규형이지만 제3정규형은 아니다

모든 열이 반복 없는 하나의 값을 가지므로 제1정규형입니다. 기본 키가 사원번호 한 열뿐이므로 기본 키의 일부에만 종속하는 부분 함수 종속은 일어날 수 없어 제2정규형이기도 합니다. 그러나 부서명은 사원번호 → 부서코드 → 부서명처럼 기본 키가 아닌 부서코드를 거쳐 정해지는 이행적 함수 종속이므로 제3정규형이 아닙니다. 이대로라면 같은 부서 사원의 행마다 부서명이 반복해서 기록되어, 부서명을 바꿀 때 여러 행을 고쳐 써야 합니다. 부서 표(부서코드, 부서명)를 나누고 사원 표에는 부서코드만 남기면 제3정규형이 됩니다. 이때 사원 표의 부서코드는 부서 표를 참조하는 외래 키가 됩니다.

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

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

  1. 읽기가 대부분을 차지하는 집계용 데이터베이스에서 정규화한 표를 일부러 하나로 합쳐 같은 데이터를 중복해서 갖게 하는 설계(반정규화)를 하는 경우가 있다. 이 설계의 장점과 단점의 조합으로 올바른 것은?
  2. E-R 다이어그램에서 학생과 과목 사이에 '한 학생은 여러 과목을 수강하고, 한 과목은 여러 학생이 수강한다'는 다대다 관계가 있다. 이 관계를 관계형 데이터베이스의 표로 구현하는 방법으로 적절한 것은?
  3. 계좌 표에서 트랜잭션을 시작하고, 계좌 A의 잔액에서 300을 빼는 UPDATE와 계좌 B의 잔액에 300을 더하는 UPDATE를 실행했다. 그 후 COMMIT 대신 ROLLBACK을 실행했다. 계좌 표는 어떻게 되는가?
  4. 트랜잭션이 가져야 할 ACID 특성 중 '계좌 A에서 출금하여 계좌 B에 입금하는 이체 처리가, 도중에 장애가 일어나도 둘 다 수행되거나 전혀 수행되지 않거나 둘 중 하나가 된다'는 성질은?
  5. 재고 표에서 어떤 상품의 재고 수는 10이다. 트랜잭션 T1은 재고 수를 읽어 3을 뺀 값을 쓰고, T2는 재고 수를 읽어 5를 뺀 값을 쓴다. 락을 걸지 않고 T1의 읽기, T2의 읽기, T1의 쓰기, T2의 쓰기 순서로 실행되었을 때 최종 재고 수는 얼마가 되는가?