1. 정규화
1)개요
- 정규화는 6단계 정규화과정이 있으나 일반적으로 3차 정규화까지를 많이 수행
- "개념적 데이터베이스 모델링"단계에서 발견하지 못한 반복되는 속성을 가진 Entity(테이블)를 분리하는 작업
2)개념정의
- 중복 속성에 대한 분리 (row단위, column단위)
- 데이터의 중복을 제거하고 테이블의 정체성을 명확히 하는 것
- 데이터의 정규화가 잘 되어있으면 입력/수정/삭제의 성능 향상, 반정규화를 많이 하면 조회 성능 향상
① 1차 정규화
정규화대상 : 같은 성격과 내용의 컬럼이 연속적으로 나타나는 컬럼
정규화방법 : 반복되는 칼럼을 제거하고 기본테이블의 PK를 추가해 새로운 테이블을 생성하여, 기존 테이블과 1:N 관계 형성
<1차 정규화 예제>
② 2차 정규화
2차 정규화 대상테이블은 "동사" 명칭의 "교차테이블"역할을 하여 복합키가 있을 가능성이 높다.
"명사"형 테이블은 단일키일 가능성이 높다.
정규화대상 : 테이블의 PK가 복합키(2개이상의 PK)일 때, 복합키 전체에 의존하지 않고, 일부의 복합키에만 종속되는 속성(칼럼)들이 존재할 경우
정규화방법 : 복합키에 의존적이지 않은 속성(복합키 중에 1개 키에만 의존적)을 분리
<2차 정규화 예제>
③ 3차 정규화
정규화대상 : PK에 의존하지 않고 일반컬럼에 의존하는 컬럼(이전적 함수 종속 관계)
정규화해결 : 일반컬럼에 종속적인 속성들을 분리시켜 부모 테이블 생성
2. 반정규화
1)정의
- 정규화된 엔터티, 속성, 관계에 대해 시스템의 성능향상과 개발과 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터모델링 기법
2)사용사례
- 조인으로인한 성능저하가 예상될 때
3)개념
① 테이블 반정규화 : 테이블 병합,분할,추가
② 칼럼 반정규화 : 중복칼럼 추가, 파생칼럼 추가, 이력테이블칼럼 추가, PK에 의한 칼럼 추가,응용시스템 오작동 위한 칼럼 추가
③ 관계 반정규화 : 중복관계추가
<반정규화 예제>
서버A에 부서와 접수 테이블이있고 서버B에 연계라는 테이블이 있을때, 서버B에서 데이터 조회 시, 부서번호가 서버A에 존재하기에 연계,접수,부서 테이블에 모두 조인이 걸린다.
게다가 분산데이터베이스환경이므로 다른 서버간에도 조인이 걸려 성능이 저하된다.
서버A의 부서테이블의 부서명을 서버B의 연계테이블에 부서명으로 속성 반정규화하여 조회 성능 향상
'DB > 1' 카테고리의 다른 글
[MySQL] MySQL 정리 (0) | 2022.03.18 |
---|---|
[h2] h2 database 설치 설정 (0) | 2022.02.11 |
SQL 정리 (0) | 2022.02.08 |
[MySQL] 랭킹 순서 매기기 RANK, GROUP BY, ORDER BY (0) | 2020.06.01 |
개념적 데이터베이스 모델링 연습 (3) | 2020.03.10 |