SQLD 정규화

Soondol·2024년 4월 30일

정규화

  • 최소한의 데이터만을 1개의 Entity에 넣는식으로 데이터를 분해하는 과정
  • 데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 위한 과정
  • 데이터의 중복을 제거하고, 데이터 모델의 독립성을 확보
  • Entity를 상세화 하는 과정으로 논리데이터 모델링 수행 시점에서 고려
  • 제 1정규화 ~ 제 5정규화 / 실질적으로는 제 3정규화 까지 수행

이상현상 (Abnormality)

  • 정규화를 하지 않아 발생하는 현상
    - 삽입 이상 : 데이터를 삽입하기위해 불필요한 데이터도 함께 삽입해야함
    - 갱신 이상 : 속성값 갱신 시 일부 튜플만 갱신되어 모순이 발생
    - 삭제 이상 : 데이터 삭제 시 의도와 다른 값들도 연쇄 삭제됨

정규화 단계

제 1 정규화 (1NF)

  • 테이블의 컬럼이 원자성(한 속성이 하나의 값을 갖는 특성)을 갖도록 테이블을 분해하는 단계
  • 하나의 행, 컬럼의 값이 반드시 한 값만 입력되도록 행 분리
이름구매상품
홍길동샴푸, 린스
박길동우유, 치즈
최길동린스

이름구매상품
홍길동샴푸
홍길동린스
박길동우유
박길동치즈
최길동린스

제 2 정규화 (2NF)

  • 제 1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만들도록 테이블을 분해

    완전 함수 종속
    : 기본키를 구성하는 모든 컬럼의 값이 다른 컬럼을 결정짓는 상태

학생번호강의명강의실성적
1000운영체제본관A
1001운영체제본관B
1000데이터베이스자연관B+
1000컴퓨터기초본관A-
1001자료구조자연관A

기본키 (학생번호 + 강의명) 중 강의명에 읭해 강의실이 결정
-> 완전 함수 종속성 위배, 부분 함수 종속성을 가짐
-> PK와 부분 함수 종속성을 갖는 컬럼을 각각 다른 테이블로 분해


수강이력

학생번호강의명성적
1000운영체제A
1000데이터베이스B+
1000컴퓨터기초A-
1001운영체제B
1001자료구조A

강의실

강의명강의실
운영체제본관
컴퓨터기초본관
데이터베이스자연관
자료구조자연관

제 3 정규화 (3NF)

  • 제 2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분리

    이행적 종속
    A->B, B->C의 관계가 성립할 때, A->C가 성립되는것을 말함

  • (A,B), (B,C)로 분리하는것이 제 3 정규화

구매

고객번호상품명가격
1001우유2500
1002치즈3500
1003소시지4000
1004우유2500

구매

고객번호상품명
1001우유
1002치즈
1003소시지
1004우유

상품

상품명가격
우유2500
치즈3500
소시지4000

BCNF(Boyce-Codd Normal Form) 정규화

  • 모든 결정자가 후보키가 되도록 테이블을 분해하는 것

제 4 정규화

  • 여러 컬럼들이 하나의 컬럼을 종속시키는 경우 분해하여 다중값 종속성을 제거

제 5 정규화

  • 조인에 의해서 종속성이 발생되는 경우 분해

반정규화=역정규화(De-Normaliztion)

  • DB성능 향상을 위해 데이터 중복을 허용하고 Join을 줄이는 DB성능 향상 방법
  • Select 속도는 향상시키지만, 데이터 모델의 유연성은 낮아짐
    (비정규화는 정규화를 수행하지 않음을 의미한다)

반정규화 수행 케이스

  • 정규화에 충실하여 종속성, 활용성은 향상되지만 수행속도가 느린경우
  • 다량의 범위를 자주 처리해야 하는 경우
  • 특정 범위의 데이터만 자주 처리하는 경우
  • 요약/집계 정보가 자주 요구되는 경우

홍쌤의 데이터랩
SQLD 1과목 완벽 정리 (2024년 신유형 반영) 강의에 대해
공부 및 개인적으로 정리한 글 입니다.


반정규화 방법

기법분류기법내용
1:1관계1:1관계를 통합하여 성능향상
테이블병합1:M관계1:M관계를 통합하여 성능향상
슈퍼/서브타입슈퍼/서브 관계를 통합하여 성능 향상
테이블수직분할컬럼 단위의 테이블을 DISK I/O를 분산처리하기 위해 테이블을 1:1로 분리하여 성능향상
분할수평분할행(레코드) 단위로 집중 발생되는 트랜잭션을 분석하여 DISK I/O 및 데이터 접근의 효율성을 높여 성능을 향상하기 위해 행 단위로 테이블을 쪼갬
중복테이블 추가다른 업무이거나 서버가 다른 경우 동일한 테이블 구조를 중복하여 원격 조인을 제거하고 성능을 향상
테이블 추가통계테이블 추가SUM, AVG등을 미리 수행하여 계산해 둠으로써 조회 시 성능을 향상
이력테이블 추가이력테이블 중에서 마스터 테이블에 존재하는 레코드를 중복하여 이력테이블에 존재하는 방법

0개의 댓글