DATOR


데이터 모델의 정규화(normalization) 이화식컬럼


PURPOSE

데이터 모델에서 정규화가 차지하는 비중은 매우 크다. 그럼에도 불구하고 정확하게 정규화를 할 줄 아는 사람들을 찾아보기란 매우 어렵다. 정규화의 각 단계별 개념은 절대로 어려운 것이 아니다. 사실은 초등학생들도 충분히 이해할 수 있는 내용이다. 그러나 개념은 그리 어렵지 않지만 실전에서 적용하는 것은 만만하지가 않다. 그 이유는 사고를 순서에 입각해서 차례로 접근하지 못하는데 원인이 있다.
여기서는 정규화의 기본 개념을 간략하게 알아 보고,단계별 상세한 적용 방법은 그 다음 장에서부터 다루기로 한다. 앞으로 이해를 돕기 위해서 다양한 사례를 통해 실전적인 적용 능력을 향상시키는 기회를 가지도록 하겠다.

SCOPE & APPLICATION

KEY IDEA

(KEY WORD : 정규화, 정규형, NORMALIZATION)

SUPPOSITION

DESCRIPTION

   정규화란 무엇인가?

  • 정규화 작업이란 원래 관계형 데이터베이스 개념이지만 그 원칙은 데이터베이스에 상관업없이 논리적 데이터모델링에서 그대로 적용될 수 있다. 정규화는 1단계부터 5단계 까지 있으며 4단계에는 보이스코드 정규형이 추가로 있어 모두 6가지로 구분된다. 그러나 일반적으로 3단계 까지만 실제로 사용하며 그 이상은 감안하지 않아도 문제가 되지 않으므로 여기서는 3단계 까지만 다루도록 하겠다.
     
  • 우리가 정규화를 하는 궁극적인 목적은 데이터의 중복을 제거하고 속성들이 본래의 제자리에 위치시키자는 것이다. 이 말은 엔터티에는 그 엔터티의 주인(uid)의 소유 속성들만 올 수 있다는 것이다. 다시 말해서 반드시 1촌 관계인 속성들만 와야 한다는 것이다. 즉, 부모나 자식의 속성, 혹은 3촌 이상의 관계에 있는 속성들은 자신 소유의 속성이 아니라 다른 곳에서 주워(빌려) 온 속성이라는 것을 의미한다. 정규화를 하게 되면 해당 엔터티에 위치할 수 없는 속성들은 어딘가 자신이 있어야 할 원래 위치를 찾아가야 하며 이미 진짜 주인인 엔터티가 존재하고 있다면 당연히 제 집을 찾아 가면 되겠지만, 그렇지 못할 경우에는 새로운 집, 즉 새로운 엔터티를 생성하고 그 속에 위치시킬 수밖에 없다. 이러한 이유로 인해 정규화 작업을 하면 엔터티는 점차 분할되어 가는 것이다.
     
  • 실제로 어떤 시스템에 가서라도 정규화를 해 보면 어떤 엔터티 속성의 1/2은 남에게서 빌려 온 속성인 경우가 허다하게 나타난다. 문제는 빌려 왔다는 것을 알고라도 있다면 그나마 다행이지만, 대부분은 아예 자신의 소유로 착각하고 있다는데 문제의 심각성이 있다.
     
  • 데이터 모델링은 반드시 정규화를 거쳐야만 데이터베이스 설계 단계로 갈 수 있는 것이며, 물론 물리적 데이터 모델링(physical data modeling) 단계에서는 물리적인 요소를 감안하여 약간의 반정규화(de-normalization)을 실시할 수도 있다. 그러나 대부분은 논리적 데이터모델링 단계에서부터 수행속도를 염려하여 마구잡이로 반정규화를 실시함으로써 우리의 진정한 목적인 정확한 데이터 모델을 찾아내는 일에 심각한 장애요인이 되고 있다.
     
  • 당연히 논리적 데이터모델링의 목정은 본질이 무엇인 지를 밝혀 내는 것이며, 그것이 모두 끝난 후 다른 요소를 종합적으로 감안하는 것이 당연한 수순일 것이다. 이를 어기면 내 밥상이 남의 숟가락들로 뒤덮혀 정작에는 누구 밥상인 지를 알 수 없는 지경에 이르고 만다. 물리적 모델링은 속성을 중복화 시키는 것만이 능사가 아니며 훨씬 다양한 조치 방법들이 있고 또한 여러 가지 물리적 요소들을 보다 종합적으로 판단하여 결정해야 하므로 아직 이러한 물리적 요소가 모두 나타나지 않은 현재의 논리적 모델링 단계에서 함부로 결정한다는 것 자체가 말이 되지 않는 것이다.
  •    정규화(normalization) 단계

    • 이 장에서는 정규화의 각 단계에 대한 기본적인 개념만 소개하기로 하고 단계별 상세한 내용은 별도의 장에서 다루도록 하겠다.
       
    • 1 정규형 : 모든 속성은 반드시 하나의 값을 가져야 한다.
    • , 반복되는 형태가 있어서는 안된다는 것이다. 나중에 속성이 컬럼(column)이 되었을 때 한 로우(row)에 있는 컬럼에는 당연히 하나의 값만 들어 갈 수 있으므로 두 개 이상의 값을 관리하는 것은 불가능하기 때문이다. 제1 정규형에 저촉되면 해당 속성은 하위 엔터티를 만들어 이동해야 하며, 이 엔터티는 현재의 엔터티에서 분할된 것이 분명하기 때문에 식별자를 상속받아 자신의 식별자가 된다. 물론 추후 새롭게 인조 식별자를 만들겠다면 부모의 식별자가 자신의 식별자에서 빠질 수는 있지만 그렇다고 해서 부자 간의 관계가 없어지는 것은 결코 아니다.

      • 2 정규형 : 모든 속성은 반드시 식별자 전체에 종속적이어야 한다.

      , 엔터티의 주인인 식별자가 자신의 소유인 속성만 가져야 하지 남의 속성을 빌려오면 안 된다는 것이다. 만약 식별자가 두 개 이상의 독립적인 의미의 속성으로 구성되어 있다면 반드시 모든 식별자 속성이 전부 모여야 만들어 질 수 있는 속성만 올 수 있는 것이며 어느 하나가 없더라도 생성 가능하다면 이미 전체 식별자에 종속이 아니므로 제2 정규형을 어기게 되는 것이다.

      2 정규형에 저촉된 속성들은 자신과 직접 종속이었던 식별자의 특정 속성(들)과 함께 다른 곳으로 쫓겨나게 된다. 이 말은 1촌 관계에 있는 것들 끼리 새 살림을 차려야 한다는 것이다. 그런데 식별자를 구성하던 속성까지 쫓겨나게 되면 현 엔터티의 식별자가 달라지게 되므로 비록 다른 엔터티로 이사를 하였더라도 식별자로써의 관계(UID bar를 붙쳐서)를 맺으면서 이동하게 된다.
       

      • 3 정규형 : 식별자가 아닌 일반 속성들 간에는 서로 종속될 수 없다.

      2 정규형은 식별자와 일반 속성들 간의 종속관계를 규정한 것이고, 제3 정규형은 일반속성들 간의 종속 관계를 규정한 것이다. 제2 정규형을 실시하고 나면 남아 있는 일반 속성들은 그야말로 식별자와 1촌 관계들만 모여 있으므로 그들간의 관계는 '형제'가 된다. 만약 형제 중에 누군가가 자기만이 소유하는 속성들을 갖는다면 이미 이들은 형제 관계가 아니라 '삼촌' 관계가되므로 제3 정규형을 어기게 된다.

      3 정규형에 저촉된 속성들은 제2 정규형과 마찬가지로 저촉된 속성들은 모두 다른 엔터티로 쫓겨 나면서 관계를 맺게 되지만, 식별자 속성이 포함되지는 않았으므로 제2 정규형과 달리 UID bar를 붙이지 않고 그냥 관계만 맺게 된다. 

      • 이상으로 정규화의 기본적인 개념을 살펴보았다. 여기서 일단 이 장은 마치기로 하고 다음 장에서 부터는 각 단계별로 상세한 적용기준을 설명하도록 하겠다.
Tag :

Leave Comments

댓글 쓰기 권한이 없습니다. 회원 가입후에 사용 가능합니다