danbibibi
article thumbnail

정규화란?

  • 관계형 데이터베이스의 설계에서 중복을 최소화하도록 데이터를 구조화하는 프로세스
  • = 속성들 간의 종속 관계를 분석하여 여러개의 관계(Relation)로 데이터를 분해하는 것
  • 무결성(Integrity)을 유지할 수 있으며, DB 저장용량을 줄일 수 있음

 

정규화 목표

  • 불필요한 중복 최소화
  • 각종 이상 현상 방지
  • 다양한 관점에서 Query 지원
  • 무결성 제약조건 시행 간소화
  • 데이터 베이스 구조 확장시 재디자인 최소화
💡 이상 현상 (Anomaly) 이란?
    : 테이블 내 불필요한 데이터 중복으로 인해,
      테이블을 조작할 때 발생되는 데이터 불일치 현상

    ▶ 삽입 이상 (insertion anomalies)
         : 원치 않는 데이터가 삽입되거나,
           삽입하는데 자료가 부족해 삽입이 되지 않아 발생하는 문제점

    ▶ 삭제 이상 (deletion anomalies)
         : 하나의 데이터만 삭제하고 싶지만,
           그 데이터가 포함된 튜플 전체가 삭제되어 원치 않는 정보 손실이 발생하는 문제점

    ▶ 갱신 이상 (modification anomalies)
         : 중복된 튜플 중 일부만 변경하여 데이터가 불일치하는 모순이 발생하는 문제점

 

제 1 정규화 (1NF)

  • 모든 속성들의 도메인이 원자적이도록 테이블을 분해
  • 비원자적 속성은 데이터의 중복과 저장시 여러 문제를 발생
💡원자적(atomic) 이란?
    : 속성의 도메인이 더 이상 분해되지 않는 것

 

1NF 적용 전

"수강 과목" 속성이 1NF를 만족하지 못한다.

 학번  이름  수강과목
 20191111  김민수  DB, Network
 20201111  김철수  DB
 20211111  박민지  OS, Network
 20221111  이민지  OS, DB

 

1NF 적용 후

따라서 1NF를 만족하도록 아래와 같이 수정을 해준다.

 학번  이름  수강과목
 20191111  김민수  DB
 20191111  김민수  Network
 20201111  김철수  DB
 20211111  박민지  OS
 20211111  박민지  Network
 20221111  이민지  OS
 20221111  이민지  DB

 

제 2 정규화 (2NF)

  • 제 1 정규화를 만족
  • 완전 함수 종속을 만족하도록 테이블을 분해 (부분 함수 종속 제거)
💡 종속 이란?
    : 기본 키의 부분집합이 결정자가 되어서는 안됨을 의미

 

2NF 적용 전

다음과 같은 테이블에서 기본키는 {학번, 수강과목} 으로 복합키 이다.

그런데, 기본 키의 부분집합인 "수강과목"이  "지도교수"의 결정자가 되고 있다.

{학번, 수강과목} (결정자) → {지도교수, 학점}(종속자)
수강과목(결정자) → 지도교수(종속자)

 

 학번  수강과목  지도교수  학점
 20191111  DB  이용호  A
 20191111  Network  이길석  A
 20201111  DB  이용호  B
 20211111  OS  강기태  B
 20211111  Network  이길석  B+
 20221111  OS  강기태  C
 20221111  DB  이용호   A+

 

2NF 적용 후

따라서 2NF를 만족하도록 다음과 같이 테이블을 분리해 준다.

 학번  수강과목  학점
 20191111  DB  A
 20191111  Network  A
 20201111  DB  B
 20211111  OS  B
 20211111  Network  B+
 20221111  OS  C
 20221111  DB   A+
 수강과목  지도교수
 DB  이용호
 Network  이길석
 OS  강기태

 

제 3 정규화 (3NF)

  • 제 2 정규화를 만족
  • 이행적 종속을 없애도록 테이블을 분해
  • BCNF 보다는 약하지만, 종속성을 보존하도록 해줌
💡 이행적 종속이란?
    : A → B , B → C에 의해서 추론될 수 있는 A→ C 의 종속관계
     즉, 비주요 속성이 비주요 속성에 의해 종속되는 경우가 없는 릴레이션 형태

