[DB] 정규화 단계

Dawon Seo·2023년 9월 6일
0
post-thumbnail

정규화

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

정규화의 장점

  • 데이터베이스 변경 시 이상 현상(Anomaly)을 제거할 수 있다.
  • 데이터베이스와 연동된 응용 프로그램에 최소한의 영향만을 미치게 되어 응용프로그램의 생명을 연장시킨다.

정규화의 단점

  • 릴레이션의 분해로 인해 릴레이션 간의 JOIN 연산이 많아진다.
  • 질의에 대한 응답 시간이 느려질 수도 있다.
  • 만약 JOIN이 많이 발생하여 성능 저하가 나타나면 반정규화(De-normalization)을 적용할 수도 있다.

정규화 단계

제 1정규화 (1NF)

테이블 내의 속성값은 원자값을 가지고 있어야 한다.

  1. 각 컬럼이 하나의 속성만을 가진다.
  2. 하나의 컬럼은 같은 종류나 타입을 가져야 한다.
  3. 각 컬럼이 유일한(unique) 이름을 가져야 한다.
  4. 칼럼의 순서가 상관없어야 한다.

제 2정규화 (2NF)

부분 함수 종속을 제거한다 (완전 함수 종속 관계)

  1. 제 1정규형을 만족해야 한다.
  2. 모든 컬럼이 부분적 종속이 없어야 한다. 즉, 모든 컬럼이 완전 함수 종속을 만족해야 한다.

🔍 부분 함수 종속 (Partial Functional Dependency)

  • 기본키 중에 특정 컬럼에만 종속

🔍 완전 함수 종속 (Full Functional Dependency)

  • 기본키의 부분집합이 결정자가 되어선 안 된다는 것이다.

제 3정규화 (3NF)

이행 함수 종속을 제거한다.

  1. 제 2정규형을 만족해야 한다.
  2. 기본키를 제외한 속성들간의 이행 종속성(Transitive Dependency)이 없어야 한다.

🔍 이행 함수 종속(Transitive Functional Dependency)

  • A -> B, B -> C일 때 A -> C를 만족하면 이행 함수 종속이라고 한다.

보이스-코드 정규화 (BCNF)

결정자가 후보키가 아닌 함수 종속을 제거한다.

  1. 제 3정규형을 만족해야 한다.
  2. 모든 결정자가 후보키 집합에 속해야 한다.

제 4정규화 (4NF)

다치 종속을 제거한다

  1. BCNF를 만족해야 한다.
  2. 다중값 종속(다치 종속)이 없어야 한다.

🔍 다치 종속 (Multi-valued Dependency)

  • 같은 테이블 내에 독립적인 두 개 이상의 컬럼이 또 다른 컬럼에 종속되는 것을 말한다.
  • 즉, A -> B인 의존성에서 단일 값 A와 다중 값 B가 존재한다면 다치 종속이라고 할 수 있다. (다치 종속은 이중 화살표로 표기한다.)
  • 다치 종속은 최소 2개의 컬럼이 다른 컬럼에 종속되어야 하기 때문에 최소 3개의 컬럼이 필요하다.

제 5정규화 (5NF)

조인 종속을 제거한다.

  1. 4NF를 만족해야 한다.
  2. 더 이상 비손실 분해를 할 수 없어야 한다.

🔍 조인 종속(Join Dependency)

  • 하나의 릴레이션을 여러개의 릴레이션으로 분해하였다가, 다시 조인했을 때 데이터 손실이 없고 필요없는 데이터가 생기는 것을 말한다.
  • 다치 종속의 개념을 더 일반화한 것이다.

0개의 댓글