데이터베이스 정규화 기초 - 어떤 속성이 어떤 값을 결정하는가
데이터베이스의 정규화 과정이다. 사실 과정은 없고 결과만 있다. 이론 보다는 경험에서 울어나오는 나의 경험을 바탕으로 작성된 데이터베이스이다.
데이터베이스 정규화
관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화라고 한다. 데이터베이스 정규화의 목표는 이상이 있는 관계를 재구성하여 작고 잘 조직된 관계를 생성하는 것에 있다.
수업 시간에 진행한 문제는 아래의 테이블을 정규화 하는 것이었다. 함께 살펴보자.
<정규화 전의 테이블>
<정규화 된 테이블>
두 데이터베이스의 차이를 보자. 첫번째 테이블은 전형적으로 아주 못 만든 테이블이다. 모든 정보를 하나의 테이블에 넣음으로써 수 많은 중복이 발생하고, 수 많은 공간의 낭비가 생긴다.
이를 해결하기 위해 중복을 최소한으로 하기 위한 정규화 과정을 진행하였다. 그 과정에서 필요에 의해 테이블을 4개로 쪼갰고, 위의 사진과 같이 되었다.
간단하게 설명을 하자면, 제품과 고객은 따로 테이블이 존재해야 한다. (자명한 사실이다.)
그리고 주문 테이블은 주문 번호와 어떤 고객이 주문을 했는지, 그리고 그 주문을 수출하는지의 여부를 담고 있다.
주문-제품 테이블은 하나의 주문에 여러 개의 제품이 포함될 수 있기 때문에 주문 번호로 구분하고, 제품 번호를 엮어서 주문 수량을 함께 제시하였다.
이렇게 하여 4개의 테이블로 나눠서 정규화를 진행하였고, 아주 성공적이었다.(?)
데이터베이스 정규화 아주 기초
데이터베이스 정규화의 기초는 "어떤 속성이 어떤 값을 결정하는가?"를 제일 중요하게 생각해야 한다.
가령 학교의 학생들은 예로 들어보자. 학교의 학생들은 다음과 같은 속성을 가지고 있다.
학번, 이름, 키, 몸무게, 나이, 생일 등...
학생들을 구분하기 위해서는 어떻게 해야할까? 다음과 같은 경우들을 생각해볼 수 있다.
1. 학번으로 구분하는 경우
학번으로 구분하는 경우는 아주 좋은 경우다. 예를 들어 3329라는 학번을 가진 학생은 디미고에 "전윤민" 한 명 밖에 없기 때문이다. 이렇게 학생들을 구분할 수 있게 해주는 속성들을 "키"라고 한다. 데이터베이스의 세상에는 다양한 "키"들이 있는데, 차차 알아가도록 하자.
2. 이름으로 구분하는 경우
이름으로 학생들을 구분하는 경우, 이름이 같은 학생들이 있기 때문에 데이터의 중복이 일어날 수 있고, 그 속성이 어떤 한 학생을 지칭한다고 볼 수 없다
나머지 속성들도 마찬가지이다. 어떤 한 학생을 특정하기에는 부족한 속성들이다. 사실 학교에서도 학생들을 구분하기 위해서 학번을 부여하기 때문에 뭐
결론
결론적으로 데이터베이스의 정규화는 "어떤 속성이 어떤 값을 결정하는가?"가 가장 기본적으로 고려해야 되는 사항이다. 학교의 예시에서는 '학번'이 학생들의 다른 속성들을 결정하는 고유한 속성이라고 볼 수 있다.
앞으로 더 많은 데이터베이스의 정규화에 대해서 알아볼 수 있도록 하자. (사실 엄청 많은 단계를 거치기 때문에)