면접 단골 문제 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