Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발자공부일기

데이터베이스 정규화 본문

TIL(Today I Learned)

데이터베이스 정규화

JavaCPP 2024. 12. 3. 20:16

오늘은 데이터스키마를 작성하는 도중 팀원분이 들고오시기도 했고 예전에 정보처리기사 준비할때 배웠던 것들인데 오래돼서 기억도 잘 안나고 정확히 잘 모르는거 같아서 정규화라는 것에 대해서 조사하게 되었습니다.

 

정규화의 목적

  1. 중복 제거: 동일한 데이터가 여러 테이블에 반복되지 않도록 설계.
  2. 데이터 무결성: 데이터가 정확하고 일관되게 유지되도록 설계.
  3. 이상 현상 방지:
    • 삽입 이상: 데이터를 추가할 때 불필요하거나 누락된 정보를 요구하지 않도록 설계.
    • 삭제 이상: 데이터를 삭제할 때 다른 관련 데이터가 함께 사라지지 않도록 설계.
    • 갱신 이상: 데이터를 수정할 때 여러 곳에서 수정하지 않도록 설계.

 

데이터베이스 정규화의 단계(1NF ~ 6NF)

정규화는 데이터 중복을 최소화하고, 데이터 무결성을 유지하며, 효율적인 데이터베이스 구조를 설계하기 위한 프로세스입니다. 각 단계는 이전 단계에서 남아 있는 문제를 해결하며 점차 더 세분화된 구조로 발전합니다.


1NF (First Normal Form)

조건:

  1. 모든 속성의 값은 원자값(Atomic Value)을 가져야 합니다.
    • 즉, 각 셀에는 하나의 값만 있어야 합니다.
  2. 중복된 속성(반복 그룹)이 없어야 합니다.

문제 해결:
데이터 중복을 줄이고 각 속성에 하나의 값만 있도록 테이블을 정리합니다.

예시:
비정규형 테이블

 

학생  취미
A 독서, 음악
B 운동, 영화, 여행

→ 1NF로 변환

 

학생  취미
A 독서
A 음악
B 운동
B 영화
B 여행

2NF (Second Normal Form)

조건:

  1. 1NF를 만족해야 합니다.
  2. 부분 함수 종속(Partial Dependency)이 없어야 합니다.
    • 즉, 기본키의 일부가 종속성을 가지는 경우를 제거해야 합니다.

문제 해결:
조합키를 사용하는 경우, 종속성을 분리해 더 작은 테이블로 나눕니다.

예시:
1NF 테이블

학생 강의 교수
A DB 홍길동
A OS 이영희
B DB 홍길동

 

여기서 강의는 교수에 종속되므로 부분 함수 종속 발생.

→ 2NF로 변환


학생-강의 테이블

학생  강의
A DB
A OS
B DB

 

강의-교수 테이블

강의  교수
DB 홍길동
OS 이영희

3NF (Third Normal Form)

조건:

  1. 2NF를 만족해야 합니다.
  2. 이행적 종속(Transitive Dependency)이 없어야 합니다.
    • 즉, 기본키가 아닌 속성이 다른 비키 속성을 통해 종속되는 경우를 제거합니다.

문제 해결:
기본키와 직접 관련되지 않은 속성을 분리합니다.

예시:
2NF 테이블

 

학생  학번  학과
A 101 컴퓨터공학
B 102 전자공학

여기서 학번은 학과를 결정하므로 이행적 종속 발생.

→ 3NF로 변환


학생-학번 테이블

학생  학번
A 101
B 102

 

학번-학과 테이블

학번  학과
101 컴퓨터공학
102 전자공학

 


BCNF/3.5NF(비공식명칭) (Boyce-Codd Normal Form)

조건:

  1. 3NF를 만족해야 합니다.
  2. 모든 결정자(Determinant)가 후보키(Candidate Key)여야 합니다.

문제 해결:
3NF에서 남아 있는 비정상적인 결정자 관계를 제거합니다.

예시:
3NF 테이블

 

강의  교수  시간
DB 홍길동 9:00
OS 이영희 10:00
DB 홍길동 11:00

여기서 교수가 시간을 결정하므로 결정자가 후보키가 아님.

→ BCNF로 변환


강의-교수 테이블

강의  교수
DB 홍길동
OS 이영희

 

교수-시간 테이블

교수  시간
홍길동 9:00
홍길동 11:00
이영희 10:00

4NF (Fourth Normal Form)

조건:

  1. BCNF를 만족해야 합니다.
  2. 다치 종속(Multi-Valued Dependency)이 없어야 합니다.
    • 한 속성이 두 개 이상의 독립적인 속성에 종속될 때 이를 제거합니다.

예시:

학생  언어  동아리
A 영어 축구
A 일본어 축구
A 영어 독서
A 일본어 독서

 

여기서 학생은 언어와 동아리에 다치 종속.

→ 4NF로 변환


학생-언어 테이블

학생  언어
A 영어
A 일본어

 

학생-동아리 테이블

학생  동아리
A 축구
A 독서

5NF (Fifth Normal Form)

조건:

  1. 4NF를 만족해야 합니다.
  2. 조인 종속(Join Dependency)이 없어야 합니다.
    • 데이터가 과도하게 나뉘어 조인 결과가 손실되는 경우를 방지합니다.

예시:

학생  강의  교수
A DB 홍길동
A OS 이영희
B DB 홍길동

 

→ 5NF로 변환
학생-강의 테이블

학생  강의
A DB
A OS
B DB

 

강의-교수 테이블

강의  교수
DB 홍길동
OS 이영희

 

학생-교수 테이블

학생  교수
A 홍길동
A 이영희
B 홍길동

6NF (Sixth Normal Form)

조건:

  1. 5NF를 만족해야 합니다.
  2. 모든 속성이 서로 독립적이어야 합니다.
    6NF는 주로 분산 데이터베이스와 데이터 웨어하우스에서 활용되며, 분해의 최종 단계로 모든 속성이 최대한 독립적으로 유지되도록 설계합니다.

정규화 요약

 

단계  목적  해결하는 문제
1NF 데이터 원자화 중복 데이터, 반복 그룹 제거
2NF 부분 함수 종속 제거 조합키의 일부 속성 종속성 제거
3NF 이행적 종속 제거 비키 속성 간 종속성 제거
BCNF 비후보키 결정자 제거 비정상적인 결정자 관계 제거
4NF 다치 종속 제거 중복 데이터 감소
5NF 조인 종속 제거 데이터 손실 방지
6NF 속성 독립성 보장 고도로 세분화된 설계

정규화를 통해 데이터 무결성과 효율성을 높이되, 실무에서는 성능 저하를 방지하기 위해 적절히 조정하며 사용합니다.