DB 성능향상을 목적으로 설계단계의 데이터 모델링 때부터 정규화, 반정규화, 테이블통합, 테이블분할, 조인구조, PK, FK 등 여러 가지 성능과 관련된 사항이 데이터 모델링에 반영될 수 있도록 하는 것이다.
데이터모델은 성능을 튜닝하면서 변경 될 수 있는 특징이 있다.
데이터의 증가가 빠를수록, 성능저하에 따른 성능개선비용은 증가한다.
분석/설계 단계에서 고려한 데이터 모델링을 수행할 경우 성능 저하에 따른 Rework 비용을 최소화 할 수 있는 기회를 갖게 된다.
정규화는 데이터의 일관성, 최소한의 데이터 중복, 최소한의 데이터 유연성을 위한 방법이며 데이터를 분해하는 과정.
정규화된 모델은 테이블이 분해되고, 테이블이 분해되면 직원 테이블과 부서 테이블 간에 부서코드로 조인(join)을 수행하며 하나의 합집합으로 만들 수 있다.
정규화를 하면 불필요한 데이터를 입력하지 않아도 되기 때문에 중복 데이터가 제거된다.
모델의 독립성을 향상시킨다.
테이블의 수가 증가한다.
테이블의 수가 증가한다.
업무가 변경되도 모델의 유연성을 향상 시킨다.
찾아야할 데이터가 적어 쿼리가 더 빨라진다.
제 1 정규화 | 제 2 정규화 | 제 3 정규화 | BCNF | 제 4 정규화 | 제 5 정규화 |
- 속성 원자성 확보(모든 도메인이 원자값) - 기본키를 설정 |
- 기본키가 속성 2개 이상 - 부분 함수 종속성 제거 |
- 기본키 외 칼럼 간 종속성 제거 - 이행 함수 종속성 제거 |
후보키가 기본키를 종속시키면 분해함 |
- 하나의 칼람을 종속시키는 경우 분해하여 다중값 종속성 제거(다치종속 제거) | 조인에 의해서 종속성 발생하면 분해함 |
❓ 함수적 종속성: 데이터들이 어떤 기준 값에 의해 항상 종속되는 현상
테이블의 중복을 제거한다 , 분리된 테이블을 만든다 , 분리된 테이블은 기본키로 식별한다.
즉 릴레이션의 모두 도메인이 원자값으로 구성된다.
부분함수 종속성을 제거한다 그러나, 제1정규화 결과 기본키가 하나라면 생략한다.
❗ 사원 이름은 직책에 대해 전이 함수 종속 이다 .
어떤 릴레이션이 2NF이고, 기본키에 속하지 않는 모든 속성이 기본키에 전이함수종속이 아니면 제 3정규형에 속한다.
❓ 전이함수종속(Transitive FD ; 이행함수종속)
릴레이션의 모든 결정자가 후보키이면 그 릴레이션은 BCNF 정규형에 속한다.
릴레이션에서 함수종속이 아닌 다치종속(MVD)을 제거한 경우이다.
-> 즉, BCNF에 속하고, 모든 다치종속이 함수종속이면 4NF에속한다.
릴레이션에서 후보키를 통하지 않은 조인종속(JD)을 제거한 경우이다.
-> 즉, 4NF이고, 모든 조인종속이 릴레이션의 후보키에 의해서만 성립된다.
정규화의 문제점: 조인 & 성능저하 유발 | 정규화의 문제 해결 방법 | 반정규화의 문제점 |
- 데이터 조회 시 조인(Join)을 유발함 - CPU, 메모리를 많이 사용함 - 정규화는 조인을, 조인은 부하를 유발함 - (ex) "직원"과 "부서"테이블에서 "부서코드"가 같은 행을 찾는 경우 - 중첩된 루프 = 이중 for문을 사용해야 함 - 데이터양 증가하면, 비교 건수도 증가함 |
- 인덱스, 옵티마이저를 통해 비효율 해결 - 조인에 의한 성능 저하를 해결하기 위해 반정규화를 하여, 하나의 테이블에 저장 - 반정규화: 데이터 중복을 허용 - 칼럼이 계속 증가하여, 조인이 최소화됨 - 조인 감소하면, 조회 빠르게 할 수 있음 |
- 반정규화는 데이터를 중복시키므로 또 다른 문제점을 발생시킴 - 너무 많은 칼럼이 추가되면, 1개 행의 크기가 너무 커짐 - DB 관리시스템의 입출력 단위인 블록 크기(Block Size) 를 초과함 - 1개 행을 읽기위해 여러 블록을 읽어야 함 → 디스크 입출력 증가 → 성능 저하 유발 |