정규화

Heesu Song·2025년 4월 8일

데브코스 - 백엔드

목록 보기
26/32

정규화란?


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

데이터 정규화에는 다음과 같은 단계가 있다.

  • 제1 정규화 (1NF)
  • 제2 정규화 (2NF)
  • 제3 정규화 (3NF)

정규화가 필요한 이유


  • 데이터의 중복을 없애면서 불필요한 데이터를 최소화시킨다.→ 무결성을 유지할 수 있다.
  • 데이터베이스 변경 시 이상 현상(Anomaly)을 제거할 수 있다.
    • 삽입 이상 (Insertion Anomaly) : 데이터 삽입 시 의도와 다른 값들도 삽입
    • 삭제 이상 (Delete Anomaly) : 데이터 삭제 시 의도와 다른 값들도 연쇄 삭제
    • 갱신 이상 (Update Anomaly) : 속성값 갱신 시 일부 튜플만 갱신되어 모순 발생
  • 테이블 구성을 논리적이고 직관적으로 할 수 있다.
  • DB 저장 용량을 효율적으로 관리할 수 있다.

제 1 정규화 (1NF)


데이터베이스의각 컬럼이 원자 값(하나의 값)을 가지도록 하는 과정이다.

즉, 각컬럼은 하나의 데이터만 저장하며, 다중 값을 갖지 않는다.

제 1 정규화 적용 전

수강과목ID수강과목수강자
1AI홍길동
2JAVA이순신, 홍길동
3JavaScript유관순

이 테이블에서는 다음과 같은 문제가 발생할 수 있다.

  • 데이터의 중복 발생이 가능하다.
  • 데이터 무결성이 유지되지 않는다.
  • 데이터의 수정, 삭제, 삽입 연산에 이상 문제가 있을 수 있다.
  • 데이터의 구조가 불분명하다.

발생할 수 있는 이상현상

  • 갱신 이상

홍길동이 JAVA 과목을 Python로 바꿀 경우 이순신이 듣고 있는 JAVA 과목도 바뀌어 버린다.

  • 삭제 이상

홍길동이 JAVA 과목 수강을 취소할 경우 같이 듣고 있는 이순신의 수강 정보도 삭제된다.

제 1 정규화 적용 후

수강과목ID수강과목수강자
1AI홍길동
2JAVA이순신
2JAVA홍길동
3JavaScript유관순

다음은 각 컬럼은 하나의 데이터만 저장하는제1 정규화를 적용 시킨 테이블이다.

이러한 제1 정규화가 적용된 테이블을"제1 정규형 테이블"이라고 한다.

제 1 정규화 적용 후 장점

  • 데이터의 중복이 크게 줄어들어 공간적 효율성 향상
  • 데이터 무결성 유지에 도움
  • 데이터의 수정, 삭제, 삽입 연산에 이상 문제 방지
  • 데이터 구조가 단순해지고 명확해진다.

제 2 정규화(2NF)


제1 정규화를 완료한 테이블에서, 부분 함수 종속성을 제거하는 과정이다.

모든 기본 키의 부분집합에 의존하는 컬럼들을 분리해 새로운 테이블을 만들고 그 사이의 관계를 설정한다.

쉽게 설명하면,현재 테이블의 주제와 관련없는 컬럼을 다른 테이블로 빼는 작업이다.

제 2 정규화 적용 전

회원ID회원이름회원주소상품코드상품명가격
101홍길동서울시S100소파200
102이순신부산시B100침대300
103유관순대전시S100소파200
101홍길동서울시S101의자150

이 테이블에서는다음과 같은 문제가 발생할 수 있다.

  • 한 테이블에서 회원 정보, 상품 정보, 구매 내역이 모두 포함되어 있어 데이터 중복이 발생하고 무결성이 유지되지 않는다.

발생할 수 있는 이상 현상

  • 삽입 이상

새로운 상품이 등록 된다면 테이블의 구조상 회원 정보와 연관된 컬럼도 채워야 하는 문제가 발생한다.

  • 수정 이상

