메뉴 건너띄기
상단메뉴 바로가기 본문 바로가기

SW마에스트로 소식

웹 개발 데이터베이스 (2) 정규화

  • 2024-10-21 10:55
  • 홍보담당자

안녕하세요, 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정규화와

키의 종류까지 찾아보며 공부하시면 좋을 것 같네요!

다음에도 재미있고 알찬 소식으로 돌아오겠습니다.

 

감사합니다!

축하

 

박서연(폰트)

첨부파일 (1)