1. 정규화를 통한 성능 향상 전략
1) 정규화란 '결정자' 에 의해 함수적 종속을 가지고 있는 일반 속성을 '의존자' 로 하여,
입력 / 수정 / 삭제 이상 현상을 제거 하는 것을 뜻함.
2) 데이터 중복을 제거 하고, '결정자' 에 의해 동일한 의미의 일반 속성이,
하나의 테이블로 합쳐지므로, 하나의 테이블의 데이터 용량이 최소화 됌.
3) 정규화된 테이블은 데이터 처리 시, 속도가 향상 될 수도 있고, 저하 될 수도 있는 특징.
[ 정리 ]
1) 정규화된 데이터 모델은 조회 시, 처리 조건에 따라 성능이 향상 또는 저하 됌.
2) 정규화된 데이터 모델은 입력 / 수정 / 삭제 시, 무조건 성능이 향상 됌.
2. 정규화 용어
1) 정규화 (Normalization)
함수적 종속성 (Functional Dependency == FD) 등과 같은 이론에 근거 해서,
관계형 데이터베이스 테이블의 삽입 / 삭제 / 갱신 이상 현상 발생을 최소화 하기 위해,
좀 더 작은 단위의 테이블로 설계 하는 과정을 말함.
2) 정규형 (Normal Form == NF)
정규화 규정.
정규화 결과에 의해 나온 데이터 모델이 갖춰야 할 특성.
3) 함수적 종속성 (Functional Dependependy == FD)
테이블의 A 칼럼 값을 알면, 다른 B 칼럼 값을 알 수 있는 경우,
칼럼 B는 칼럼 A에 종속성이 있다고 말함.
(고객 이름은 고객 주민 등록 번호에 함수적 종속성이 있다)
4) 결정자 (Determinant)
함수적 종속성 설명 에서, A 칼럼을 결정자 라고 함.
(주민 등록 번호 == 결정자)
5) 다치 종속 (MultiValued Dependency == MVD)
결정자 A 칼럼에 의해, B 칼럼의 값을 여러개 알 수 있으면,
B 칼럼은 A칼럼에 다치 종속 되었다고 함.
(학번을 알면, 학번에 해당 하는 특정 학생의 수강 과목을 여러개 알 수 있음)
3. 정규화 효과 및 장점
1) 상호 종속성이 강한 데이터들을 분리.
독립된 개념 (엔티티 == 테이블) 으로 정의.
높은 응집도 / 낮은 결합도 원칙에 의거.
유연성 극대화.
2) 개념의 세분화로 개념 재활용 가능성 향상.
3) Non-key (일반 속성 == PK가 아닌 일반 속성) 데이터 요소가 한번 만 표현되므로, 중복이 최소화 됌.
(고객 테이블에 고객명 이라는 속성은 고객 테이블에만 존재 하므로, 중복이 최소화 됌)
4. 정규화 이론
1) 1차 정규화
함수 종속 / 복수의 속성 값을 갖는 속성 분리 / 속성의 원자성 확보
즉, 모든 속성은 원자성을 갖고, 다중 값을 가질 수 있는 속성은 분리.
2) 2차 정규화
함수 종속 / PK에 완전 종속적이지 않는 속성 분리 / 부분 종속 속성을 분리
즉, 1 정규형을 만족 하는 상태 에서, 모든 Non-key 칼럼은 기본 키 전체에 종속 되어야 함.
하나의 테이블에 PK가 2개인데, 고객 아이디 PK 로는 고객명과 고객 등급 일반 속성들만 해당 되지만,
주문 순번 PK 는 주문 일자 일반 속성과 관련이 있음.
그니까, 하나의 PK에 모든 속성이 해당 되는 상황이 아님.
그래서 이런 경우는 PK에 해당되는 일반 속성끼리 나눠서, 테이블을 분리 해야 한다.
3) 3차 정규화
함수 종속 / 일반 속성에 종속적인 속성의 분리 / 이전 종속 속성을 분리
즉, 2 정규형을 만족 하는 상태에서, 일반 속성 들도 종속 관계가 존재 하지 않아야 함.
직업명은 직업 코드에 종속 되어 있음.
근데, 직업 코드는 식별자가 아님.
즉, 일반 속성 끼리 함수 종속이 발생 하니까, 쪼개야 함.
5. 정규화와 성능
1) 정규화 이후, 조인을 수행 할 때, 효율적인 인덱스 사용을 통해 조인을 하면 거의 성능 저하는 없다.
2) 정규화를 수행 해서 작은 집합의 테이블이 만들어지면, 작은 테이블을 먼저 읽고, 큰 테이블을 나중에 읽는 방식으로,
조인을 하면 성능상 유리 할 수 있다.
3) 정규화가 제대로 안되면, 동일한 종류의 속성이 여러 개 생길 수 있기 때문에, 많은 인덱스가 생길 수 있음.
정규화를 하면 하나의 인덱스만 만들면 되게 된다.
'SQLD > 데이터 모델과 성능' 카테고리의 다른 글
분산 데이터베이스와 성능 (0) | 2023.11.13 |
---|---|
데이터베이스 구조와 성능 (1) | 2023.11.12 |
대량 데이터에 따른 성능 (1) | 2023.11.12 |
반정규화와 성능 (0) | 2023.11.10 |
성능 데이터 모델링의 개요 (0) | 2023.11.10 |