1월 4일 -정규화란?

Yullgiii·2024년 1월 4일
0
post-thumbnail

정규화란?

정규화는 데이터베이스 설계에서 중복을 최소화하기 위해 데이터를 구조화하는 과정입니다. 목적은 데이터의 무결성과 일관성을 유지하며, 삽입, 삭제, 갱신 등의 이상 현상을 방지하는 것입니다.

정규화를 하지 않을 경우 발생할 수 있는 이상현상

  • 삽입 이상 (Insertion Anomaly): 필요 없는 데이터까지 추가해야 하는 상황이 발생할 수 있습니다.
  • 삭제 이상 (Deletion Anomaly): 한 데이터를 삭제할 때 다른 중요한 정보가 함께 사라지는 경우가 생길 수 있습니다.
  • 갱신 이상 (Update Anomaly): 중복된 데이터 중 일부만 변경되어 데이터의 불일치가 발생할 수 있습니다.

각 정규화 단계별 설명

1NF (첫 번째 정규형)

  • 변화 전: 한 테이블에 중복된 데이터가 여러 행에 걸쳐 존재합니다.
  • 변화 후: 모든 컬럼이 '원자값'을 가지도록 하여 중복을 제거합니다.
  • 예시: 주문 테이블에서 여러 상품을 한 행에 나열했을 경우, 각 상품을 별도의 행으로 분리합니다.

2NF (두 번째 정규형)

  • 변화 전: 부분적 종속이 존재합니다 (기본키가 아닌 다른 키에 종속된 컬럼이 존재).
  • 변화 후: 모든 비기본키 컬럼이 기본키 전체에만 의존하도록 합니다.
  • 예시: 학생ID와 과목ID가 기본키인 성적 테이블에서, 학생 이름이 학생ID에만 종속되면, 학생 정보를 별도의 테이블로 분리합니다.

3NF (세 번째 정규형)

  • 변화 전: 이행적 종속이 존재합니다 (한 컬럼이 다른 컬럼을 통해 간접적으로 기본키에 종속됨).
  • 변화 후: 모든 컬럼이 기본키에만 종속되도록 합니다.
  • 예시: 학생 테이블에서 학생ID가 학과ID를 결정하고, 학과ID가 학과명을 결정하는 경우, 학과 정보를 별도의 테이블로 분리합니다.

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

  • 변화 전: 3NF를 만족하지만, 후보키가 아닌 키에 종속성이 있는 상황입니다.
  • 변화 후: 모든 비기본키가 후보키에만 의존하도록 합니다.
  • 예시: 강사ID와 과목ID가 후보키인 강의 테이블에서, 강사 이름이 강사ID에만 종속되면, 강사 정보를 별도의 테이블로 분리합니다.

정규화의 단점 및 역정규화

정규화는 중복을 제거하고 데이터 무결성을 높이지만, 과도한 정규화는 몇 가지 문제를 발생시킬 수 있습니다:

  • 조인의 과도한 사용: 여러 테이블에 걸쳐 있는 데이터를 조회하기 위해 많은 조인이 필요해질 수 있으며, 이는 성능 저하로 이어질 수 있습니다.
  • 데이터 구조의 복잡성 증가: 데이터 구조가 복잡해지면 이해하기 어렵고, 유지보수가 어려워질 수 있습니다.

역정규화는 이러한 문제를 해결하기 위해 일부 중복을 허용하거나, 여러 테이블을 합치는 과정입니다. 역정규화를 고려하는 상황은 다음과 같습니다:

  • 성능 최적화가 필요한 경우: 데이터베이스 응답 시간을 줄이기 위해.
  • 읽기 연산이 많은 시스템: 데이터 삽입, 삭제, 갱신보다 조회가 더 빈번한 시스템에서 사용합니다.
  • 통계 정보나 요약 정보가 필요한 경우: 예를 들어, 대용량의 데이터에서 자주 요청되는 집계 정보를 별도의 테이블로 관리할 수 있습니다.
profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글