일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 온라인마케팅
- sqld시험
- 마케터자격증
- 마케터공부
- 비전공자SQLD
- 온라인광고
- 마케팅자격증
- 마케터
- 디스플래이광고
- 자격증공부
- 네이버파워링크
- SQL자격증
- 마케터용어
- 마케터실무
- 네이버검색광고
- 비전공자마케터
- 네이버광고
- SQLD
- GA4
- 온라인마케터
- da매체
- 네이버마케팅
- 마케팅이슈
- 네이버
- 네이버이슈
- 카카오키워드
- 카카오
- DA광고
- 마케팅
- 카카오모먼트
- Today
- Total
주케터의 메모장
[SQLD] 비전공자의 SQLD 공부 : 반정규화(De-Normalization)에 대해 알아보자! 본문
안녕하세요
주케터입니다 :)
오늘은 SQLD공부를 이어서 해볼까해요
반정규화... 저에게는 너무 큰 산같이 느껴졌지만,
그 산을 함께 언덕으로 만들어보자구요!

반정규화란? 간단히 말하자면 성능향상을 위해 정규화를 포기하는 것 입니다.
하지만, 데이터의 무결성이 보장되지는 않고, 제한적으로 사용해야합니다.
반정규화는 데이터의 조회 성능을 향상 시키기 위해
데이터의 중복을 허용하거나 데이터를 그룹핑하는 과정입니다.
단, 위에서 말한대로 입력, 수정, 삭제 성능을 저하될 수 있으며
데이터 정합성 이슈가 발생할 수 있습니다.
반정규화의 과정은 꼭 정규화가 끝난 후 거치게 되며, 정규화와 마찬가지로 일정한 룰이 존재합니다.
고로, 정규화와 반정규화는 동시에 일어날 수 없겠죠?
1) 테이블 반정규화
테이블 병합 > 업무 프로세스상 JOIN이 필요한 경우가 많아 테이블을 통합하는 것이 성능측면에서 유리할 경우 고려 |
1:1 관계 테이블 병합 |
1:M 관계 테이블 병합 | |
슈퍼 서브 타입 테이블 병합 | |
테이블 분할 > 수직분할: 엔터티의 일부 속성을 별도의 엔터티로 분할 > 수평분할: 엔터티의 인스턴스를 특정기준으로 별도의 엔터티로 분할 |
테이블 수직 분할(속성 분할) : 컬럼단위로 테이블을 1:1 분리 |
테이블 수평 분할(인스턴스 분할, 파티셔닝) : ROW단위로 테이블 분리 | |
테이블 추가 | 중복 테이블 추가 > 데이터의 중복을 감안하더라도 성능상 반드시 필요하다고 판단되는 경우 별도의 엔터티 추가 |
통계 테이블 추가 > 통계값을 미리 계산해서 저장하는 테이블 추가 |
|
이력 테이블 추가 > 마스터 테이블에 존재하는 ROW를 트렌젝션 발생시점에 따라 복사해두는 테이블 추가 |
|
부분 테이블 추가 >자주 조회되는 컬럼들만 별도로 테이블 추가 |
2) 컬럼 반정규화
(1) 중복 컬럼 추가 : 업무 프로세스상 JOIN이 필요한 경우가 많아 컬럼을 추가하는 것이 성능 측면에서
유리할 경우 고려한다 . 이는 SELECT 비용은 감소하나, UPDATE 비용은 증가한다.
(2) 파생 컬럼 추가 : 프로세스 수행 시 부하가 염려되는 계산값을 미리 컬럼으로 추가하여 보관하는 방식
상품의 재고나 프로모션 적용할인가 등이 이에 해당 할 수 있다.
계산을 통해 얻어지는 결과값을 테이블에 컬럼으로 저장
(3) 이력 테이블 컬럼 추가: 대량의 이력 테이블을 조회 할 때 , 속도가 느려질 것을 대비하여 조회 기준이 될 것으로
판단되는 컬럼을 미리 추가해놓는 방식. 최신 데이터 여부 등이 이에 해당할 수 있다.
3) 관계 반정규화(중복관계 추가)
업무 프로세스상 JOIN이 필요한 경우가 많아 중복관계를 추가하는 것이 성능 측면에서 유리할 경우
고려한다.
종류가 너무 많죠?
그래도 많이 빈출이 되고 어렵게 꼬는 문제가 있어서
꼭 꼭 꼭 숙지해야해요!
이걸 쉽게 풀이해주는 인강도 아래에 첨부해두겠습니다.
많은 도움이 되었으면 좋겠네요.
그럼 안녕!

'TEST > SQLD' 카테고리의 다른 글
[SQLD] 그룹 함수 ROLLUP,CUBE,GROUPING SETS 에 대해 알아보자! (0) | 2023.09.04 |
---|---|
[SQLD] 명령어 DROP/TRUNCATE/DELETE의 차이점에 대해 쉽게 알아보자! (0) | 2023.08.31 |
[SQLD] 비전공자의 SQLD 공부 서브쿼리란 무엇일까?(스칼라,인라인,중첩) 참고 인강 有 (0) | 2023.08.17 |
[SQLD] 비전공자의 SQLD 공부 : STANDARD JOIN중 INNER JOIN에 대해 알아보자! 개념, 예제 풀어보기 (0) | 2023.07.27 |
[SQLD] 비전공자의 SQLD 공부 : 함수 정의 및 예제 풀기(LTRIM,RTRIM,TRIM,SUBSTR,LENGTH) (0) | 2023.07.24 |