IT 공부/데이터분석

[SQL] 1차 2차 3차 정규화 개념 및 사례 정리

듀_77 2022. 5. 16. 13:58
반응형

 

현재 SQLD 자격증을 공부 중이다.

이론부터 시작해서 실습으로 넘어갈 생각!!

 

정규화 

목적 

1. 데이터 중복을 최소화한다.

같은 속성을 지닌 데이터가 테이블에 중복해서 나타나는 경우가 생깁니다.

이 경우, 아래와 같은 문제점이 생깁니다.

정규화는 이에 대한 해결방안이구요.

 

문제점

→ 자료가 분산되어서, 자료 처리가 일관적이지 않게 됨.

→ 비효율적인 데이터 

→ 데이터의 저장 공간이 낭비됨.

 

2. 이상 현상이 발생하는 것을 방지 

데이터를 변경하는 INSERT/UPDATE/DELETE 작업 시, 

정리를 해두지 않으면 이상현상이 발생할 수 있습니다.

 

3. 논리적이고 직관적인 테이블 구성 

정규화 vs 반정규화 

정규화

중복을 최소화하도록 설계하는 기법

 

EX) OLTP (Online Transaction Processing)

온라인 거래 시스템의 데이터베이스는 CRUD가 많이 일어난다.→ 개별로 INDEX를 모두 생성할 경우, CRUD 속도가 느려지므로 정규화 수행.

 

반정규화

"성능 저하가 예상될 때 주로 사용"

- 읽기 성능을 최적화하도록 설계하는 기법 

- 데이터를 중복시키거나, 그룹핑.

 

EX) OLAP (Online Analytical Processing) 

효과적인 분석과 조회를 위한 분석 리포트.

→ 읽기 속도 성능 향상을 위해, "반정규화" 사용 

 

(Join 비용이 줄어들어서, "빠른 데이터 조회"가 가능)

 

종류 

 

1차 정규화

속성이 원자값(Atomic Value)을 갖도록 함. "기본키" 보유.

같은 성격과 내용의 속성이 중복될 때,

1. 중복 값은 제거

2. 새로운 테이블 추가 (PK 추가)

3. (기존 테이블과) 1:M 관계 형성

 

사진 출처: https://www.youtube.com/watch?v=92RsduytypU&list=PLlCujDgOz8x4JN2wHKbmlM8bFan-WaKj5&index=8

 

설명

'기능분류코드' 속성 차원에서, 같은 속성인데

칼럼 단위로 반복되고 있다.

 

→ 1차 정규화 대상으로,

새 테이블을 추가하여 

오른쪽 표와 같이 분리할 수 있다.

 

(모델, 모델유형기능분류는 1:M 관계를 형성한다.)

 

2차 정규화

기본키가 2개 이상의 속성일 때. "부분 함수 종속성 제거"

PK(Primary Key)가 2개 이상일 때,종속되는 관계가 있다면 분리한다.

 

설명

기본키 '관서번호', '납부자번호'가 2개 이상이므로, 이를 복합키라고 한다.복합키 일부분에 종속되는 속성이 있으므로, 이를 구분하여 분리해준다.

 

함수종속성(FD)

데이터들이 어떠한 기준에 의해서 종속되는 것을 의미.

 

- 완전 함수적 종속

기본키에 대해서 그 속성이 완전히 종속될 때

 

- 부분 함수적 종속

기본키 전체가 아니라, 일부에 대해 종속될 때

 

 

설명

관서번호/ 관서번호,납부자번호로 분리하여,

"2차 정규화"를 진행해주었다.

 

 

미리 지정된 함수 종속성에 따라,

2차 정규화를 진행하여 분리해주었다.

 

 

3차 정규화

"이전적 함수 종속 관계"

기본 키에 의존하지 않고, 일반 컬럼에 의존하는 컬럼이 있다면 

이를 제거한다.

 

설명

직원 테이블에 기본 키인 '사원번호' 외에 의존하는 컬럼이 있다.

부서코드와 부서이름은 '부서' 테이블에 속해야 할 사항이다.

 

→ 데이터가 중복되어, 저장 공간이 낭비되고 있다.

3차 정규화로 해결한 모습.

 

* 1차, 2차, 3차 정규화 사진 출처는 '전광철 OCP' 유튜브 자료화면입니다.

반응형