정규화 ?

  • DB시스템을 만지다보면 엄청나게 많은 테이블들이 얽혀있어 하나의 데이터를 수정했을때 여러문제가 생길 수 있는데, 정규화를 통해서 정해진 규칙대로 테이블을 쪼개게 되면, 문제점들을 사전에 해소할 수 있음.

  • 가장 대표적인 문제점들로는 삭제이상(delete), 삽입이상(insert), 수정이상(update)

  • 삭제이상은 지정된 테이블에서 데이터를 삭제하려고 하는데, 연결된 다른테이블에서도 데이터가 삭제되는 것이다.
  • 삽입이상은 지정된 테이블에 데이터를 삽입하려고 하는데, 연결된 다른테이블에서도 데이터가 삽입되는 것이다.
  • 수정이상은 원하는 데이터를 모두 수정하지 못하고, 일부 데이터만 수정되는 것이다.

이러한 문제점들을 해소하기 위해서 테이블을 쪼개는 것이다.

제1정규화

  1. 어떤 Relation에 속한 모든 Domain이 원자값만으로 되어 있다.
  2. 모든 attribute에 반복되는 그룹이 나타나지 않는다
  3. 기본키를 사용하여 관련 데이터의 각 집합을 고유하게 식별할 수 있어야한다.

릴레이션 = 테이블 = 앤티티 = 개체
행 = row = 레코드 = 투플
열 = 컬럼 = 필드 = 속성 = 어트리뷰트
원자값 (atomic value) : 더 이상 쪼갤 수 없는 값

  • 1번은 그냥 한개의 릴레이션에 여러개의 값이 들어가면 안된다는 것이다.
    ex ) 취미 : 등산, 골프  » 이러면 안된다는 것이다.

  • 2번은 위와같이 한개의 Relation에 여러개의 값이 들어가는 것을 막기위해 같은 그룹을 여러 개 만드는것이다. ex ) 취미1 : 등산, 취미2 : 골프 » 이러면 1번을 안하려고 억지로 릴레이션을 분리하는것이니깐 정규화 하는 의미가 없다.

  • 3번은 1번,2번 case를 막기위해
    내취미 : 등산, 내취미 : 골프
    이런식으로 같은 릴레이션을 만들어 관련 데이터를 고유하게 식별하지 못하게 하면 안된다는 것이다.

  • 사실 그냥 반복그룹을 제거하되 그괴정에서 의미가 없는 방식으로 제거하지 말라는 것이다.
  • 왜 정규화 하는지를 생각하면 제1정규화는 반복그룹제거 하나로 방식을 통일할 수 있다.

제2정규화

  • 제2 정규화를 수행 했을 경우 테이블의 모든 컬럼이 완전 함수적 종속을 만족한다.

    부분 함수적 종속을 모두 제거했다는 뜻이다.

  • 함수적 종속 : x값에 따라 y값이 결정될 때 x->y로 표현하는데, 이를 y는 x에 대해 수적 종속이라고 한다.
    예를들어 학번을 알면 이름을 알 수 있는데, 이 경우엔 학번이 x가 되고 이름이 y가 된다.
    x를 결정자라고 하고, y를 종속자라고 한다.
    즉 다시말해서, x가 바뀌었을 경우 y가 바뀌어야만 한다는 것이다.

함수적 종속에서 x의 값이 여러 요소일 경우, 즉 {x1,x2} -> y 일 경우, x1과 x2가 y의 값을 결정할 때 이를 완전 함수적 종속이라고 하고, x1,x2 중 하나만 y의 값을 결정할 때 이를 부분 함수적 종속이라고 한다.

위에서 model과 manufacture을 알면 model full name 필드를 아예 유지하지 않거나 참조하지 않아도 결정되기 때문에 {model,manufactor} -> model full name 이라고 할 수 있다. 하지만, {model, manufactor} -> manufactor country 에서 model과 manufacturer country는 아무런 연관 관계가 없기 때문에, manufacturer country는 manufacturer와만 종속관계에 있게 되고 이를 부분 함수 종속이라고 하게 되는 것이다. 아래의 그림을 보면 쉽게 이해할 수 있다.

위에서 부분 함수 종속을 제거 하게 되면, 아래와 같은 그림이 된다.

따라서, 부분 함수 종속을 제거한 이후의 테이블은 아래와 같고, 이는 제 2정규형을 만족한 테이블이다.

  • 왜 정규화 하는지를 생각하면 제2정규화는 부분함수적종속성제거 하나로 방식을 통일할 수 있다.

제3정규화

  • 테이블(Relation)이 제 3정규형을 만족한다는 것은 아래 두 가지 조건을 만족하는 것을 의미한다.
    1. Relation이 제 2정규화 되었다.(The relation is in second normal form)
  1. 기본 키(primary key)가 아닌 속성(Attribute)들은 기본 키에만 의존해야 한다.

위 테이블에서 {Tournament, Year}가 후보키가 된다. 하지만 Winner Date of Birth은 기본키가 아닌 속성인 Winner를 거쳐 {Tournament, Year}에 의존하고 있는 것을 알 수 있는데, 이는 3NF를 위반한 것이 된다. 따라서 테이블을 아래와 같이 둘로 나누어 주자

위 테이블은 3정규화를 만족한 상태이다.

  • 왜 정규화 하는지를 생각하면 제3정규화는 이행적종속성 하나로 방식을 통일할 수 있다.