[SQLD] 정규화 (Normalization)

yjkim97·2023년 8월 7일

자격증

목록 보기
8/24
post-thumbnail

정규화 (Normalization)

정규화란 데이터 정합성(데이터의 정확성과 일관성을 유지하고 보장)을 위해 Entity(이하 테이블)를 작은 단위로 분리하는 과정이다.

장점

  • 이상 현상 제거 및 방지
  • 데이터베이스 구조 확장시 재 디자인 최소화
  • 데이터 입력/수정/삭제 성능 향상

단점

  • Join 연산 증가
  • 데이터 조회 성능 저하
    단! 항상 조회 성능을 저하시킨다는 것은 아님. 기본적으로 중복된 데이터를 제거함으로써 조회성능을 향상시킬 수 있음을 알아야한다.

정규화 수행시 테이블 분해로 인해 Join 연산이 증가고 이에 따라 질의 응답 시간이 증가할 수 있다.
이런 경우 오히려 데이터 조회 성능이 저하되기 때문에 반정규화 작업을 수행하기도한다.

무조건적인 정규화는 오히려 성능 저하를 야기한다.

✚ 이상 현상

  • 삽입이상 (Insertion Anomaly) : 데이터 삽입시 속성에 해당하는 값이 없어 Null을 입력해야 하는 현상
  • 삭제이상 (Deletion Anomaly) : 데이터 삭제시 같이 저장된 다른 정보까지 연쇄적으로 삭제되는 현상
  • 갱신이상 (Update Anomaly) : 데이터 갱신시 중복된 데이터의 일부만 갱신되어 일어나는 데이터 불일치 현상

⭐️ 정규화 규칙

규칙설명
제1 정규화(1NF)모든 속성은 반드시 원자값(1개 값)을 가진다. ▶️ 원자값이 아닌 도메인을 분해한다.
제2 정규화(2NF)모든 속성은 완전 함수 종속이어야 한다.▶️ 부분 함수 종속성을 제거한다.
제3 정규화(3NF)기본키를 제외한 컬럼간의 종속성을 제거한다. ▶️ 이행 함수 종속성을 제거한다.
BCNF모든 결정자는 후보키 집합에 속해야 한다. ▶️ 후보키가 기본키를 종속시키면 분해한다.
제4 정규화(4NF)여러 속성들이 하나의 속성을 종속시키는 경우 분해해야한다. ▶️ 다치 종속을 제거한다.
제5 정규화(5NF)조인에 의해서 종속성이 발생하는 경우 분해한다. ▶️ 조인 종속을 제거한다.

제1 정규화 (1NF)

  • 모든 속성은 반드시 원자값(1개 값)을 가진다.
  • 원자값이 아닌 도메인을 분해한다.

대상 테이블

왼쪽 테이블과 같이 한 속성에 여러 값이 포함되어 있거나
오른쪽 테이블과 같이 유사한 속성이 반복되는 경우 1차 정규화 대상이 된다.

정규화 후

회원 테이블과 직업 테이블로 분리


제2 정규화

  • 모든 속성은 완전 함수 종속이어야 한다.
  • 부분 함수 종속성을 제거한다.
  • 테이블의 모든 일반 속성은 (기본키가 아닌 컬럼) 모든 주식별자 (복합 기본키)에 종속되어야 한다.

✚ 부분 함수 종속성
기본키가 2개 이상인 컬럼으로 이루어질 때
일반 컬럼이 기본키 중 일부에만 종속된 경우를 뜻 한다.

기본키가 1개 컬럼으로 이루어졌으면 제2 정규화는 생략된다.

대상 테이블

위 테이블의 기본키는 주문번호&상품코드로 이루어져있고
일반 속성에서 주문수량은 기본키를 통해서만 구할수 있지만 상품명은 기본키중 상품코드만 알아도 구할 수 있다.

이는 상품명부분 함수 종속성 띄는 것이다.

정규화 후

주문 테이블과 상품 테이블로 분리


제3 정규화

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

대상 테이블

일반 속성인 소속사명은 다른 일반 속성인 소속사코드를 통해 알 수 있다.

이를 이행 함수 종속성이라고 한다.

✚ 이행 함수 종속성
A, B, C가 존재할 때, A가 B에 함수 종속적이 아니면 이때 C는 A에 이행함수 종속이라고 한다. 제2정규형(2NF)의 관계에 이행함수 종속성이 있는 경우, 그것을 배제하고 분해한 관계를 제3정규형(3NF)이라고 한다. A->B 이고 B->C 일 경우에만 A->C 이면 이행함수(적) 종속이라고 한다.


간단히 말해서 A를 통해 B를 알수 있고(A->B) B를 통해 C를 알수있는데(B->C) A를 통해 C도 알수 있는 경우(A->C) 이행 함수 종속이라고 한다.

정규화 후

연예인 테이블에서 소속사 분리


BCNF (Boyce-Codd Normal Form)

  • 모든 결정자는 후보키 집합에 속해야 한다.
  • 후보키가 기본키를 종속시키면 분해한다.

대상 테이블

학생번호 과목이 기본키일 때 기본키로 지도교수를 알 수 있다.
하지만 여기서 지도교수를 통해 과목을 알 수 있으므로 과목지도교수에 종속 된다.

이는 후보키가 아닌 지도교수가 결정자가 되었다는 것을 의미한다.

정규화 후

수강 테이블에서 교수 정보를 분리



보통 정규화는 BCNF까지 수행한다. 이 이상 진행 할 경우 단점이 극대화 되므로 아래는 간략히 적어두겠다.

제4 정규화

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

✚ 다치 종속성
다치 종속성(MVD)은 어떤 레코드의 존재가 다른 레코드의 존재로 이어짐을 의미한다. 다치종속성은->>으로 표시하는데, R{A,B,C}일 때 (A,C)->>{B}≡(A) ->{B} 성립한다. , A->>B이면 A->>C도 성립하고 A->>B│C이다. (Fagin정리에 따라) R{A,B,C}에서 다치종속 A->>B│C이면 R1{A,B}와 R2{A,C}로 무손실 분해가 가능하다. 이를 제4정규형(4NF)의 관계에 있다고 말한다.

제5 정규화

  • 조인에 의해서 종속성이 발생하는 경우 분해한다.
  • 조인 종속을 제거한다.
  • Project Join Normal Form(PJNF)

✚ 조인 종속성
조인종속(JD)는 릴레이션 R이 그의 프로젝션 A,B,.....,Z의 조인과 동일하면 R은 JD*(A,B,....,Z )를 만족한다. 이때 A,B,....,Z는 R의 애트리뷰트에 대한 부분집합이다. 다시말해서 테이블 R이 R의 속성의 부분집합을 가지는 여러 개의 테이블들을 조인하여 만들어질 수 있을 때, R은 조인 종속성을 가진다고 한다. 이를 제5정규형(5NF)이라고 한다.


Reference

profile
어제는 🐸두꺼비 오늘은 😄YJ

0개의 댓글