DB 정규화란?

코딩하는 포로리·2022년 3월 7일
0

DB

목록 보기
5/5
post-thumbnail

📌 1. 정규화란?


📎 데이터베이스 정규화란?

데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 위한 방법이며 데이터를 분해하는 과정이다. 일반적으로 테이블을 여러개로 분해하면 속도는 상대적으로 느려질 수 있지만, 분해하지 않으면 이상 문제들이 발생한다.


📎 데이터베이스 정규화의 목적

  1. 불필요한 데이터를 제거해 불필요한 중복을 최소할 수 있다.
  2. 삽입/갱신/삭제 시 발생할 수 있는 각종 이상 현상(Anomaly)을 방지하기 위해서 테이블의 구성을 논리적으로 직관적으로 만든다.
  3. 데이터베이스 구조 확장 시 재 디자인을 최소화하기 위해서이다.

📎 이상문제란?

👉 삽입 이상

데이터를 저장할 때 원하지 않는 정보가 함께 삽입되거나 자료가 부족해 삽입이 되지 않아 발생하는 문제점

👉 삭제 이상

하나의 자료만 삭제하고 싶지만, 그 자료가 포함된 튜플 전체가 삭제됨으로 원하지 않는 정보 손실이 발생하는 문제점

👉 갱신/수정 이상

정확하지 않거나 일부의 튜플만 갱신되어 정보가 모호해지거나 일관성이 없어져 정확한 정보 파악이 되지 않는 문제점


📎 데이터베이스 정규화의 대상

👉 정규화

온라인 거래 시스템 같은 OLTP(Online Transaction Processing) 데이터베이스는 CRUD(Create, Read, Update, Delete)가 많이 일어나 정규화가 적절하다.

👉 반정규화

분석 리포트 같은 OLAP(Online Analytical Processing) 데이터베이스는 분석과 리포팅을 위해 사용되기 때문에 연산의 속도를 위해 반정규화가 적절하다.

여기서 반정규화란, 시스템의 성능 향성, 개발 및 운영의 편의성 등을 위해 정규화된 데이터 모델을 통합, 중복, 분리하는 과정으로, 의도적으로 정규화 원칙을 위배하는 행위이다. 보통 데이터 중복을 허용하고, 조인을 줄인다. 또한, 조회(select) 속도를 향상시키지만, 데이터 모델의 유연성은 낮아진다.

아래와 같은 상황에서 반정규화를 수행한다.

  • 정규화에 충실하여 종속성, 활용성을 향상되었지만 수행속도가 느려진 경우
  • 다양의 범위를 자주 처리해야 하는 경우
  • 특정 범위의 데이터만 자주 처리하는 경우
  • 요약/집계 정보가 자주 요구되는 경우

📎 정규화의 절차

👉 제 1정규화: 1NF

  • 속성(Attribute)의 원자성을 확보한다.
  • 속성의 중복값을 제거한다.
  • 기본키(Primary Key)를 설정한다.

👉 제 2정규화: 2NF

  • 기본키가 2개 이상의 속성으로 이루어진 경우, 부분 함수 종속성을 제거(분해)한다.
  • 부분 함수 종속성이란, 기본키가 2개 이상인 칼럼으로 이루어진 경우에만 발생한다. 기본키가 1개이면 이 과정을 스킵한다.
  • 복합 인스턴스에 대해 각 인스턴스의 종속적 중복을 삭제한다.

👉 제 3정규화: 3NF

  • 기본키를 제외한 컬럼간에 종속성을 제거한다.
  • 즉, 이행 함수 종속성을 제거한다.
  • 일반 속성의 종속성을 제거한다.

👉 BCNF

  • 기본키를 제외하고 후보키가 있는 경우 후보키가 기본키를 종속시키면 분해한다.
  • BCNF는 복수의 후보키가 있고, 후보키들이 복합 속성이어야 하며, 서로 중첩되어야 한다.

👉 제 4정규화: 4NF

  • 여러 컬럼들이 하나의 컬럼을 종속시키는 경우, 분해하여 다중값 종속성을 제거한다.
  • 다치 종속성을 제거한다.

👉 제 5정규화: 5NF

  • 조인에 의해서 종속성이 발생되는 경우 분해한다.



📖 참고

0개의 댓글