본문 바로가기
DB/SQLD

[SQLD] 정규화, 반정규화

by 댕꼬 2022. 5. 8.

정규화, 반정규화


① 정규화

 

제 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

댓글