티스토리 뷰
정규화는 데이터의 정확성과 일관성을 유지하기 위해 엔티티를 작은 단위로 분리하는 과정이다.
정규화를 하면 데이터 조회성능은 향상되는 경우도 있고 저하되는 경우도 있다. 그러나 정규화를 하면 입력, 수정, 삭제 성능은 일반적으로 향상된다.
| 정규화 | |
| 제 1 정규형 | 모든 속성은 반드시 하나의 값을 가져야 한다 |
| 제 2 정규형 | 엔티티의 모든 일반속성은 반드시 모든 주식별자에 종속되어야 한다 |
| 제 3 정규형 | 주 식별자가 아닌 모든 속성 간에는 서로 종속될 수 없다. |
반정규화
데이터의 조회 성능을 향상시키기 위해 데이터의 중복을 허용하거나 데이터를 그룹핑하는 과정이다.
조회성능은 향상될 수 있으나 입력, 수정, 삭제 성능은 저하될수 있다.
순서상 정규화가 끝난 후 반정규화를 한다
| 테이블 반정규화 | ||
| 테이블 병합 | 1:1 관계 테이블 병합 | JOIN 이 필요한 경우가 많아서 테이블을 통합하는 것이 성능 측면에서 유리할 경우 실시한다. |
| 1:M 관계 테이블 병합 | ||
| 슈퍼 서브 타입 테이블 병합 | ||
| 테이블 분할 | 테이블 수직 분할 | 엔티티의 일부 속성을 별도의 엔티티로 분할하는것이다. |
| 테이블 수평 분할 | 엔티티의 인스턴스를 특정 기준으로 별도의 엔티티로 분할(파티셔닝)한다 | |
| 테이블 추가 | 중복 테이블 추가 | 테이블의 중복이 발생하더라도 성능상의 이점이 큰 경우 고려한다. |
| 통계 테이블 추가 | 테이블에 관련 통계치를 미리 계산하여 저장하는 방식이다. | |
| 이력 테이블 추가 | 과거의 데이터를 따로 관리하려고 할때 사용하는 방식 | |
| 부분 테이블 추가 | 특정 데이터만 필요한 경우가 많은 경우 사용 |
| 컬럼 반정규화 | |
| 중복 컬럼 추가 | JOIN 이 많이 필요한 경우 컬럼을 추가하는것이 성능 측면에서 유리할때 사용한다. |
| 파생 컬럼 추가 | 프로세스 수생시 부하가 염려되는 계산값을 미리 컬럼으로 추가하여 보관하는 방식 |
| 이력 테이블 컬럼 추가 | 최신 데이터 여부등 이력을 미리 추가해 놓는 방식 |
관계 반정규화(중복 관계 추가)
업무 프로세스상 JOIN 이 필요한 경우가 많아 중복 관계를 추가하는 것이 성능 측면에서 유리할 경우 고려
'데이터' 카테고리의 다른 글
| SQL 기본 함수 설명2 (0) | 2025.03.04 |
|---|---|
| SQL 기본 함수 설명1 (0) | 2025.03.03 |
| 트랜잭션과 NULL (0) | 2025.03.03 |
| 데이터 모델링 (0) | 2025.03.02 |
| 데이터와 정보, 데이터베이스에 대한 기본적인 정리 (0) | 2025.02.10 |
