정규화, 반정규화

녜정·2022년 5월 18일
0

DB

목록 보기
1/3
post-thumbnail

업무 중에 차단 유저 목록을 저장하면서 생긴 이야기입니당
유저 정보에도 저장되어있는 ID를 차단 목록을 저정 할 때도 저장할꺼야!!!
그런데 차장님이 반정규화하면된단다 (느에에이잉 ?!?!) 청므들ㅇ므 ㅠ

🏋🏻 정규화

  • 정규화는 데이터의 일관성을 유지하고, 최소한의 데이터 유지로 중복을 줄이고, 최소한의 데이터 유연성을 위한 방법이며 데이터를 분해하는 과정입니다.
  • 정규화된 모델은 테이블이 분해됩...........

정규화 절차

정규화절차설명
제 1 정규화- 속성(Atrribute)의 원자성을 확보한다.
- 속성의 중복값을 제거한다.
- 기본키(Primary)를 설정한다.
제 2 정규화- 기본키가 2개 이상의 속성으로 이루어진 경우, 부분 함수 종속성을 제거(분해)한다.
- 부분 함수 종속성이란, 기본키가 2개 이상인 컬럼으로 이루어진 경우에만 발생한다. 기본키가 1개이면 skip
- 복합 인스턴스에 대해 각 인스턴스의 종속적 중복을 삭제한다.
제 3 정규화- 기본키를 제외한 칼럼 간에 종속성을 제거한다.
- 즉, 이행 함수 종속성을 제거한다.
- 일반 속성의 종속성을 제거한다.
BCNF- 기본키를 제외하고 후보키가 있는 경우, 후보키가 기본키를 종속시키면 분해한다.
- BCNF는 복수의후보키가 있고, 후보키들이 복합 속성이어야하며, 서로 중첩되어야 한다.
제 4 정규화- 여러 칼럼들이 하나의 칼럼을 종속시키는 경우, 분해하여 다중값 종속성을 제거한다.
- 다치 종속성을 제거한다.
제 5 정규화- 조인에 의해서 종속성이 발생되는 경우 분해한다.

정규화의 문제점

정규화는 데이터 조회(select) 시 많은 조인(join)을 유발하기 때문에 CPU와 메모리를 많이 사용하게 됩니다.

정규화를 사용한 성능 튜닝

  • 조인으로 인하여 성능이 저하되는 문제를 반정규화로 해결할 수 있다.
  • 반정규화는 데이터를 중복시키기 때문에 또 다른 문제점을 야기시킬 수 있습니다.


🤸🏻‍♀️ 반정규화

  • 데이터베이스의 성능 향상을 위하여, 데이터 중복을 허용하고 조인을 줄여 DB 부하를 줄이는 방법입니다.
  • 반정규화는 조회 속도를 향상시키지만, 데이터 모델의 유연성은 낮아집니다.

반정규화를 수행하는 이유

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

반정규화 절차

반정규화절차설명
대상 조사 및 검토- 데이터 처리 범위, 통계성 등을 확인해서 반정규화 대상을 조사합니다.
다른 방법 검토- 반정규화를 수행하기 전에 다른 방법이 있는지 검토합니다.
- EX) 클러스터링, 뷰, 인덱스 튜닝, 응용 프로그램, 파티션 등을 검토합니다.
반정규화 수행- 테이블, 속성, 관계 등을 반정규화합니다.

반정규화 기법

계산된 컬럼 추가

  • 배치 프로그램으로 총 판매액, 평균 잔고, 계좌 평가를 미리 계산하고 그 결과를 특정 컬럼에 추가한다.
    연산이 많이 필요해서 서버가 비명지르던 시절이 있었지.... ☠️

테이블 수직 분할

  • 하나의 테이블에서 두 개 이상의 테이블로 분활한다. 즉, 컬럼을 분활하여 새로운 테이블을 만드는 것입니다.

테이블 수평 분활

  • 하나의 테이블에 있는 값을 기준으로 테이블을 분활하는 방법입니다.
profile
안녕하세요, 4년차 백엔드 개발자입니다. 소통하는 것을 좋아하고, velog에는 주로 짧은 글을 작성합니다.

0개의 댓글