데이터베이스

정규화

컴공누누 2024. 1. 7. 11:42

정규화

데이터베이스 정규화는 데이터를 효율적으로 구성하기 위한 과정으로, 중복을 최소화하고 데이터 일관성을 유지하는 핵심적인 방법론이다.

제1 정규형부터 시작하여 제5 정규형까지의 단계로 나뉘며, 각 단계는 특정 데이터 이상 현상을 해결하기 위한 규칙을 제공한다.

제1 정규형 (1NF)

제1 정규형은 모든 속성이 원자값을 갖고, 각 열이 하나의 값만을 가지도록 하는 것을 목표로 한다. 이를 통해 중복을 최소화하고 데이터를 구조화하여 저장한다.

과목 교수
데이터베이스 김철수, 김영희
자료구조 홍길동
파이썬 김철수, 홍길순
<표 1>

표 1의 경우에는 교수의 속성이 원자값이 아니므로 바꿔야 한다.

id 과목 교수
1 데이터베이스 김철수
2 데이터베이스 김영희
3 자료구조 홍길동
4 파이썬 김철수
5 파이썬 홍길순
<표 2>

제2 정규형 (2NF)

제2 정규형은 부분적 종속을 제거하여 모든 열이 주요 키에 완전히 종속되도록 한다. 이를 통해 테이블 간의 종속성을 관리하고 이상 현상을 방지한다.

id 이름 학과 학과장
1 김철수 컴퓨터공학과 김교수
2 김영희 전자공학과 이교수
3 홍길동 기계공학과 박교수
4 홍길순 컴퓨터공학과 김교수
<표 3>
  • 표 3을 보면 id <-> 이름 + 학과 + 학과장은 종속 관계가 있다.

  • 하지만 학과장은 학과 하나만에도 종속되므로 부분적인 종속이 될 수 있다.

id 이름 학과
1 김철수 컴퓨터공학과
2 김영희 전자공학과
3 홍길동 기계공학과
4 홍길순 컴퓨터공학과
<표 4>
학과 학과장
컴퓨터공학과 김교수
전자공학과 이교수
기계공학과 박교수
<표 5>

제3 정규형 (3NF)

제3 정규형은 이행적 종속을 제거하여 모든 열이 후보키에 종속되도록 한다. 이를 통해 중복을 최소화하고 데이터 조작 시 발생할 수 있는 문제를 방지한다.

id 이름 학과 구분
1 김철수 컴퓨터공학과 공대
2 김영희 전자공학과 공대
3 홍길동 경제학과 경상
4 홍길순 정치학과 경상
<표 5>
  • 이행적 종속은 A -> B 이고 B -> C 일 때 A -> C 인 관계를 말한다.

  • 표 5를 보면 김철수 -> 컴퓨터공학과 이고 컴퓨터공학과 -> 공대일 때 김철수 -> 공대인 관계가 성립한다.

  • 이는 이행적 종속임을 보여주는 것이기 때문에 다음과 같은 예시로 변경해야 한다.

id 이름 학과
1 김철수 컴퓨터공학과
2 김영희 전자공학과
3 홍길동 경제학과
4 홍길순 정치학과
<표 6>
학과 대학
컴퓨터공학과 공대
전자공학과 공대
경제학과 경상
정치학과 경상
<표 7>

BCNF (Boyce and Codd Normal Form)

BCNF는 제3 정규형을 보완하여 모든 결정자가 후보키인 상태를 말한다. 이를 통해 모든 결정자가 후보키에 의존함으로써 중복을 최소화하고 데이터 무결성을 유지한다.

학번 과목 교수
1 데이터베이스 김철수
1 자료구조 김영희
2 네트워크 홍길동
3 네트워크 홍길동
<표 8>
  • 표 8에서는 부분 종속이 발생한다. 학번이나 과목이 각각의 교수를 결정하지 않기 때문이다.

  • 학번과 과목이 후보키라고 가정하면 각 학번과 과목에 대한 교수 정보만 따로 테이블로 나눠주면 된다.

학번 과목
1 데이터베이스
1 자료구조
2 네트워크
3 네트워크
<표 9>
과목 교수
데이터베이스 김철수
자료구조 김영희
네트워크 홍길동
<표 10>

제4 정규형 (4NF)

제4 정규형은 다중 값 종속을 해결하기 위한 단계로, 다치 종속을 제거하여 데이터를 보다 세분화하고 구조화한다.

제5 정규형 (5NF)

제5 정규형은 다치 종속을 최대한 제거하는 것을 목표로 한다. 다양한 다치 종속 패턴을 분석하여 테이블을 분리함으로써 데이터 중복을 최소화하고 데이터 일관성을 높일 수 있다.

면접 예상 질문

  1. 데이터베이스 정규화란 무엇인가요?
  2. 정규화를 수행해야 하는 이유는 무엇이고 그 이점은 무엇인가요?
  3. 부분 함수적 종속과 이행적 종속은 무엇인가요?
  4. BCNF와 제4 정규형의 차이점은 무엇인가요?

참고 URL

'데이터베이스' 카테고리의 다른 글

SQL vs NoSQL  (0) 2023.12.24
JOIN  (0) 2023.12.16
키(Key)  (1) 2023.11.19
데이터베이스 기초  (0) 2023.11.18