[ 기술 스터디 ] DB 정규화(Nomalization)

김민석·2021년 7월 14일
0

기술 스터디

목록 보기
14/18

참고:
https://mr-dan.tistory.com/10
https://wkdtjsgur100.github.io/database-normalization/

정규화를 이해하기 전에 데이터베이스의 이상 현상을 이해해야한다.

데이터베이스 이상 현상

RBMS에서 좋은 관계형 데이터베이스를 설계하는 목적 중 하나는 정보의 이상 현상(Anomaly)가 생기지 않도록 설계하는 것이다. (이 이상 현상들은 정규화(Nomalization)을 통해 방지할 수 있다.)

이상 현상은 다음의 3개로 나뉜다.

1. 갱신 이상(Modification Anomaly) :

반복된 데이터 중에 일부를 갱신할 때 데이터의 불일치 발생

2. 삽입 이상(Insertion Anomaly) :

불필요한 정보를 함께 저장하지 않고서는 어떤 정보를 저장하는 것이 불가능

3. 삭제 이상(Deletion Anomaly) :

필요한 정보를 함께 삭제하지 않고서는 어떤 정보를 삭제하느 것이 불가능


갱신이상

519라는 ID를 가진 직원은 주소가 한 개여야 한다. 그런데 하나의 레코드만 수정했기 때문에 이상현상이 생겼다.

삽입 이상

교수는 Dr.Newsome 최소한 하나의 강의를 가져야한다. 따라서 강의 코드를 null로 해야 삽입이 가능하다.

삭제 이상

위 예시에서 만약 강의가 중단되면, 교수 자체가 사라지는 문제가 발생하게 된다. 즉 데이터의 삭제가 전혀 다른 사실에 대한 데이터의 삭제도 필요로 하게 되는 것이다.


자, 정규화는 위의 3가지 경우를 막기 위한 방법이다.
이제 정규화를 알아보자.


정규화의 정의 ()

정규화란 데이터베이스에서 데이터들의 중복을 최대한 제거하여 이상 현상(Anomaly)을 방지하기 위한 기술이다.

정규화는 다음의 5가지로 나뉜다.

1. 제 1 정규화 : 도메인 원자값

2. 제 2 정규화 : 부분적 함수 종속 제거

3. 제 3 정규화 : 이행적 함수 종속 제거

이하는 다루지 않는다.
4. BCNF : 결정자이면서 후보키가 아닌 것 제거
5. 제 4 정규화 : 다치 종속 제거
6. 제 5 정규화 : 조인 종속서 이용

제 1 정규화 : 도메인 원자값

제 1정규형을 갖추려면 도메인 원자값이 만족해야한다.
이 조건을 만족시킨다는 것은 다음의 하위 조건을 만족시키는 것이다.

1) 어떤 관계에 속한 모든 도메인이 원자값만으로 되어 있다.

2) 반복 그룹이 존재하면 안된다.

3) 모든 행은 식별자(고유키)로 완전하게 구분되어야 한다.

즉, 위의 내용을 종합해보았을 때, 테이블에 중복되는 항목이 존재하지 않아야 한다를 만족시키면 된다. (필드의 값이 모두 atomic 하면 된다.)

아래는 1번 조건을 위반하였다. 한 record에 여러 개의 전화번호를 갖고 있으므로 atomic하지 않다.

위의 표를 이렇게 나누면 2번 조건을 위반하게 된다. 전화번호 그룹이 반복되고 있다.

이렇게 표를 바꾸면 ID가 고유키의 역할을 하지 못하게 된다.

따라서 이렇게 나누어야 제 1정규화를 만족시키게 된다.


제 2 정규화 : 부분적 함수 종속 제거

제 2정규형을 갖추려면 테이블의 모든 컬럼이 완전한 함수적 종속을 만족하면 된다.

함수적 종속 :

x의 값에 따라 y값이 결정되는 관계. 예를 들어, 내 학번을 알면 내 이름을 알 수 있다.
이 관계를 x->y로 표현하며, x는 결정자, y는 종속자라고 한다.

완전/부분 함수적 종속 :

함수적 종속에서 결정자가 여러 개일 경우({x1,x2}-> y)

  • x1과 x2가 y 갑쇼을 결정할 때 완전 함수적 종속
  • x1, x2 중 하나만 y를 결정할 때 이를 부분 함수적 종속

아래의 예시를 보자.

Model Full NameManufacturer + Model로 이루어져 있다.
따라서 {Model, Manufacturer} -> Model Full Name완전 함수 종속 관계다.

그러나, {Model, Manufacturer} -> Manufacturer Country에서 Model과 `Manufacturer Country는 전혀 관게가 없다. 따라서 이들은 부분 함수 종속 관계가 된다.

제 2 정규화에서는 부분 함수적 종속을 제거하는 것이다. 이를 제거하면 다음과 같은 형태가 된다.

제 3 정규화 : 이행적 함수 종속 제거

이행적 함수 종속을 제거하는 것은 다음의 하위 조건을 만족시키는 것이다.

1) 관계가 제 2정규화 되었다.
2) 고유키가 아닌 속성들은 기본키에 의존한다.

아래 예시는 이 중 두 번째 조건이 위반된 것이다.

위 테이블에서 {Tournament, Year}는 후보키가 된다.

후보키 : 슈퍼 키 중 더이상 줄일 수 없는 형태를 가진 것.
슈퍼키 : 각 행을 유일하게 실벽할 수 있는 하나 또는 그 이상의 속성들의 집합 (즉, 기본키 < 후보 키 < 슈퍼 키 )

하지만, Winner Date of BirthWinner에 의존하고 있다는 것을 알 수 있다.
따라서 이를 둘로 나누어 주어야 한다.

0개의 댓글