HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🤩
개발
/데이터베이스(Database)/
Database
Database
/
🔕
정규화(Normalization)
🔕

정규화(Normalization)

관계형 데이터 모델에서 데이터의 중복성을 제거하여 이상 현상(Anomaly)을 방지하고, 데이터의 일관성과 정확성을 유지하기 위해 무손실 분해하는 과정을 말함
 

제 1정규화(1NF)

  • 테이블 구성에서 중복 또는 반복, 복합값 등을 포함한 구조를 [제 1정규형이 아닌 테이블] 이라고 함
  • 프로그래밍으로 말하자면, 카피 앤 페이스트를 마구 사용한 프로그램과 같은 느낌임
  • 테이블 내의 속성값은 원자값을 가지고 있어야 한다
    • 각 컬럼이 하나의 속성만을 가져야 한다.
    • 하나의 컬럼은 같은 종류나 타입의 값을 가져야 한다.
    • 각 컬럼이 유일한(unique) 이름을 가져야 한다.
    • 컬럼의 순서가 상관없어야 한다.
 
 

제 2정규화(2NF)

emp_id(PK)
dept_id(PK)
dept_name
created
1
100
인사부
2010-01-01
2
100
인사부
2010-01-01
  • 모든 컬럼이 주식별자에 대해 완전 함수 종속이어야 하는데, 부분 함수 종속인 컬럼이 있을때, 제 2정규형이 아닌 테이블임
  • 기본 키가 여러 열로 구성(emp_id, dept_id)되어 있고, 그 기본 키 중 일부 열의 값(dept_id)에 의해서만 결정되는 열이 있는 경우, 해당 테이블을 [제 2정규형이 아닌 테이블] 이라고 함
    • 예로, emp_id, dept_id, dept_name, created가 있을 때
    • created는 emp_id와 dept_id로 특정이 되지만
    • dept_name은 dept_id로만 특정이 되기에 제 2정규형이 될 수없다
    • 문제점 : 동일 dept_id인데도 부서명이 서로 다른 레코드가 등록될 가능성이 있다는 것임
 
부분함수 종속 을 제거한다
  • 제 1정규형을 만족해야 한다.
  • 모든 컬럼이 부분적 종속이 없어야 한다. 즉, 모든 컬럼이 완전 함수 종속을 만족해야 한다
    • 부분함수 종속(Partial Functional Dependency) : 기본키가 특정 컬럼에만 종속되는 것을 말함
    • 완전 함수 종속(Full Functional Dependency) : 기본키의 부분집합이 결정자가 되어선 안 된다는 것
 

제 3정규화(3NF)

emp_id(PK)
dept_id
dept_name
1
100
인사부
2
100
인사부
  • 원칙적으로 테이블의 모든 열은 기본 키 값에 따라 단 하나로 결정되어야 함
  • dept_id 는 PK 가 아니지만, dept_name의 경우 dept_id에 따라 결정되므로 기본 키의 emp_id와는 직접 관련이 없음
  • 이러한 상황에서는 같은 dept_id라도 dept_name이 다를 수 있다는 문제가 있음
이행 함수 종속을 제거한다
  • 제 2정규형을 만족해야 한다
  • 기본키를 제외한 속성들 간의 이행 종속성 (Transitive Dependency)이 없어야 한다
    • 이행 함수 종속(Transitive Functional Dependency) : A → B, B → C 일 때 A → C 를 만족하면 이행 함수 종속이라고 함
    • 즉 A랑 B가 연관이 되고, B와 C가 연관이 될 때, A가 C랑도 연관이 되면, A-B와 B-C는 테이블이 분리되어야 함

보이스 코드 정규화 (BCNF)

결정자가 후보키가 아닌 함수 종속을 제거한다
  • 제 3정규형을 만족해야 한다
  • 모든 결정자가 후보키 집합에 속해야 한다 ↔  모든 컬럼이 참여하여 고유하게 하나의 행을 가리키게 해야 함(이행함수 종속이랑 비슷한거같은데..?)
 

제 4정규화 (4NF)

다치 종속을 제거한다
  • BCNF를 만족해야 한다
  • 다중값 종속(다치 종속 = Multi-valued Dependency)이 없어야 한다
    • 같은 테이블 내의 독립적인 두 개 이상의 컬럼이 또 다른 컬럼에 종속되는 것을 말함
 

제 5정규화 (5NF)

조인 종속을 제거한다
  • 4NF를 만족해야 한다
  • 더 이상 비손실 분해를 할 수 없어야 한다
  • 조인 종속(Joint Dependency) : 하나의 릴레이션을 여러 개의 릴레이션으로 분해하였다가, 다시 조인했을 때 데이터 손실이 없고 필요없는 데이터가 생기는 것을 말함. 조인 종속성은 다치 종속의 개념을 더 일반화한 것임