SQLD 1과목 데이터 모델과 SQL
<목차> |
1. 정규화
A. 정규화의 개념
- 데이터의 일관성, 최소한의 중복, 최대한의 데이터 유연성을 위한 방법
- 데이터를 분해하는 과정
- 정해진 규칙을 따라 데이터를 이용하기 쉽게 만드는 일
- 데이터의 중복 제거
- 데이터 모델의 독립성 확보
- 데이터 이상현상 (Anomaly)을 줄이기 위한 설계 기법
- 엔터티를 상세화하는 과정이며 논리 데이터 모델링 수행시점에서 고려
* 이상현상
삽입이상: 행(Row) 삽입 시 지정되지 않은 속성 값이 Null을 가지는 경우
갱신이상: 데이터 갱신 시 일부분의 데이터만 갱신되어 일관성 유지가 안 되는 경우
삭제이상: 행(Row) 삭제 시 원하지 않는 연쇄 삭제가 발생하는 현상
B. 정규화의 단계
1) 제1정규화: 테이블 내 속성의 원자성을 확보하는 단계. 기본키를 설정
※ 원자성: 어떤 것이 더 이상 쪼개질 수 없는 성질.
고객번호 | 이름 | 구매상품 |
1 | 뽀로로 | 과자, 모자 |
2 | 마리오 | 카트 |
3 | 타요 | 타이어, 페인트, 엔진오일 |
▼
고객번호 | 이름 | 구매상품 |
1 | 뽀로로 | 과자 |
1 | 뽀로로 | 모자 |
2 | 마리오 | 카트 |
3 | 타요 | 타이어 |
3 | 타요 | 페인트 |
3 | 타요 | 엔진오일 |
2) 제2정규화: 기본키가 2개 이상의 속성으로 이루어진 경우 부분함수 종속성을 제거
(기본키는 분리하여 테이블 분리 생성)
고객번호 | 월 | 이름 | 월별 구매금액 |
1 | 11월 | 뽀로로 | 300원 |
2 | 11월 | 마리오 | 500원 |
3 | 11월 | 타요 | 1,000원 |
1 | 12월 | 뽀로로 | 600원 |
2 | 12월 | 마리오 | 400원 |
▼
고객번호 | 이름 |
1 | 뽀로로 |
2 | 마리오 |
3 | 타요 |
고객번호 | 월 | 월별 구매금액 |
1 | 11월 | 300원 |
2 | 11월 | 500원 |
3 | 11월 | 1,000원 |
1 | 12월 | 600원 |
2 | 12월 | 400원 |
3) 제3정규화: 기본키를 제외한 칼럼 간 종속성을 제거. 이행함수 종속성 제거
고객번호 | 이름 | 고객등급 |
1 | 뽀로로 | 골드 |
2 | 마리오 | 실버 |
3 | 타요 | 다이아몬드 |
▼
고객번호 | 이름 |
1 | 뽀로로 |
2 | 마리오 |
3 | 타요 |
이름 | 고객등급 |
뽀로로 | 골드 |
마리오 | 실버 |
타요 | 다이아몬드 |
4) BCNF(Boyce-Codd Normal Form): 기본키를 제외하고 후보키가 있는 경우, 후보키가 기본키를 종속시키면 분해.
결정자 함수 종속성을 제거하는 단계. 강한 제3정규화.
5) 제4정규화: 여러 칼럼들이 하나의 칼럼을 종속시키는 경우 분해하여 다중 값 종속성을 제거
6) 제5정규화: 조인에 의한 종속성이 발생되는 경우 분해
C. 정규화 주의사항
- 모든 정규화는 이전 정규화를 만족해야 함
- 정규화 시 이상현상은 제거 되지만 테이블의 분해로 데이터 조인의 발생이 많아지고, 이는 조회 성능 저하로 이어질 수 있음. (I/O 증가 및 조인 연산 증가)
- 단일 테이블 조회 시엔 데이터 중복이 제거되어 조회 성능이 향상 될 여지가 있음.
D. 함수적 종속성(Functional Dependency)에 근거한 정규화 수행 필요
함수의 종속성(FD)은 데이터들이 어떤 기준값에 의해 종속되는 현상을 지칭. 이 때 기준값을 결정자(Determinant)라 하고 종속되는 값을 종속자(Dependent)라고 함.
- 함수의 종속성은 데이터가 가지고 있는 근본적인 속성으로 인식
- 정규화의 궁극적인 목적은 반복적인 데이터를 분리하고 각 데이터가 종속된 테이블에 적절하게 배치되도록 하는 것이므로 이 함수의 종속성을 이용하여 정규화 작업이나 각 오브젝트에 속성을 배치하는 작업에 이용이 되는 것.
E. 예제 및 해설 (출처: SQL 자격검정 실전문제)
정답 및 해설) ③
함수종속성의 규칙에 따라 관서번호가 PK인 엔터티가 2차 정규화로 분리되어야 함.
(부분키 종속을 정규화 하여 두 개의 테이블로 분리해 2차 정규화)
* 제2정규화: 기본키가 2개 이상의 속성으로 이루어진 경우 부분함수 종속성을 제거
(기본키는 분리하여 테이블 분리 생성)
왼쪽 그림은 2차 정규화가 안 된 반정규화된 테이블의 모습이고 오른쪽 그림은 부분키 종속을 정규화하여 두 개의 테이블로 분리해 2차 정규화된 테이블의 모습이다.
2차 정규화가 안 된 테이블은 직급명과 함께 반정규화된 관서번호, 관서명을 조회하면 하나의 테이블에서 데이터가 조회가 된다. 2차 정규화된 테이블은 관서번호, 관서명이 관서테이블에만 존재하기 때문에 두 개의 테이블을 조인하여 처리해야 한다.
정답 및 해설) ③
매각기일은 일자별로 매각이 시행되는 장소와 시간을 의미하는 것으로, 일자별매각물건 엔터티의 매각시간, 매각장소 속성은 두 개의 주식별자 속성 중 매각일자에만 종속되기 때문에 2차 정규화 대상이 됨.
그러므로 매각일자를 주식별자로 하고 매각시간과 매각장소 속성을 포함하는 매각기일 엔터티를 독립시킴.
이때 매각기일 엔터티는 일자별매각물건의 주식별자 중 일부로부터 독립했기 때문에 매각기일과 일자별매각물건을 1:M 관계로 연결.
이와 같은 2차 정규화를 통해 특정 장소에서 이루어진 매각내역을 조회하고자 할 때 100만건의 일자별 매각내역 데이터를 모두 읽어 원하는 장소에 해당하는 인스턴스들을 찾아 매각일자별로 그룹핑한 후 매각일자별매각내역과 조인할 필요가 없이 매우 적은 수의 매각기일 엔터티에서 특정 장소에 해당하는 매각일자들을 찾아 매각일자별매각내역과 1:1로 바로 조인하면 되기 때문에 I/O를 현저하게 감소시킬 수 있어 성능 향상 효과를 얻을 수 있음.
> 매각일자 - 결정자 / 매각시간과 매각장소가 의존자가 되는 함수적 종속관계가 형성되는 관계
> 대량의 데이터에서 조인 조건이 되는 대상을 찾기 위해 인라인뷰를 사용하기 때문에 성능저하.
* 인라인뷰: FROM 절에 서브쿼리를 제시하는 것
> 정규화하려면 복합식별자 중에서 일반속성이 주식별자 속성 중 일부에만 종속관계를 가지고 있으므로 2차 정규화 대상이 됨.
> 2차 정규화를 적용하여 매각일자를 PK로 하고 매각시간과 매각장소는 일반속성이 됨. 정규화를 적용했기 때문에 매각일자를 PK로 사용하는 매각일자별 매각내역과도 관계 연결.
이전글
다음글
'자격증 > SQLD' 카테고리의 다른 글
데이터 모델과 SQL - 모델이 표현하는 트랜잭션의 이해 (1) | 2024.01.02 |
---|---|
데이터 모델과 SQL - 관계와 조인의 이해 (1) | 2024.01.01 |
데이터 모델링의 이해 - 식별자 (1) | 2023.12.27 |
데이터 모델링의 이해 - 관계 (0) | 2023.12.27 |
데이터 모델링의 이해 - 속성 (0) | 2023.12.27 |