티스토리 뷰

반응형
3정규형(3NF)이란? - 데이터베이스 정규화

🔷 3정규형(Third Normal Form, 3NF)이란?



✅ 정의



3정규형은 데이터베이스 정규화 과정에서 테이블이 이행적 종속(transitive dependency)을 제거하여 데이터 무결성을 보장하는 단계입니다. 이행적 종속이란 기본키(A)가 속성 B를 결정하고, B가 또 다른 속성 C를 결정(A → B, B → C)할 때, C가 A에 간접적으로 종속되는 경우를 말합니다. 3NF는 A가 C를 직접 결정해서는 안 된다는 철학을 바탕으로, 데이터 중복을 최소화하고 논리적 독립성을 유지합니다. 테이블이 3NF를 만족하려면 다음 조건을 충족해야 합니다:


  • 1NF 조건: 테이블이 제1정규형을 만족해야 함(모든 속성이 원자값을 가짐).
  • 2NF 조건: 테이블이 제2정규형을 만족해야 함(부분 함수 종속이 없음).
  • 3NF 조건: 테이블에 이행적 종속이 없어야 함. 즉, 기본키가 아닌 속성이 다른 비기본키 속성에 종속되지 않아야 하며, 기본키가 비기본키 속성을 직접 결정하지 않도록 설계.

✅ 이행적 종속



🔷 이행적 종속의 정의

이행적 종속은 기본키(A)가 속성 B를 결정하고(A → B), B가 또 다른 속성 C를 결정(B → C)하는 경우입니다. 이로 인해 C는 A에 간접적으로 종속(A → C)되지만, 3NF는 A가 C를 직접 결정하지 않도록 요구합니다. 예를 들어, 학번 → 학과, 학과 → 학과_위치라면, 학번 → 학과_위치는 간접적 종속입니다.


🔷 왜 문제인가?

이행적 종속은 A가 C를 간접적으로 결정하게 되어 데이터 중복을 초래하고, 삽입/갱신/삭제 이상을 유발합니다. 이는 기본키가 모든 비기본키 속성을 직접 결정해야 한다는 데이터베이스 설계 철학을 위반하며, 데이터 무결성과 유지보수성을 해칩니다.


🔷 어떤 원칙/철학을 위반하는가?

이행적 종속은 데이터 무결성, 최소 중복성, 그리고 논리적 독립성을 위반합니다. A → B → C 구조에서 A가 C를 직접 결정하면, C는 A와 독립적으로 관리될 수 없으며, 불필요한 종속 관계로 인해 데이터 구조가 비효율적입니다. 3NF는 각 속성이 기본키에 직접 종속되어 독립적으로 관리되도록 보장합니다.


🔷 예시

❌ 1. 이행적 종속 위반 예시

테이블명: 학생정보
설계 의도: 학생의 학번, 이름, 학과, 학과 위치를 저장하려 했음.
실패 원인: 학번이 학과를 결정하고, 학과가 학과_위치를 결정하여 이행적 종속 발생.


학번 (PK) 이름 학과 학과_위치
S001 김철수 컴퓨터과 서울
S002 이영희 컴퓨터과 서울
S003 박민수 전자과 부산

  • 문제 분석:
  • 학번 → 학과, 학과 → 학과_위치로 인해 학번 → 학과_위치가 이행적 종속.
  • 학번은 학과_위치를 직접 결정하지 않아야 하나, 현재 구조는 이를 위반.
  • 컴퓨터과의 학과_위치(서울)가 중복 저장됨.

✅ 2. 이행적 종속 제거 예시

테이블명 1: 학생

학번 (PK) 이름 학과
S001 김철수 컴퓨터과
S002 이영희 컴퓨터과
S003 박민수 전자과

테이블명 2: 학과

학과 (PK) 학과_위치
컴퓨터과 서울
전자과 부산

  • 해결: 학과_위치를 별도 테이블로 분리하여 학번이 학과_위치를 간접적으로 결정하지 않도록 함. 데이터 중복 감소 및 논리적 독립성 보장.

✅ 오해할 만한 것들



  • A(기본키) → B → C
  • 이 경우는 이행적 종속을 의미하며, A가 C를 간접적으로 결정하므로 3NF를 위반합니다.
  • 예: 학번 → 학과 → 학과_위치. 학번은 학과_위치를 직접 결정해서는 안 됨.

  • A(기본키) → B(기본키) → C
  • 이 경우는 이행적 종속이 아님. B가 기본키라면 C는 A 또는 B에 독립적으로 종속될 수 있음.
  • 예: 주문번호(PK) → 고객ID(PK) → 고객이름. 고객ID는 독립적인 키로, 고객이름을 직접 결정.

✅ 이상(Anomaly)



🔷 삽입 이상(Insertion Anomaly)

  • 정의: 필요한 데이터를 삽입할 때, 불필요한 데이터도 함께 삽입해야 하는 경우.
  • 원인: 이행적 종속으로 기본키가 특정 속성을 간접 결정.
  • 예시:
  • 테이블: 학생정보 (위반 예시 테이블 사용)
  • 새로운 학과(예: 화학과, 대구)를 추가하려면, 학번과 이름을 포함한 학생 데이터가 필요.
  • 문제: 학번이 학과_위치를 간접 결정하므로 학과 정보만 독립적으로 추가 불가능.