💡 이행적 종속 제거가 필요한 이유
     : 아래 테이블에서 수강과목이 바뀌면, 수강료도 바뀌어야한다!
       이 작업이 번거로울 수도 있고, 실수가 발생할 수도 있으므로
       때문에 갱신 이상이  생기지 않도록, 별도의 테이블로 분리해준다!

 

3NF 적용 전

한 학생이 한 과목만 듣는다고 가정해보자.

학번 수강 과목 / 강과목 → 수강료

이 경우, 학번 → 수강료를 결정한다.

 학번  수강과목  수강료
 20191111  DB  100,000
 20201111  DB  100,000
 20211111  OS  90,000
 20221111  Network  80,000

 

3NF 적용 후

따라서 다음과 같이 분해해주어야 한다.

 학번  수강과목
 20191111  DB
 20201111  DB
 20211111  OS
 20221111  Network
 수강과목  수강료
 DB  100,000
 OS   90,000
 Network   80,000

 

BCNF (Boyce-Codd Normal Form)

  • 제 3 정규화 만족
  • 모든 결정자가 후보키 집합에 속하도록 테이블 분해

      ( = 후보키에 속하지 않는 속성이 결정자가 되어서는 안됨)

💡 수많은 정규형이 있지만,
    관계 데이터베이스 설계의 목표는
    각 릴레이션이 3NF(or BCNF)를 갖게 하는 것!

 

BCNF 적용 전

기본키 {학번, 수강과목} 으로 , 지도교수를 알 수 있다.

 

하지만, 같은 과목을 다른 교수가 가르칠 수 도 있기 때문에,

수강과목 지도교수 종속은 성립하지 않는다.

 

하지만 지도 교수가 어떤 과목을 가르치는지는 알 수 있으므로, 

지도교수 수강과목 종속이 성립한다.

 

이처럼 후보키 집합이 아닌 속성이 결정자가 되어버리는 상황

 BCNF를 만족하지 않는다고 한다!

 학번  수강과목  지도교수
 20191111  DB  이용호
 20191111  Network  이길석
 20201111  DB  김용호
 20211111  OS  강기태
 20211111  Network  이길석
 20221111  OS  강기태
 20221111  DB  이용호

 

BCNF 적용 후

 학번  지도교수
 20191111  이용호
 20191111  이길석
 20201111  김용호
 20211111  강기태
 20211111  이길석
 20221111  강기태
 20221111  이용호
 지도교수 수강과목
 이용호 DB
 이길석 Network
 김용호 DB
 강기태 OS

 

정규화 장단점

장점

  • 데이터베이스 변경 시 이상 현상(Anomaly) 해결 가능
  • 데이터베이스 구조 확장 시 재디자인 최소화 가능
  • 사용자에게 데이터 모델을 더욱 의미있게 제공
💡 정규화된 테이블들과 정규화된 테이블들간의 관계들은
     현실 세계에서의 개념들과 그들간의 관계들을 반영 !

 

단점

  • 릴레이션 분해로 인한 JOIN 연산 증가 (이로 인해 처리 속도가 빨라질 수도, 느려질 수도 있음)
  • 이로 인해, 성능 저하가 나타나는 경우, 반정규화를 적용할 필요가 있음
💡 반정규화 (De-normalization, 비정규화) 란?
    : 정규화된 엔티티, 속성, 관계를 시스템의 성능 향상 및 개발과 운영의 단순화를 위해
      중복 통합, 분리 등을 수행하는 데이터 모델링 기법

💡 반정규화 대상
  - 자주 사용되는 테이블에 액세스하는 프로세스의 수가 가장 많고, 항상 일정한 범위만을 조회하는 경우
  - 테이블에 대량 데이터가 있고 대량의 범위를 자주 처리하는 경우, 성능 상 이슈가 있을 경우
  - 테이블에 지나치게 조인을 많이 사용하게 되어 데이터를 조회하는 것이 기술적으로 어려울 경우

💡 반정규화 시 주의할 점
    : 반정규화를 과도하게 적용하다보면, 데이터의 무결성이 깨질 수 있음
      또한, CRUD에 대한 응답 시간이 늦어질 수도 있음

 

profile

danbibibi

@danbibibi

꿈을 꾸는 시간은 멈춰 있는 것이 아냐 두려워하지 마 멈추지 마 푸른 꿈속으로