Post

06 정규화

06 정규화

1. 이상현상

1. 이상현상

  • 정규화되지 않은 테이블에서 데이터의 중복이나 종속성 문제로 인해 데이터의 일관성·무결성이 깨지는 현상
  • 3가지 종류
종류설명예시결과
삽입 이상 (Insertion Anomaly)새로운 데이터를 삽입할 때 불필요한 데이터까지 함께 입력해야 하거나, 입력 자체가 불가능한 상황예: 새 교수(‘최교수’)를 등록하려면, 반드시 학생 정보도 있어야 함독립적 데이터 삽입 불가
수정 이상 (Update Anomaly)중복된 데이터가 여러 행에 있어서, 한 곳만 수정하면 데이터 불일치 발생예: ‘박교수’가 ‘박철수’로 바뀌었는데 한 행만 수정됨데이터 불일치 발생
삭제 이상 (Deletion Anomaly)특정 데이터를 삭제할 때 원하지 않는 다른 정보까지 함께 삭제되는 현상예: 학생 한 명의 수강 정보 삭제 시, 해당 과목과 교수 정보까지 사라짐데이터 손실 발생

2. 케이스

1
2
3
4
5
6
  학생(Student)
  ────────────────────────────
  학번 | 이름 | 과목1 | 과목2 | 교수1 | 교수2
  ────────────────────────────
  1   | 김유진 | DB | OS | 박교수 | 이교수
  2   | 이현우 | DB | 네트워크 | 박교수 | 최교수
  • 수정 이상(Update Anomaly) : 박교수 이름을 ‘박철수’로 바꾸려면 모든 행을 수정해야 함.
  • 삽입 이상(Insertion Anomaly) : 새로운 교수만 등록하려면 학생 정보가 없어서 입력 불가.
  • 삭제 이상(Deletion Anomaly) : 학생 1명을 삭제했더니, 해당 교수 정보도 같이 사라짐.

2. 종속성

1. 종속성

  • 어떤 속성 A의 값이 주어지면, 다른 속성 B의 값이 오직 하나로 결정되는 관계,
  • 이럴때 “B가 A에 함수적으로 종속(Functional Dependent)”라고 표현
  • 수식은 “ A → B “

2. 종속 VS 비종속

1. 종속

학번이름학과
101김유진컴퓨터공학과
102이현우전자공학과
103박민서컴퓨터공학과
  • 학번 → 이름
  • 학번 → 학과

2. 비종속

학과이름
컴퓨터공학과김유진
컴퓨터공학과박민서
  • 학과 → 이름

3. 종속의 종류

종류설명예시
완전 함수 종속 (Full Functional Dependency)복합키 전체에 의해 다른 속성이 결정됨(학번, 과목) → 성적
부분 함수 종속 (Partial Functional Dependency)복합키의 일부만으로 속성이 결정됨(학번, 과목) 중 학번 → 이름
이행 함수 종속 (Transitive Functional Dependency)A→B, B→C가 존재할 때, A→C 관계학번 → 학과, 학과 → 학과장 ⇒ 학번 → 학과장

4. note

  • 이상현상은 한객의 릴레이션에 두개 이상의 정보가 포함이 되어있을때 발생함.

3. 정규화

1. 정규화

  • 데이터의 중복을 줄이고, 이상 현상(Anomaly)을 막기 위해 테이블 구조를 논리적으로 분해하고 정리하는 과정”
  • 데이터 일관성과 무결성(Integrity)을 보장하기 위해 필요
  • 함수 종속성(Functional Dependency)을 기준으로 테이블을 여러 개로 분해하는 과정

2. 정규화의 단계

단계이름핵심 개념추가 조건 / 목적예시 상황
1NF제1정규형반복되는 속성 제거, 모든 속성은 원자값각 칼럼은 더 이상 쪼갤 수 없는 단일값만주소1, 주소2 같은 컬럼 나누기
2NF제2정규형부분적 종속 제거기본키가 복합키일 때, 일부 속성만 종속되지 않게(학번, 과목) → 점수, 이름은 학번에만 종속
3NF제3정규형이행적 종속 제거A→B, B→C일 때 A→C가 되지 않게학번→학과코드, 학과코드→학과명 → 학과 테이블 분리
BCNF보이스-코드 정규형모든 결정자가 후보키여야 함제3정규형보다 엄격한 형태후보키가 둘 이상이고, 서로 종속되는 경우 해결
4NF제4정규형다치 종속(Multi-valued Dependency) 제거한 키에 여러 독립적인 반복 속성이 있을 때 분리학생이 ‘여러 전화번호’와 ‘여러 취미’를 동시에 가질 때
5NF제5정규형조인 종속(Join Dependency) 제거조인 시 데이터 손실이나 중복 발생하지 않게여러 테이블 조인 시 무의미한 중복 레코드 제거

1. 비정규 - 한 칸(속성)에 하나의 값만 저장

1
2
3
4
  | 학번 | 이름  | 수강과목   | 담당교수     |
  | -- | --- | ------ | -------- |
  | 1  | 김유진 | DB, OS | 박교수, 이교수 |
  | 2  | 이현우 | DB     | 박교수      |

2. 1NF - 한 컬럼(속성)에 하나의 값만 저장되도록 테이블을 분리

1
2
3
4
5
  | 학번 | 이름  | 수강과목 | 담당교수 |
  | -- | --- | ---- | ---- |
  | 1  | 김유진 | DB   | 박교수  |
  | 1  | 김유진 | OS   | 이교수  |
  | 2  | 이현우 | DB   | 박교수  |

3. 2NF - 이행 종속 제거 (A→B, B→C 관계 제거)

1
2
3
4
5
  학생 테이블
  | 학번 | 이름  |
  | -- | --- |
  | 1  | 김유진 |
  | 2  | 이현우 |
1
2
3
4
5
6
  수강 테이블
  | 학번 | 수강과목 | 담당교수 |
  | -- | ---- | ---- |
  | 1  | DB   | 박교수  |
  | 1  | OS   | 이교수  |
  | 2  | DB   | 박교수  |

4. 3NF - 수강 테이블 내 과목과 교수 분리

1
2
3
4
5
  과목
  | 과목명 | 담당교수 |
  | --- | ---- |
  | DB  | 박교수  |
  | OS  | 이교수  |
1
2
3
4
5
6
  수강
  | 학번 | 과목명 |
  | -- | --- |
  | 1  | DB  |
  | 1  | OS  |
  | 2  | DB  |

4. Note

  • 데이터 구조가 지나치게 쪼개져서 조회 성능이 떨어지기 때문에, 일반적인 업무 DB는 3NF 또는 BCNF까지만 적용하는 게 보통
  • 상황과 환경에 맞게 적당하게 처리하고 조절해야 함.
This post is licensed under CC BY 4.0 by the author.