기술/IT

[Database] 정규화

GreatTree.HEO 2025. 4. 25. 14:13
728x90

📚 데이터베이스 정규화 = 복잡한 데이터를 단순하게 관리하는 기술

 

중복은 악(惡)이다. 정규화는 중복과의 전쟁이다.

정규화하지 않은 데이터베이스는 집안에 쌓인 먼지와 같다.
보이지 않아도 결국 문제를 일으킨다.

 

데이터베이스 정규화는 데이터베이스에서 데이터를 체계적으로 정리하여 중복을 줄이고 데이터 무결성을 보장하는 과정이다.

데이터를 테이블과 열로 나누고, 특정 규칙(정규형)을 따라 구조화한다.

정규화의 주요 목표:

  • 중복 데이터 제거: 불필요한 데이터 반복을 줄임.
  • 데이터 무결성 보장: 데이터가 정확하고 일관되게 유지.
  • 데이터 관리 간소화: 데이터 추가, 수정, 삭제 시 오류(이상 현상) 방지.

📚 왜 정규화가 중요한가?

도서관 데이터베이스를 예로 들어보자.

같은 책 정보(제목, 저자, 출판사)가 여러 곳에 중복 저장되어 있으면:

  1. 중복 문제: 저장 공간 낭비.
  2. 불일치 위험: 출판사가 바뀌면 모든 데이터를 수정해야 하며, 수정 누락 시 데이터가 달라질 수 있음.
  3. 이상 현상:
    • 삽입 이상: 대출자가 없으면 새 책을 추가할 수 없음.
    • 수정 이상: 한 곳만 수정하면 다른 곳과 데이터가 달라짐.
    • 삭제 이상: 대출자 정보를 삭제하면 책 정보도 함께 삭제될 수 있음.

 

👉 정규화는 위의 문제들을 해결하기 위한 데이터 구조 설계 기술이다.

 


📚 정규형 단계별 이해

정규화는 여러 단계(정규형)를 거쳐 진행된다.

각 단계는 이전 단계를 기반으로 더 체계적인 구조를 만든다.

1. 제1정규형 (1NF)

◆ 목표: 반복 그룹 제거 및 데이터 원자화.

  규칙:

  • 데이터는 테이블 형태로 저장.
  • 하나의 컬럼은 같은 종류나 타입(type)의 값을 가져야 한다.
  • 각 열은 원자적(나눌 수 없는) 값만 가짐—반복 그룹이나 배열(Array) 불가.
  • 각 행은 고유해야 함(보통 기본 키 사용).

  예시

 

(변경전) 

이름 수강과목
김영숙 수학, 과학
이인호 역사, 수학

"수업" 열에 여러 값이 포함되어, 즉 배열로 되어 있어 1NF를 위반함.

 

(변경후) 

 

1) 학생 정보

학번(고유번호) 학생 이름 나이
2504003 김영숙 20
2505008 이인호 21

 

2) 수강 정보

학번(고유번호) 수강과목
2504003 수학
2504003 과학
2505008 역사
2505008 수학

한 칸에는 하나의 데이터만, 같은 형식의 데이터 반복 금지함.


2. 제2정규형 (2NF)

  목표: 부분 종속 제거.

  규칙:

  • 1NF를 만족해야 함.
  • 모든 비기본 속성은 전체 기본 키에 종속(부분 종속 불가).

※ 부분 종속이란?

    기본 키가 여러 열로 구성된 경우, 비기본 속성이 기본 키의 일부에만 종속되는 경우.

 

  예시

 

(변경전) 

학번(고유번호) 수강과목 담당강사 성적
2504003 수학 김수학 교수 100
2504003 과학 이과학 교수 90
2505008 역사 박역사 교수 80
2505008 수학 김수학 교수 95

"강사"는 "수강과목"에만 종속함. 이름에는 종속되지 않음. ☞ ("수학"은 항상 "김교수"가 함. 하지만, "학생"과는 무관. 이러한 부분을 부분종속이라고 함.

 

(변경후) 

 

1) 수강정보 테이블

학번(고유번호) 수강과목 성적
2504003 수학 100
2504003 과학 90
2505008 역사 80
2505008 수학 95

 

2) 수업강사 테이블

수강과목 담당강사
수학 김수학 교수
과학 이과학 교수
역사 박역사 교수

각각의 테이블을 분리해서 작성함.


3. 제3정규형 (3NF)

  목표: 이행 종속 제거.

  규칙:

  • 2NF를 만족해야 함.
  • 비기본 속성은 기본 키에 직접 종속, 다른 비기본 속성에 의존하지 않음(이행 종속 불가).

※ 이행 종속이란?

    비기본 속성이 기본 키에 의해 간접적으로 종속되는 경우 (A → B, B → C일 때 A → C).

 

  예시

 

(변경전) 

수강과목 담당강사 강사사무실
수학 김수학 교수 101호
과학 이과학 교수 102호
역사 박역사 교수 103호
  • 기본 키는 "수업."
  • "강사"는 "수업"에 종속.
  • "강사_사무실"은 "강사"에 종속, "강사"는 "수업"에 종속 ☞ (A → B, B → C일 때 A → C, 하지만 A와 C는 실제로는 의미가 없음.) ☞ "이행 종속"

(변경후)

 

1) 과목 정보

수강과목 담당강사
수학 김수학 교수
과학 이과학 교수
역사 박역사 교수

 

2) 강사 정보

담당강사 강사사무실
김수학 교수 101호
이과학 교수 102호
박역사 교수 103호

 

각각의 테이블을 분리해서 작성함.


추가 정규형: BCNF 및 더 높은 단계

  • BCNF: 3NF보다 엄격. 모든 결정자(다른 열을 결정하는 열)가 후보 키여야 함.
  • 4NF, 5NF: 다중 값 종속 및 조인 종속 처리. 복잡한 데이터베이스에서 사용.

실무에서는 보통 3NF까지 적용하면 충분합니다.


📚 정규형 장점과 단점

1. 장점

  • 중복 감소: 저장 공간 절약.
  • 일관성 향상: 한 곳에서만 수정하면 됨.
  • 관리 용이: 이상 현상 감소로 유지보수 쉬움.

 

2.단점

  • 복잡성 증가: 테이블이 많아져 조인(JOIN) 필요.
  • 성능 문제: 대규모 데이터베이스에서 조인으로 인해 속도 저하.
  • 비정규화 고려: 성능을 위해 일부러 중복을 허용하기도 함(예: 데이터 웨어하우스).

📚 결론

정규화는 효율적이고 신뢰할 수 있는 데이터베이스를 설계하는 데 필수적입니다. 정규형을 통해 중복을 줄이고,

데이터 무결성을 보장하며, 이상 현상을 방지할 수 있다.

하지만 성능을 고려해 정규화와 비정규화 사이에서 균형을 맞추는 것이 중요하다.

728x90