CS 정리

정규화란 ?

프흐프좋아 2024. 5. 15. 13:15

면접 단골 문제 1번 ..

정규화란 무엇인가요?

정규화를 실제로 해본 경험이 있나요?

정규화를 해봤다면, 제 몇 정규형까지 만족시키게끔 고려하는 편인가요?


1. 정규화 개념

- 데이터 모델링을 할 때, 최대한 중복 데이터를 허용하지 않아야 저장공간을 효율성 있게 사용할 수 있고, 이에 따른 업무 프로세스의 성능을 기대할 수 있다. 이렇게 중복 데이터를 허용하지 않는 방식으로 테이블을 설계하는 방식을 정규화라고 한다.

* 데이터 이상현상을 줄일 수 있음

* 데이터의 중복을 제거하고 데이터 모델의 독립성을 확보할 수 있음

 

2. 정규화 단계

제 1정규화(1NF) -> 제 2정규화(2NF) -> 제 3정규화(3NF) -> BCNF(boyce-codd Normal Form) 정규화 -> 제 4정규화 .. 

 

더 많은 정규화 단계가 있으나 실무에서는 제 3정규형까지 만족할 수 있게끔 테이블을 설계한다.

너무 많은 단계의 정규화는 결국 데이터 하나를 가져오기 위해서 너무 많은 조인(join)을 사용해야할 경우를 발생시킬 수 있기 때문에 (이런 경우에는 보통 반정규화를 한다) 실무에서는 보통 제3정규형까지 만족시키도록 한다.

 

3. 제 1정규화(1NF)

- 테이블 컬럼이 원자성을 갖도록 테이블을 분해하는 단계

-> 쉽게 말해서 하나의 행에 각각의 컬럼에 각각 한 값만 입력되도록 하는 단계

 

예) 구매 테이블

 

홍길동의 구매상품에 샴푸,린스 이렇게 두개의 값이 저장되어있으므로

나누어서 저장할 수 있도록 하는게 제 1정규화

오른쪽 테이블은 제 1정규형을 만족했다. 라고 표현한다

 

4. 제 2정규화(2NF)

- PK가 2개 이상의 키로 구성됐을 때 발생한다.

-> 쉽게 말해서 PK가 둘 이상의 컬럼으로 구성되어있는데, 그 중 일부만 1:1 대응관계를 갖는 컬럼이 존재하는 경우에 분해한다.

 

예) 수강이력 테이블

기본키 - 학생번호, 강의명

 

강의실같은 경우, 학생번호+강의명에 의해 결정되는 것이 아니라,

강의명에 의해서만 강의실이 결정되기 때문에(부분 함수 종속성을 가짐)

수강이력 테이블에서 강의실 테이블로 제 2정규화 처리를 해줄 수 있다(부분 함수 종속성 제거)

=> 완전 함수 종속을 만족하므로 제 2 정규형에 속한다고 볼 수 있다.

 

5. 제 3정규화(3NF)

- 이행적 종속성이 있는 경우 제 3정규화 시행

- 이행적 종속성이란, A->B B->C 인 경우 A->C가 성립되는 것을 뜻한다

 

예) 학생테이블

PK는 학번

학생테이블에서 학번 -> 전공이며, 전공 -> 교수에 의해 성립되어진다.

따라서 학번->교수 라는 이행적 종속성이 성립된다.

이를 해소하기 위해서는 제 3정규화를 통해 전공과 교수컬럼을 따로 분리해야한다.

(ex 해당 전공의 교수 이름이 바뀔 경우 학생테이블에서 모든 학번의 전공에 해당하는 교수 이름을 바꾸어 주어야하는 사태 발생)

 


도움 받은 출처

https://cafe.naver.com/hongdatalab

 

홍은혜 강사의 Data Lab : 네이버 카페

전) 삼성SDS 데이터 엔지니어 현) 아이티윌 빅데이터 분석 전임 강사 홍은혜강사와 함께하는 데이터 스터디

cafe.naver.com

https://blog.naver.com/kky5163/223438331618