홍길동이 주소를 경기도로 변경하면 홍길동이 있는 연관 행들을 모두 수정해야 한다.

일부 행을 수정하지 못할 경우 데이터의 범주 불일치가 발생한다.

  • 삭제 이상

의자 상품을 삭제 한다면, 상품의 가격, 상품코드가 사라지고 의자를 구매한 회원의 정보 또한 삭제되는 문제가 발생한다.

제 2 정규화 적용 후

  • 회원 테이블
회원ID회원이름회원주소
101홍길동서울시
102이순신부산시
103유관순대전시
  • 상품 테이블
상품코드상품명가격
S100소파200
B100침대300
S101의자150
  • 주문 테이블
회원ID상품코드
101S100
102B100
103S100
101S101

제 2 정규화 적용 후 장점

  • 각 테이블이 회원 정보, 상품 정보, 구매 정보 등 각각의 역할에 집중하여 관리되고, 중복이 크게 줄어들며 데이터 무결성이 유지된다.
  • 전체적인 데이터 관리 및 유지 보수가 향상된다.

제3 정규화 (3NF)


제2 정규화를 완료한 테이블에서, 이행적 함수 종속성(transitive dependency) 을 제거하는 과정이다.

이행적 함수 종속이란 A -> B, B -> C, A -> C 종속인 관계를 말한다.

제 3 정규화 적용 전

학생ID학생이름강의ID강의명교수ID교수이름
S001김영희L001수학P001이은택
S001김영희L002영어P002김진희
S002이철수L001수학P001이은택
S003최민수L003과학P003박현정

이 테이블은 다음과 같이 이행적 함수 종속이 발생한다.

  • 학생이름은 학생ID에 종속
  • 강의명은 강의ID에 종속
  • 교수이름은 교수ID에 종속
  • 강의ID → 교수ID → 교수이름으로 간접 종속 발생

이러한 이행적 종속성 때문에 중복 데이터와 데이터 무결성 문제가 발생할 수 있다.

발생할 수 있는 이상 현상

  • 삽입 이상

새 과목을 추가하려고 할 때, 아직 수강하는 학생이 없으면 해당 과목을 추가하기 어렵다.

왜냐하면 학생ID와 학생이름이 NULL로 남게 되기 때문이다.

예: 화학이라는 새로운 강의를 P004 교수님(‘최선영’)이 맡게 되었다면, 이렇게 입력하면 학생ID와 학생이름이 NULL이 되어 알맞지 않은 데이터가 저장된다.

  • 수정 이상

강의를 담당하는 교수님이나 강의명이 변경될 경우, 중복 데이터로 인해 여러 행을 수정해야 하고, 그로 인해 일관성이 깨질 수 있다.

예: 수학 강의명이 고급수학으로 변경되었다면, 모든 연관 행의 데이터를 수정해야 한다.

  • 삭제 이상

특정 강의를 수강한 학생이 삭제되면, 해당 강의와 관련된 정보도 함께 제거된다.

예: 김영희 학생이 수학 강의를 수강취소했다면 수학 강의에 대한 정보와

수학 강의를 담당하는 이은택 교수님에 대한 정보가 손실된다.

제 3 정규화 적용 후

  • 학생 정보 테이블
학생ID학생이름
S001김영희
S002이철수
S003최민수
  • 강의 정보 테이블
강의ID강의명교수ID
L001수학P001
L002영어P002
L003과학P003
  • 교수 정보 테이블
교수ID교수이름
P001이은택
P002김진희
P003박현정
  • 수강 신청 정보 테이블
학생ID강의ID
S001L001
S001L002
S002L001
S003L003

제3 정규화 적용 후 장점

  • 각 테이블은 원자적인 값을 가지게 되고, 데이터 중복이 줄어든다.
  • 이상 현상을 피할 수 있으며 유지 보수가 훨씬 용이해진다.
profile
Abong_log

0개의 댓글