데이터베이스

데이터베이스 정규화: 필요성과 1NF, 2NF, 3NF의 개념 및 예시

P_eli 2024. 10. 2. 13:22
728x90
반응형

데이터베이스 설계에서 정규화(Normalization)는 매우 중요한 과정입니다. 정규화는 데이터의 중복을 최소화하고, 데이터 무결성을 유지하며, 효율적인 데이터 관리를 가능하게 합니다. 이번 포스트에서는 정규화의 필요성을 설명하고, 1NF(제1 정규형), 2NF(제2 정규형), 3NF(제3 정규형)의 개념을 예시와 함께 살펴보겠습니다.

정규화의 필요성

정규화가 필요한 이유는 여러 가지가 있습니다:

  1. 데이터 중복 방지: 중복된 데이터는 데이터베이스의 크기를 증가시키고, 업데이트 시 불일치 문제를 일으킬 수 있습니다. 예를 들어, 학생과 수업 정보를 저장할 때, 동일한 수업 정보를 여러 학생 행에 중복 저장하면, 수업 정보가 변경될 때마다 모든 행을 수정해야 하는 번거로움이 생깁니다.
  2. 데이터 무결성 유지: 데이터 무결성이란 데이터가 정확하고 일관되게 유지되는 것을 의미합니다. 정규화는 데이터의 종속성을 명확히 하여 무결성을 강화합니다.
  3. 효율적인 데이터 관리: 정규화된 데이터베이스는 쿼리 성능을 향상시키고, 데이터 관리가 용이합니다. 이는 시스템의 전반적인 성능을 개선합니다.

1NF (제1 정규형)

1NF는 데이터베이스의 기본적인 형태로, 다음의 조건을 만족해야 합니다:

  • 원자성(Atomicity): 각 필드는 더 이상 나눌 수 없는 원자값을 가져야 합니다. 예를 들어, 학생 테이블이 다음과 같다고 가정해봅시다.

 

학생ID 학생이름 수업
1 홍길동 수학, 과학, 영어
2 김영희 수학, 체육

이 테이블은 1NF를 만족하지 않습니다. 수업 필드가 원자값이 아니기 때문입니다. 이를 1NF로 변경하면 다음과 같습니다.

학생ID 학생이름 수업
1 홍길동 수학
1 홍길동 과학
1 홍길동 영어
2 김영희 수학
2 김영희 체육

이제 수업 필드는 원자성을 만족합니다.

2NF (제2 정규형)

2NF는 1NF를 만족하면서, 부분 함수 종속을 제거하는 규칙입니다. 즉, 기본 키가 아닌 모든 속성이 기본 키에 완전히 종속되어야 합니다.

예를 들어, 다음과 같은 테이블을 고려해보겠습니다.

학생ID 수업코드 학생이름 수업이름
1 101 홍길동 수학
1 102 홍길동 과학
2 101 김영희 수학

이 테이블에서는 학생이름이 학생ID에만 의존하고, 수업이름은 수업코드에만 의존합니다. 이는 2NF를 위반하는 것입니다. 이를 해결하기 위해 학생 정보와 수업 정보를 분리하면 다음과 같이 됩니다.

 

학생 테이블

학생ID 학생이름
1 홍길동
2 김영희

 

수업 테이블

수업코드 수업이름
101 수학
102 과학

 

수업 등록 테이블

학생ID 수업코드
1 101
1 102
2 101

이제 모든 속성이 기본 키에 완전히 종속됩니다.

3NF (제3 정규형)

3NF는 2NF를 만족하면서, 이행적 종속을 제거하는 규칙입니다. 즉, 기본 키가 아닌 속성이 다른 기본 키가 아닌 속성에 의존해서는 안 됩니다.

앞서 예를 든 수업 등록 테이블을 보면, 수업 이름은 수업 코드에 의존합니다. 즉, 수업코드 → 수업이름이 성립합니다. 이를 3NF를 만족하도록 조정하면 다음과 같습니다.

 

학생 테이블

학생ID 학생이름
1 홍길동
2 김영희

 

수업 테이블

수업코드 수업이름
101 수학
102 과학

 

수업 등록 테이블

학생ID 수업코드
1 101
1 102
2 101

이제 3NF를 만족하게 되었습니다. 모든 속성이 기본 키에 직접 의존하고, 이행적 종속이 없습니다.

결론

정규화는 데이터베이스 설계의 핵심 요소로, 데이터 중복을 방지하고 무결성을 유지하는 데 중요한 역할을 합니다. 1NF, 2NF, 3NF는 데이터베이스를 보다 효율적으로 설계하기 위한 단계적 과정입니다.

728x90
반응형