-
(SQLD) 데이터 모델과 성능 1카테고리 없음 2023. 2. 23. 14:14
성능 데이터모델링: 데이터베이스 성능향상을 목적으로 설계단계의 데이터 모델링 때부터 정규화, 반정규화, 테이블통합, 테이블분할, 조인구조, PK, FK 등 여러 가지 성능과 관련된 사항이 데이터모델링에 반영될 수 있도록 하는 것.
성능 데이터 모델링 수행시점: 성능 향상을 위한 비용은 프로젝트 수행 중에 있어서 사전에 할수록 비용이 들지 않는다. 특히 분석/설계 단계에서 데이터 모델에 성능을 고려한 데이터 모델링을 수행할 경우 성능저하에 따른 재업무(Rework) 비용을 최소화 할 수 있는 기회를 가지게 된다. 특히 데이터의 증가가 빠를수록 성능저하에 따른 성능개선비용은 기하급수적으로 증가하게 된다.
성능 데이터 모델링 고려사항
1) 데이터 모델링을 할 때 정규화를 정확하게 수행한다.
2) 데이터베이스 용량산정을 수행한다.
3) 데이터베이스에 발생되는 트랜잭션의 유형을 파악한다.
4) 용량과 트랜잭션의 유형에 따라 반정규화를 수행한다.
5) 이력모델의 조정, PK/FK조정, 슈퍼타입/서브타입 조정 등을 수행한다.
6) 성능관점에서 데이터 모델을 검증한다.
정규화(Normalization):
- 정규화는 데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 위한 방법이며 데이터를 분해하는 과정이다.
- 정규화는 데이터 중복을 제거하고 데이터 모델의 독립성을 확보하기 위한 방법이다
- 정규화를 수행하면 비즈니스에 변화가 발생하여도 데이터 모델의 변경을 최소화할 수 있다.
- 정규화는 제1정규화부터 제5정규화까지 있지만, 실질적으로는 제3정규화까지만 수행한다.
좌측의 테이블은 정규화를 수행하지 않은 것으로, 부서 테이블과 직원 테이블을 하나로 합쳐 둔 것이다. 만약 좌측의 테이블에서 새로운 직원이 추가되는 경우 부서 정보가 없으면 부서코드를 임의의 값으로 넣어야 한다. 즉, 불필요한 정보가 같이 추가되는 것이다. 또한 새로운 "총무부"가 추가되어야 할 경우 사원 정보가 없기 때문에 임의의 값으로 사원 번호를 입력하거나 추가할 수 없게 된다. 이러한 문제를 이상현상(Anomaly)이라고 한다.
제1정규화의 목표: 테이블의 컬럼이 원자값(Atomic Value)을 갖도록 테이블을 분해하는 것
1) 정규화
- 앞 슬라이드와 나왔던 이상현상 같은 문제를 해결하기 위해서는 테이블을 분해해야 한다.
- 정규화된 모델은 테이블이 분해된다. 테이블이 분해되면 직원 테이블과 부서 테이블 간에 부서코드로 조인(Join)을 수행하여 하나의 합집합으로 만들 수도 있다.
- 정규화를 수행하면 불필요한 데이터를 입력하지 않아도 되기 때문에 중복 데이터가 제거된다.
정규화 절차
1) 제1정규화
- 속성(Attribute)의 원장성을 확보한다.
- 기본키(Primary)를 설정한다.
2) 제2정규화: 기본키가 2개 이상의 속성으로 이루어진 경우, 부분 함수 종속성을 제거(분해)한다.
3) 제3정규화
- 기본키를 제외한 칼럼 간에 종속성을 제거한다.
- 즉, 이행 함수 종속성을 제거한다.
4) BCNF: 기본키를 제외하고 후보키가 있는 경우, 후보키가 기본키를 종속시키면 분해한다.
5) 제4정규화: 여러 칼럼들이 하나의 칼럼을 종속시키는 경우 분해하여 다중값 종속성을 제거한다.
6) 제5정규화: 조인에 의해서 종속성이 발생되는 경우 분해한다.
함수의 종속성(Functional Dependency)
-제1정규화
: 정규화는 함수적 종속성을 근거로 한다. 함수적 종속성이란 X->Y이면 Y는 X에 함수적으로 종속된다고 말한다.
함수적 종속성은 X가 변화하면 Y도 변화하는지 확인한다. 예를 들어 회원ID가 변화하면 이름도 변경될 것이다. 이런 경우는 회원ID가 기본키가 되고, 회원ID가 이름을 함수적으로 종속한다고 한다.
위의 예를 보면 계좌 테이블 X가 Y의 칼럼들을 함수적으로 종속하고 있다.
위의 예에서 X는 계좌번호 하나만으로는 유일성을 만족하지 못한다고 가정한 것이다. 그래서 계좌번호와 회원ID를 기본키로 잡은 것이다.
이처럼 기본키를 잡는 것과 원자성을 가지는 것이 바로 제1정규화이다.
-제2정규화
: 부분 함수 종속성이란, 기본키가 2개 이상의 칼럼으로 이루어진 경우에만 발생한다.
기본키가 하나의 칼럼으로 이루어지면 제2정규화는 생략한다.
위의 예는 기본키가 2개이기 때문에 제2정규화 대상이다.
위의 예를 보면 기본키에 있는 회원 ID가 변경되면 이름이 변경된다. 회원 ID가 이름을 함수적으로 종속하고 있는 것이다.
바로 이러한 경우를 부분 함수 종속성이라고 한다. 부분 함수 종속성이 발생하면 분해를 해야 한다.
-제3정규화
: 제3정규화는 이행 함수 종속성을 제거한다. 이행 함수 종속성이란, 기본키를 제외하고 칼럼 간에 종속성이 발생하는 것이다.
제3정규화는 제1정규화와 제2정규화를 수행한 다음에 해야 한다.
위처럼 관리점이 관리점 코드에 종속되는 것을 이행 함수 종속성이라 한다.
제3정규화를 수행하면 위처럼 관리점 테이블이 도출되고 관리점 코드가 기본키가 된다.
-BCNF(Boyce-Codd Normal Form)
: BCNF는 복수의 후보키가 있고, 후보키들이 복합 속성이어야 하며, 서로 중첩 되어야 한다.
위의 예처럼 기본키(학번, 과목번호)가 교수를 함수적으로 종속하고 있다.
이 때 교수가 후보키(최소성과 유일성을 만족)이고 교수가 과목 번호를 함수적으로 종속하는 경우 분해가 일어난다.
즉, 위와 같은 경우 교수 테이블을 새롭게 만들고 기본키는 교수로 하고 칼럼은 과목번호가 된다.
이러한 작업을 BCNF라고 한다.