본문 바로가기

컴퓨터 지식/Database

데이터베이스 정규화이론- 제 1정규형

데이터베이스 정규화 이론 중 가장 첫번째인 제 1정규형에 대해서 알아보겠습니다.

제 1정규형의 정의는 릴레이션에 속한 모든 속성의 도메인이 원자 값으로만 구성되어 있으면 제 1정규형에 속한다.

(도메인은 속성 값이 가질 수 있는 범위, 원자 값은 가장 작은 값을 의미합니다.)


즉 하나의 애트리뷰트에 여러 개가 들어갈 수 없도록 해야 한다는 것인데요. 

아래의 예를 살펴보겠습니다.


(출처: 네이버 지식백과)


이 릴레이션을 보면 이벤트 번호와 당첨여부에 여러 개의 값이 들어가 있는 것을 확인할 수 있습니다.

즉, 이 릴레이션은 제 1정규형을 만족하지 않는 릴레이션입니다.


그렇다면 이 릴레이션이 제 1정규화 시킨다면 어떻게 해야 될까요?

이벤트 번호와 당첨여부의 속성 값들을 하나씩 나누면 됩니다.


(출처: 네이버 지식백과)



바로 이렇게 나누면 되는 것이죠. 

이렇게 되면 최소한 이 릴레이션은 제 1정규형을 만족하는 릴레이션이 됩니다.

여기서 생각해볼만한 문제는 Primary Key를 무엇으로 할 것인가 입니다.

지금 이 릴레이션만 봤을 때는 고객 아이디와 이벤트 번호를 집합으로 묶었을 때

Primary Key로 사용할 수가 있습니다.


그리고 생각해볼 문제가 또 있습니다.

바로 삽입 이상, 갱신 이상, 삭제 이상인데요.


첫번째 삽입 이상에 대해 생각해보면, 고객아이디와 이벤트 번호 집합이

Primary Key 이기 때문에 이 회사의 고객은 고객아이디가 반드시 있어야 하고,

어떤 이벤트라도 하나 이상 반드시 참여해야 한다는 조건이 생기게 됩니다.


즉, 하나의 이벤트라도 참여하지 않는다면 이 회사의 고객이 될 수가 없다는

아이러니한 상황이 발생하게 됩니다.


제가 여기서 말하는 아이러니한 상황이란 것은 실생활을 기준으로 생각했을 때입니다.

어떤 회사가 이벤트를 진행한다고 해서 그 고객이 반드시 그 이벤트에 참여해야만 할까요?

답은 쉽게 아니오 라고 생각할 수 있을 것입니다.

이런 문제 때문에 새로운 고객이 생길 경우에 삽입 이상 문제가 생길 수가 있습니다.


다음은 갱신 이상입니다.

apple 고객이 열심히 구매를 해서 등급이 gold에서 vip로 올라갔다고 가정을 합시다.

이때 apple 고객 아이디가 있는 하나의 튜플에 대해서 등급 변경을 하게 된다면

이 고객은 gold 고객임과 동시에 vip 고객이 될 수가 있습니다.

상식적으로 생각했을 때 gold 임과 동시에 vip가 될 수는 없겠죠?


마지막으로 삭제 이상입니다.

위의 예에서 살펴본다면 orange라는 아이디를 가진 고객이 이벤트에 참여했던 기록에 대해서

삭제할 것을 요구한다고 합시다. 이때 아무 생각없이 

저 마지막 하나의 튜플을 삭제해버린다면 어떻게 될까요?

orange 라는 고객은 더이상 이 회사의 고객이 아니게 됩니다.

즉, 고객은 단순히 이벤트 참여 기록만 없애달라고 했을 뿐인데

본인 정보까지 완전히 삭제가 되어버린 것이죠.



이상으로 제 1정규형은 무엇인지, 그리고 그에따른 문제는 무엇인지에 대해서

알아보았습니다. 다음에는 제 2정규형에 대해서 알아보겠습니다.