SQLD

SQLD 개념정리 (데이터 모델링의 이해, 정규화, 반정규화)

chojdsj 2023. 10. 24. 00:49
728x90

 

 

성능데이터모델링 이란?

 

 

- 데이터베이스 성능향상을 목적으로 설계단계의 데이터 모델링 때부터 성능과 관련된 사항이 데이터 모델링에 반영될 수 있도록 하는 것이다.

 

- 분석/설계 단계에서 데이터베이스 처리 성능응 향상 시킬 수 있는 방법을 주도 면밀하게 고려해야 한다.

 

- 분석/설계 단계에서 성능을 고려한 데이터모델링을 수행할 경우 성능저하에 따른 Rework 비용을 최소화 할 수 있는 기회를 가지게 된다.

 

- 데이터의 증가가 빠를수록 성능저하에 따른 성능개선비용은 증가한다.

 

- 데이터모델은 성능을 튜닝하면서 변경이 될 수 있는 특징이 있다.

 

 

 

 

 

성능 데이터모델링 수행 절차

 

 

1) 데이터모델링을 할 때 정규화를 정확하게 수행한다.

 

2) 데이터베이스 용량산정을 수행한다.

 

3) 데이터베이스에 발생되는 트랜잭션의 유형을 파악한다.

 

4) 용량과 트랜잭션의 유형에 따라 반정규화를 수행한다.

 

5) 이력모델의 조정, PK/FK조정, 슈퍼타입/서브타입 조정 등을 수행한다.

 

6) 성능관점에서 데이터모델을 검증한다.

 

 

 

성능데이터 모델링을 할 때 고려사항

 

 

- 용량산정은 전체적인 데이터베이스에 발생되는 트랜잭션의 유형과 양을 분석하는 자료가 되므로 성능데이터 모델링을 할 때 중요한 작업이 될 수 있다.

 

- 물리적인 데이터 모델링을 할 때 PK/FK의 칼럼의 순서조정, FK인덱스 생성등은 성능 향상을 위한 데이터 모델링 작업에 중요한 요소가 된다.

 

- 이력데이터는 시간에 따라 반복적으로 발생이 되기 때문에 대량 데이터일 가능성이 높아 특별히 고려하여 칼럼 등을 추가하도록 설계해야 한다.

 

 

 

 

데이터모델링의 정규화

 

 

- 데이터 모델링의 정규화(Normalization)는 데이터베이스 설계의 과정 중에서 중복을 최소화 하고 데이터의 일관성을 유지하기 위한 중요한 단계입니다.

 

 - 정규화는 데이터 베이스 테이블을 구조화하고 테이블간의 관계를 조직화하여 데이터 중복을 최소화하고 데이터 무결성을 유지합니다.

 

 

** 정규화의 목표 ** 

 

1) 중복 제거 : 동일한 데이터를 여러 번 저장하는 중복을 제거하여 데이터베이스의 일관성을 유지합니다.

 

2) 데이터 무결성 보장 : 데이터베이스에 저장되는 데이터는 일관되고 정확해야 합니다. 정규화는 데이터 무결성을 보장하는 중요한 도구입니다.

 

3) 유연성 향상 : 데이터베이스가 수정 또는 업데이트 될 때 데이터 일관성을 유지하면서도 효율적으로 처리할 수 있는 구조를 제공합니다.

 

4) 검색 및 질의 향상 : 정규화된 데이터 모델을 효율적인 데이터 검색과 질의를 가능하게 합니다.

 

1차 정규화 : 모든 속성(열)은 원자적이어야 하며, 각 셀은 단일 값을 가져야 합니다. 이것은 중복을 제거하고 데이터 일관성을 유지하는 데 첫 번째 단계입니다.

* 원자적 == 단일 값, 각 셀은 하나의 값을 가져야 한다.

2차 정규화 : 1차 정규화를 통해 중복이 제거된 후, 부분 종속성을 제거하고 데이터베이스 테이블을 분해합니다. 이렇게 하면 데이터 중복을 줄이고 데이터 무결성을 향상 시킵니다.

3차 정규화 : 2차 정규화를 통해 얻은 테이블에서 이행적 종속성을 제거하고 데이터베이스 테이블을 더 분해합니다.

 

 

 

 

1차 정규화

 

 

-> 위의 사진의 테이블을 보면 주문목록에서 여러제품이 쉼표로 구분되어 저장되어 있습니다. 이는 1차 정규화에 위배되며, 데이터의 중복과 무경성에 문제를 발생합니다.

 

1차 정규화를 적용하여 주문목록을 별도의 테이블로 분리합니다.

 

-> 이로써, 각 테이블의 속성은 원자적이 되었으며 데이터의 중복을 제거하고 무결성을 향상시켰습니다.

 

 

 

 

2차 정규화

 

- 기본키가 2개 이상일 때,  "부분 함수 종속성 제거"

PK(Primary Key)가 2개 이상일 때,종속되는 관계가 있다면 분리한다.

 

 

-> 관서정보는 기본키인 관서번호에만 종속되어 있기때문에 따로 테이블을 분리해주는게 2차 정규화이다.

 

 

함수종속성(FD)

데이터들이 어떠한 기준에 의해서 종속되는 것을 의미.

 

- 완전 함수적 종속

기본키에 대해서 그 속성이 완전히 종속될 때

 

- 부분 함수적 종속

기본키 전체가 아니라, 일부에 대해 종속될 때

 

 

 

 

3차 정규화

 

- 기본 키에 의존하지 않고, 일반 컬럼에 의존하는 컬럼이 있다면 이를 제거한다.

 

- 즉, 이행 함수 종속성을 제거한다.

 

 

 

 

반정규화

 

- 데이터베이스의 성능 향상을 위하여, 데이터 중복을 허용하고 조인을 줄이는 데이터베이스 성능 향상 방법이다.

 

- 반정규화는 조회(select) 속도를 향상시키지만, 데이터 모델의 유연성은 낮아진다.

 

 

** 반정규화를 수행하는 이유 **

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

 

 

 

반정규화 절차

 

 

 

 

 

** 반정규화의 대상에 대해 다른 방법으로 처리 ** 

 

 

- 지나치게 많은 JOIN이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우 뷰(VIEW)를 사용하면 이를 해결할 수 있다.

 

- 대량의 데이터처리나 부분처리에 의해 성능이 저하되는 경우에 클러스터링을 적용하거나 인덱스를 조정함으로써 성능을 향상시킬 수 있다.

 

- 대량의 데이터는 Primary Key의 성격에 따라 부분적인 테이블로 분리할 수 있다. 즉 파티셔닝 기법(Partitioning)이 적용되어 성능저하를 방지할 수 있다.

 

- 응용 애플리케이션에서 로직을 구사하는 방법을 변경함으로써 성능을 향상시킬 수 있다.

 

 

 

 

 

 

 

반정규화 기법

 

 

* 테이블 반정규화 *

 

 

** 칼럼수가 많은 테이블 **


- 한 테이블에 많은 칼럼들이 존재할 경우 데이터가 물리적으로 저장되는 디스크 상에 넓게 분포할 가능성이 커지게 되어 디스크 I/O가 대량으로 발생할 수 있고, 이로 인해 성능이 저하될 수 있음.

 따라서 트랜잭션이 접근하는 칼럼유형을 분석해서 자주 접근하는 칼럼들과 상대적으로 접근 빈도가 낮은 칼럼들을 구분하여 1:1로 테이블을 분리하면 디스크 I/O가 줄어들어 성능을 향상시킬 수 있다.

 

 

 

 

 

* 칼럼 반정규화 *

 

 

 

 

 

* 관계 반정규화 *