🔷 갱신 이상(Update Anomaly)

  • 정의: 데이터를 갱신할 때, 동일한 정보가 여러 행에 중복되어 불일치가 발생.
  • 원인: 이행적 종속으로 인해 기본키가 아닌 속성이 중복 저장.
  • 예시:
  • 학생정보 테이블에서 컴퓨터과의 학과_위치가 "서울"에서 "인천"으로 변경됨.
  • 모든 컴퓨터과 행(S001, S002)을 갱신해야 하며, 일부만 갱신하면 불일치 발생.

🔷 삭제 이상(Deletion Anomaly)

  • 정의: 특정 데이터를 삭제할 때, 의도치 않게 다른 중요한 데이터도 삭제됨.
  • 원인: 기본키가 이행적 종속 속성을 간접 결정.
  • 예시:
  • 학생정보 테이블에서 학번 S003(전자과)을 삭제하면, 전자과의 정보(부산)도 삭제.
  • 문제: 학과_위치가 학번에 간접 종속되어 독립적으로 유지 불가능.

✅ 해결 방법



🔷 정의

3NF로 정규화하려면 이행적 종속을 제거하여 기본키가 모든 비기본키 속성을 직접 결정하도록 테이블을 분해합니다.

  • 기본키가 아닌 속성이 다른 비기본키 속성에 종속되지 않도록 분리.
  • 각 테이블은 독립적인 엔터티를 나타내며, 외래키로 연결.
  • 기본키가 간접적으로 속성을 결정하지 않도록 보장.

🔷 예시

원본 테이블: 학생정보 (위의 이행적 종속 위반 예시)

정규화 후:

1. 학생 테이블

학번 (PK) 이름 학과
S001 김철수 컴퓨터과
S002 이영희 컴퓨터과
S003 박민수 전자과

2. 학과 테이블

학과 (PK) 학과_위치
컴퓨터과 서울
전자과 부산

  • 외래키: 학생 테이블의 학과학과 테이블의 학과를 참조.
  • 효과: 학번이 학과_위치를 간접 결정하지 않도록 분리, 데이터 중복 제거, 이상 방지.

✅ 2NF와의 차이점



🔷 2NF 정의

  • 2NF는 테이블이 부분 함수 종속(partial functional dependency)을 제거한 상태.
  • 기본키의 일부 속성에 종속된 비기본키 속성이 없어야 함.

🔷 2NF와 3NF 차이점

  • 2NF: 기본키의 부분에 종속된 속성을 제거(복합키 관련).
  • 3NF: 기본키가 비기본키 속성을 간접적으로 결정하지 않도록 이행적 종속 제거.

🔷 예시

❌ 1. 2NF 위반 예시

테이블명: 수강정보
설계 의도: 학생의 수강 정보(학번, 과목, 강사)를 저장하려 했음.

학번 (PK) 과목 (PK) 강사
S001 데이터베이스 이교수
S001 알고리즘 박교수
S002 데이터베이스 이교수

  • 문제:
  • 기본키는 (학번, 과목)이지만, 강사과목에만 종속(부분 함수 종속).
  • 데이터베이스 과목의 강사(이교수)가 중복 저장됨.

✅ 2. 2NF로 정규화

테이블 1: 수강

학번 (PK) 과목 (PK)
S001 데이터베이스
S001 알고리즘
S002 데이터베이스

테이블 2: 과목

과목 (PK) 강사
데이터베이스 이교수
알고리즘 박교수

  • 효과: 부분 함수 종속 제거.

❌ 3. 3NF 위반 예시

테이블명: 주문정보

주문번호 (PK) 고객ID 고객등급
O001 C001 골드
O002 C002 실버

  • 문제: 고객ID → 고객등급, 주문번호 → 고객ID이므로 주문번호 → 고객등급은 이행적 종속. 주문번호가 고객등급을 간접 결정.

✅ 4. 3NF로 정규화

테이블 1: 주문

주문번호 (PK) 고객ID
O001 C001
O002 C002

테이블 2: 고객

고객ID (PK) 고객등급
C001 골드
C002 실버

  • 효과: 주문번호가 고객등급을 간접 결정하지 않도록 분리.

✅ 결론 및 요약



🔷 철학적 의의

3NF는 데이터베이스의 효율성, 무결성, 논리적 독립성을 보장합니다. 기본키가 비기본키 속성을 간접적으로 결정하지 않도록 설계함으로써 데이터 중복과 이상을 제거하고, 각 속성이 독립적으로 관리되도록 합니다. 이는 변화하는 요구사항에 유연하게 대응할 수 있는 설계를 제공합니다.


🔷 표로 내용 요약

항목 내용
정의 1NF, 2NF를 만족하고, 기본키가 속성을 간접 결정하지 않는 상태.
이행적 종속 A → B, B → C일 때, A가 C를 간접 결정. 중복과 이상 초래.
이상 - 삽입 이상: 불필요한 데이터 삽입 필요.
- 갱신 이상: 중복 데이터로 불일치 발생.
- 삭제 이상: 의도치 않은 데이터 손실.
해결 방법 이행적 종속 제거, 기본키가 속성을 직접 결정하도록 분리.
2NF와 차이 - 2NF: 부분 함수 종속 제거.
- 3NF: 이행적 종속 제거, 간접 결정 방지.
철학적 의의 무결성, 최소 중복, 논리적 독립성 보장.


3NF는 기본키가 속성을 간접 결정하지 않도록 하여 데이터의 논리적 독립성과 효율성을 보장합니다.

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
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
글 보관함