안녕하세요, SW마에스트로 서포터즈입니다.
저번 시간에 웹 개발을 할 때
어떤 데이터베이스를 선택할지 알아봤죠?
오늘은 데이터베이스를 만들 때 거쳐야 하는 필수적인 과정!
'정규화' 에 대해 알아보려고 합니다!
정규화는 관계형 데이터베이스에서
데이터를 정규형에 맞도록 구조화하는 과정인데요.
데이터의 중복을 없애 용량을 줄이고,
데이터의 무결성을 개선할 수 있어요.
아무래도 주니어 개발자가
정규화를 일일이 신경 쓰기 힘들기는 하지만,
원래는 데이터베이스가 완전히 정규화되도록 디자인해야 해요.
정규화에는 제1정규화 , 제2정규화 , 제3, 제4, 제5정규화 ...
그리고 보이스-코드 정규화까지 있어요.
먼저 제1정규화는 테이블 내의 컬럼이 원자값,
즉 분리되지 않는 값만을 가져야한다는 내용이에요.
예시에서 이 B의 전화번호가 두 개인 걸 확인할 수 있죠?
컬럼의 값은 하나씩이어야 하므로 이 B의 전화번호 두 개에 대해서 행을 각각 만들어 줘야 해요.
![]()
제2정규화는 완전 함수적 종속에 관한 내용입니다.
완전 함수적 종속이란?
기본 키의 부분집합이 결정자가 되어서는 안 된다는 뜻인데,
말이 어려우니 예시로 함께 살펴볼게요.
예시에서 (학번, 과목) 라는 복합 키가 기본 키라고 했을 때,
지도교수 이름은 과목만 알아도 알 수 있죠?
지도교수 컬럼은 (과목) 에만 종속적인데 굳이 (학번, 과목)일 필요가 없는 거에요.
그래서 테이블을 아래와 같이 분리해 줬어요.
아, 그리고 제 2정규화에는 완전 함수적 종속을 만족해야 하는 것 말고도
제1정규화를 만족해야 한다는 조건이 있어요!
이 조건은 제3, 제4, 제5 정규화에도 동일하게 적용됩니다.
제3정규화는 제2정규화를 만족하고,
기본 키를 제외한 속성들 간 이행 종속성이 없어야 한다는 내용이에요.
이행 종속성이란 A->B, B->C 일 때 A->C 를 만족하는 성질인데, 예시를 함께 볼게요.
등급은 아이디에, 할인율은 등급에 종속되어 있어요.
즉 할인율은 아이디에 종속되어 있는 것이라 이행 종속성을 만족하고 있는 예시에요.
제3정규화에서는 이것을 제거해야 하므로 테이블을 아이디-등급, 등급-할인율로 분리해 줍니다.
마지막은 보이스-코드 정규화예요. BCNF라고도 해요.
BCNF는 제 3정규화를 만족하고 모든 결정자가
후보 키 집합에 속해야 한다는 내용이에요.
예시를 보면, 교수만으로 과목을 결정할 수 있어요.
해당 테이블에서 한 명의 교수가 하나의 과목만 맡는다고 했을 때,
당연히 교수만으로 과목을 알 수 있겠죠?
그런데 현재 (학생, 과목) 키로 행을 구분하고 있는 거에요.
이 경우 데이터베이스를 수정하다가 이상이 생길 수 있으므로
학번-과목-학점, 과목-교수로 테이블을 분리해 줍니다 .
오늘은 데이터베이스의 정규화에 대해 알아봤는데요
생각보다 아주 어렵진 않죠?
관심이 있는 분들은 제4,제5정규화와
키의 종류까지 찾아보며 공부하시면 좋을 것 같네요!
다음에도 재미있고 알찬 소식으로 돌아오겠습니다.
감사합니다!
![]()
