정규화, 반정규화
① 정규화
제 1정규형
: 모든 속성은 반드시 하나의 값을 가져야 한다.
* 위반CASE
- 한 속성에 여러개의 값 존재(다중값)
- 중복데이터를 속성으로 분리
제 2정규형
: 엔티티의 일반속성을 주식별자 전체에 종속적이어야 한다.
* 위반CASE
- 주식별자가 여러개여서 하나의 속성이 여러개에 중복적으로 종속되는 경우
- 여러개에 중복적으로 종속되었을 경우 수정대상이 많아진다
제 3정규형
: 엔티티의 일반속성 간에는 서로 종속적이지 않는다.
* 위반CASE
- 이행종속
정규화를 통한 성능향상
- 정규화 수행모델은 데이터를 입력/수정/삭제 할 때 처리성능이 향상된다
- 단 데이터를 조회할 때에는 조건에 따라 성능이 저하될 수도 있음
②반정규화
반정규화의 기법
- 테이블의 반정규화
- 테이블 병합 : 1:1관계, 1:M관계, 슈퍼/서브타입 병합
- 테이블 분할 : 수직, 수평분할
- 테이블 추가 : 중복/통계/이력/부분테이블 추가
- 컬럼의 반정규화
- 중복컬럼추가 : 조인을 감소시키기 위해 중복된 컬럼 위치
- 파생컬럼추가 : 계산에 의한 성능저하를 방지하기 위해 미리 값을 계산하여 보관
- 이력테이블 컬럼추가 : 대량의 이력데이터를 처리할때를 위한 이력관리
- PK에 의한 컬럼추가
- 응용시스템 오작동을 위한 컬럼추가 : 이전데이터를 임시적으로 중복하여 보관
-> 반정규화를 하는 경우, 조회성능은 향상되지만 불필요한 입력/수정/삭제로직이 추가됨
반정규화의 대상
- 항상 일정한 범위만 조회하는 경우
- 테이블의 대량의 데이터가 있는 경우, 처리범위를 줄이지 않으면 성능을 보장할 수 없을 때
- 통계정보를 필요로 할 때
- 지나치게 많은 join이 걸려있을 때
'DB > SQLD' 카테고리의 다른 글
[SQLD] SQL기본 - 명령어 (0) | 2022.05.13 |
---|---|
[SQLD] 데이터 모델과 성능 (0) | 2022.05.08 |
[SQLD] 데이터모델링 3요소 + 식별자 (0) | 2022.05.07 |
[SQLD] 데이터모델링의 이해 (0) | 2022.05.05 |
댓글