상세 컨텐츠

본문 제목

[개미의 걸음 SQLD 1과목] 성능 데이터 모델링 ① 정규화(Normalization)

자격증/SQLD

by IT개미 데이터 2020. 12. 10. 07:07

본문

728x90

들어가기전...

함수적 종속성[Functional Dependency]

X→Y이면 Y는 X에 함수적으로 종속된다는 의미

  • X가 변화할 때 Y도 변화하면 함수적으로 종속한다.
  • 정규화는 함수적 종족성을 근거로 함

 

정규화[Normalization]

출처 : DB.GUIDE.NET

데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 위한 방법

  • 데이터를 분해하는 과정
  • 정규화된 모델은 테이블 분해 가능
        → 테이블이 분해되면 두 테이블에 모두 있는 속성을 조인하여 하나의 합집합을 만들 수 있음
  • 불필요한 데이터를 입력하지 않아도 되므로 데이터 중복을 제거하고 데이터 모델의 독립성을 확보하기 위한 방법
  • 정규화 수행시 비즈니스에 변화가 발생해도 데이터 모델의 변경을 최소화 할 수 있음
  • 정규화를 하지 않을 경우 이상현상[Anomaly] 발생
        → 이상현상을 해결하기 위해 정규화를 통해 테이블을 분해

# Anomaly의 종류

더보기
삽입 이상
[Insertion Anomaly]
릴레이션에 데이터 삽입 시, 의도와는 상관없이 원하지 않은 값들도 함께 삽입되는 현상
삭제 이상
[Deletion Anomaly]
릴레이션에서 한 튜플 삭제 시 의도와 상관없는 값도 함께 삭제되는 연쇄 삭제 현상
갱신 이상
[Update Anomaly]
릴레이션에서 튜플에 있는 속성값 갱신 시 일부 튜플 정보만 갱신되어 정보모순이 생기는 현상

 

정규화 절차

제 1 정규화 속성[Attribute]의 원자성을 확보
기본키[Primary Key]를 설정

    → 엔터티의 유일성을 만족하기 위해 식별자를 찾는 과정
중복속성에 대한 분리
    칼럼 단위에서 중복된 경우 1:M관계로 두 개의 엔터티로 분리하는 제1 정규화 진행
제 2 정규화 부분 함수 종속성 제거
    부분 함수 종속성은 기본키가 2개 이상의 칼럼으로 이뤄진 경우에만 발생
    → 부분 함수 종속성이 발생하면 테이블을 분해하여 새로운 테이블 도출
    → 즉, 모든 속성이 식별자에 종속해야 하며 그렇지 않은 경우에는 분해
기본키가 하나의 칼럼으로 이뤄지면 제2정규화는 생략
제 3 정규화 이행 함수 종속성을 제거
    이행 함수 종속성은 기본키를 제외하고 칼럼간에 종속성이 발생하는 것
    제3정규화를 통해 기본키를 제외한 칼럼 간에 종속성을 제거
제 1정규화와 제 2정규화를 수행한 다음 수행
BNCF
[Boyce-Codd Normal Form]
복수의 후보키가 있고, 후보키들이 복합 속성이어야하며 서로 중첩됨
    기본키가 후보키를 함수적으로 종속
    후보키가 기본키를 함수적으로 종속하는 경우 분해 
    → 해당 후보키 테이블을 새롭게 만들고 기본키로 지정
       컬럼은 함수적으로 종속된 기본키
제 4정규화 여러 칼럼들이 하나의 칼럼을 종속시키는 경우, 분해햐여 다중값 종속성을 제거
제 5정규화 조인에 의해 종속성이 발생되는 경우 분해

※ 실질적으로 제 3 정규화까지만 수행

# 1차 정규화의 대상

더보기
출처 : DBGUIDE.NET
  • 중복속성을 분리하기 위해 1차 정규화가 필요한 엔터티
  • 일재고와 일재고상세를 1:M 관계로 생성 가능
  • 일재고와 일재고상세를 구분하여 일재고에 발생되는 트랜잭션의 성능저하를 예방 가능

# 1차 정규화[2차 정규화 대상]의 예

더보기

PK에 대해 반복되는 그룹이 존재하지 않으므로 1차 정규형

  • 부분함수종속의 규칙을 가지고 있으므로 2차 정규형이라고 할 수 없음[2차 정규형의 대상]

 

# 2차 정규화 적용 전/후의 테이블

더보기
출처 : DBGUIDE.NET
  • 2차 정규화가 안된 반정규화된 테이블를 2차 정규화하여 두 개의 테이블로 분리한 예
  • PK가 걸려있는 방향으로 조인이 걸려 Unique Index를 찾아 빠르게 데이터 조회 가능
        → 하나의 테이블에서 조회할 때와 비교했을 때 성능 차이가 미미
        → 일부 SQL문 처리는 2차 정규화된 테이블이 더 빠름!
        → 정규화를 수행하면 무조건 조회성능이 저하되는 것은 아님!!!
출처 : DBGUIDE.NET
  • 매각일자가 결정자가 되고 매각시간과 매각장소는 의존자가 되는 함수적 종속관계가 형성된 예
  • 대량의 데이터에서 조인 조건의 대상을 찾기 위해 인라인뷰를 사용하므로 모델의 성능이 저하됨
  • 2개 이상의 기본키를 갖는 테이블로부터 부분 함수 종속성 발생
  •  제2정규화를 통해 매각일자[PK], 매각시간[일반속성], 매각장소[일반속성]을 갖는 테이블을 별도로 생성

 

 

 

정규화의 문제점

  • 정규화는 데이터 조회[SELECT]시에 조인을 유발해 CPU와 메모리를 많이 사용하게 됨
         → 정규화는 테이블을 분해해서 데이터 중복을 제거하므로 데이터 모델의 유연성을 높임
  • 두 개의 테이블로 이뤄진 경우, 조인을 사용해야할 수도 있음
        ex> 직원 : 사원번호, 부서코드, 이름, 전화번호
              부서 : 부서코드, 부서명 
    SELECT 사원번호,부서코드, 부서명, 이름, 전화번호 FROM 직원,부서 WHERE 직원.부서코드 = 부서.부서코드

 

 

 

 

 

 

 

 

 

728x90

관련글 더보기

댓글 영역