TOP
class="layout-aside-left paging-number">
본문 바로가기
자격증/SQLD

데이터 모델과 SQL - 정규화

by 기록자_Recordian 2023. 12. 30.
728x90
반응형

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 자격검정 실전문제)

노랭이 23p 35번 문제

 

정답 및 해설) ③

함수종속성의 규칙에 따라 관서번호가 PK인 엔터티가 2차 정규화로 분리되어야 함.

(부분키 종속을 정규화 하여 두 개의 테이블로 분리해 2차 정규화)

* 제2정규화: 기본키가 2개 이상의 속성으로 이루어진 경우 부분함수 종속성을 제거

(기본키는 분리하여 테이블 분리 생성)

 

왼쪽 그림은 2차 정규화가 안 된 반정규화된 테이블의 모습이고 오른쪽 그림은 부분키 종속을 정규화하여 두 개의 테이블로 분리해 2차 정규화된 테이블의 모습이다.

2차 정규화가 안 된 테이블은 직급명과 함께 반정규화된 관서번호, 관서명을 조회하면 하나의 테이블에서 데이터가 조회가 된다. 2차 정규화된 테이블은 관서번호, 관서명이 관서테이블에만 존재하기 때문에 두 개의 테이블을 조인하여 처리해야 한다.

 

 

정답 및 해설)  ③

매각기일은 일자별로 매각이 시행되는 장소와 시간을 의미하는 것으로, 일자별매각물건 엔터티의 매각시간, 매각장소 속성은 두 개의 주식별자 속성 중 매각일자에만 종속되기 때문에 2차 정규화 대상이 됨.

그러므로 매각일자를 주식별자로 하고 매각시간과 매각장소 속성을 포함하는 매각기일 엔터티를 독립시킴.

이때 매각기일 엔터티는 일자별매각물건의 주식별자 중 일부로부터 독립했기 때문에 매각기일과 일자별매각물건을 1:M 관계로 연결.

이와 같은 2차 정규화를 통해 특정 장소에서 이루어진 매각내역을 조회하고자 할 때 100만건의 일자별 매각내역 데이터를 모두 읽어 원하는 장소에 해당하는 인스턴스들을 찾아 매각일자별로 그룹핑한 후 매각일자별매각내역과 조인할 필요가 없이 매우 적은 수의 매각기일 엔터티에서 특정 장소에 해당하는 매각일자들을 찾아 매각일자별매각내역과 1:1로 바로 조인하면 되기 때문에 I/O를 현저하게 감소시킬 수 있어 성능 향상 효과를 얻을 수 있음.

 

 

> 매각일자 - 결정자 / 매각시간과 매각장소가 의존자가 되는 함수적 종속관계가 형성되는 관계

> 대량의 데이터에서 조인 조건이 되는 대상을 찾기 위해 인라인뷰를 사용하기 때문에 성능저하.

* 인라인뷰: FROM 절에 서브쿼리를 제시하는 것

> 정규화하려면 복합식별자 중에서 일반속성이 주식별자 속성 중 일부에만 종속관계를 가지고 있으므로 2차 정규화 대상이 됨.

> 2차 정규화를 적용하여 매각일자를 PK로 하고 매각시간과 매각장소는 일반속성이 됨. 정규화를 적용했기 때문에 매각일자를 PK로 사용하는 매각일자별 매각내역과도 관계 연결.


이전글

데이터 모델링의 이해 - 식별자

 

다음글

관계와 조인의 이해

728x90
반응형