쏭의 개발 블로그

[DB] 정규화 본문

DB

[DB] 정규화

songu1 2023. 1. 31. 12:47

1. 정규화(Normalization)

관계형 데이터베이스의 설계에서 데이터 중복을 최소화 하기 위해 데이터를 구조화하는 프로세스

목표

  1. 중복 최소화 (minimize redundancy)
  2. 무결성을 유지, 이상현상(anomaly)를 방지
    • 이상현상(anomaly)
      • 불필요한 데이터 중복으로 인해 릴레이션에 대한 데이터 삽입, 수정, 삭제 연산을 수행할 때 발생할 수 있는 부작용
      • 종료
        • 삽입 이상(insert anomaly) : 새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입
        • 갱신 이상(update anomaly) : 중복 튜플 중 일부만 변경하여 데이터가 불일치하게 되는 모순의 문제
        • 삭제 이상(delete anomaly) : 튜플을 삭제하면 꼭 필요한 데이터까지 함께 삭제되는 데이터 손실의 문제

정규화의 단계

  • 1NF - 2NF - 3NF - Boyce-Codd NF(BCNF) - 4NF - 5NF

 

1) 1NF : 제 1 정규화(정규형)

테이블의 컬럼이 원자값(atomic; 하나의 값)을 갖도록 테이블을 분해하는 것

조건

  • 어떤 릴레이션에 속한 모든 도메인은 원자값으로만 구성되어 있어야함
  • 모든 속성에 반복되는 그룹이 나타나지 않음
  • 기본키를 사용하여 관련 데이터의 각 집합을 고유하게 식별할 수 있어야함

허용되지 않는 것

  • Composite attribute❎
    • Composite attribute : 2개 이상의 속성으로 구성된 것
    • ex) 주소 : 국가, 도시, 번지 등의 attribute로 구성됨
  • Multi-valued Attributes ❎
    • Multi-valued attribute : 하나의 객체가 여러 값을 가질 수 있는 속성
    • ex) 취미 : 어떠한 사람의 취미는 여러 개가 존재할 수 있음
  • 중첩 릴레이션 ❎
    • 각 튜플의 값이 non-atomic한 attribute

예시1 - Multi-valued attribute

1NF 만족 ❎

https://mangkyu.tistory.com/110

1NF 만족 🅾️

https://mangkyu.tistory.com/110

예시2 - 중첩 릴레이션

1NF 만족 ❎

  • 아이디, 이름, 프로젝트(프로젝트 번호, 시간)

1NF 만족 🅾️

2) 2NF : 제 2 정규화(정규형)

제 1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것

 

  • 완전 함수 종속 (Full Functional Dependency)
    • 기본키의 부분집합이 결정자가 아닌 것

조건

  • 기본키가 복합키(키1, 키2)로 묶여잇을 때 2개의 키 중 하나의 키만으로 다른 컬럼을 결정지을 수 있으면 안됨

예시

2NF 만족 ❎

2NF 만족 🅾️

 

3) 3NF : 제 3 정규화(정규형)

제 2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것

 

  • 이행적 종속
    • A→B, B→C 성립 ➡️ A→C 성립

조건

  • 기본키가 아닌 속성들은 기본키에 의존해야함

예시

3NF 만족 ❎

3NF 만족 🅾️

 

 


https://mangkyu.tistory.com/110

 

[Database] 정규화(Normalization) 쉽게 이해하기

지난 포스팅에서 데이터베이스 정규화와 관련된 내용을 정리했었다. 하지만 해당 내용이 쉽게 이해되지 않는 것 같아서 정규화 관련 글을 풀어서 다시 한번 정리해보고자 한다. 1. 정규화(Normaliz

mangkyu.tistory.com

 

'DB' 카테고리의 다른 글

[SQL] 데이터베이스 - TCL  (0) 2023.01.31
[DB] SQL 문법 정리 - DDL, DML  (0) 2023.01.31
[DB] 이상현상(Anomaly)  (0) 2023.01.31
[DB] SQL vs NoSQL  (0) 2023.01.31
[DB] Index 색인  (1) 2023.01.30