DB

정규화

정규화는 한 테이블에 섞여 있는 사실들을 주제별로 나눠, 같은 정보가 여러 곳에 중복 저장되지 않게 만드는 과정입니다. 중복이 있으면 고칠 때, 넣을 때, 지울 때 데이터가 어긋나는 이상 현상이 생깁니다.

비정규형 테이블을 1NF, 2NF, 3NF로 나누며 이상 현상이 사라지는 과정을 보여 주는 시뮬레이터

1. 정규화 단계를 고르세요

2. 이상 현상을 직접 일으켜 보세요

단계를 바꾼 뒤 같은 이상 현상 버튼을 다시 눌러 보세요. 1NF에서는 여러 행을 고쳐야 하거나 아예 불가능했던 작업이, 3NF에서는 한 칸만 건드리면 끝납니다. 밑줄 친 열이 기본키입니다.

1NF칸마다 값 하나
2NF부분 종속 제거
3NF이행 종속 제거
BCNF결정자 = 후보키

함수 종속으로 나눌 곳을 찾습니다

"학번을 알면 이름이 하나로 정해진다"를 학번 → 이름이라고 씁니다. 위의 색깔 칩이 이 표의 함수 종속입니다. 정규화는 각 종속을 자기만의 테이블로 옮기는 일이고, 단계가 올라갈 때마다 같은 색 칩이 같은 테이블로 모입니다.

1NF는 한 칸에 값을 하나만 둡니다. 2NF는 기본키가 (학번, 과목코드)처럼 여러 열일 때, 키의 일부에만 종속된 열(이름은 학번에만, 과목명은 과목코드에만 종속)을 떼어 냅니다. 3NF는 키가 아닌 열을 거쳐 종속되는 열(학번 → 학과 → 학과사무실)을 떼어 냅니다. BCNF는 여기서 한 걸음 더 나가, 무언가를 결정하는 열은 모두 후보키여야 한다는 조건입니다.

실무와 면접에서는

정규화를 많이 할수록 중복은 줄지만 조회할 때 JOIN이 늘어납니다. 그래서 읽기가 압도적으로 많은 화면에서는 일부러 중복을 허용하는 반정규화를 하기도 합니다. 면접에서는 "이상 현상 세 가지와 각각을 정규화가 어떻게 막는가"를 예시와 함께 말할 수 있으면 충분합니다.