본문 바로가기
스터디/관계형 데이터 모델링

4장 정규화

by 취미툰 2021. 9. 28.
반응형

정규화란?

속성 간의 부정확한 종속성을 없애는 것을 의미

정규형도 문제점이 존재하고 더 나은 선택을 하고자 비정규형을 채택할 수 있지만 완벽하게 정규화된 모델은 실제 업무를 가장 잘 반영할 수 있으며, 간결해서 더욱 직관적이고 이해하기 쉽습니다. 다만 정규형은 성능차원에서 보완이 필요한 대가 존재할 수 있음

 

정규화의 목적

정규화를 하는 가장 근복적인 이유는 중복 데이터(속성,엔터티)를 제거하기 위함

중복데이터는 정합성에 악영향을 미치고 데이터 이상현상인 아노말리를 발생시킵니다.

중복을 완전히 제거하는 것은 불가능하지만 최소화시킬 수 있을만큼 최소화해야 합니다.

 

아노말리

아노말리는 데이터 이상 현상입니다. 릴레이션에 존재하는 데이터에 의도하지 않은 이상현상이 발생할 때가 있고, 아노말리는 중복된 데이터 때문에 발생합니다.

위의 릴레이션에서 발생할 수 있는 아노말리

업데이터 아노말리(Update Anomaly)

예를들어 '홍길동'을 '2루수'로 포지션을 변경하면 세개의 값이 변경이 될것입니다. 업데이트를 해야하는 값은 라이거스 팀의 메이저리그에 있는 홍길동 하나만 변경해야하는데 다른 값이 두개 더 변경이 일어날 수 있게 되는것입니다.

 

삭제 아노말리(Delete Anomaly)

예를들어 '김길동'에 대한 데이터를 삭제하려 할 때 두개의 값이 삭제 될 것입니다. 싱글리그의 타이거즈 김길동데이터만 삭제하고 싶었지만 다른 값도 삭제가 될 수 있다는 것입니다.

 

삽입 아노말리(Insert Anomaly)

팀이 결정되지 않은 신인 선수의 데이터를 삽입하려 할 때 팀ID가 키값이기 때문에 NOT NULL입니다. 하지만 아직 팀이 결정되지 않은 선수이기 때문에 값 자체를 삽입할 수 없게 되고 데이터 이상현상이 나타나게 됩니다.

 

위의 릴레이션을 정규화한 릴레이션

 

함수종속

함수 종속은 릴레이션 내에 존재하는 속성간의 종속성을 의미합니다. 어떤 집합이든 그 집합을 대표할 수 있는 속성은 존재하고 대표속성(식별자)과 나머지 속성 사이의 연관관계가 함수 종속입니다. 릴레이션에서 A속성의 값이 유일하게 식별할 수 있다면 B속성은 A속성에 함수적으로 종속됐다고 합니다.

 

이렇게 함수 종속을 기반으로 정규화 과정을 거치면 업무 오견을 만족하면서 엔터티의 주제에 맞도록 속성이 배치됩니다. 그렇게 됨으로써 엔터티는 정제됩니다.

 

속성 간의 종속성을 규명할 때 기준에 되는 값을 결정자라고 합니다. 그리고 결정자에 의해 정해지는 값을 종속자라고 합니다.  X -> Y라고 표현할 수 있습니다.

주민등록번호와 이름의 관계에서 주민등록번호는 결정자가 될 수 있습니다. 유일한 값이기 때문입니다. 반면에 역은 성립되지 않습니다. 이름을 안다고 주민등록번호가 고유하게 결정되는 것이 아니기 때문입니다. 반례를 찾을 수 없을 때 함수 종속이 성립한다고 생각하면 됩니다.

 

정규형의 종류

1정규형

1정규화와 관련된 속성은 다가속성과 복합속성이 있습니다.

다가속성은 같은 종류의 값을 여러 개 가지는 속성을 의미합니다. 

위의 전화번호에는 여러 개의 값이 들어가 있으므로 다가속성이며 정규형을 위반한 값이 됩니다.

릴레이션의 모든 속성은 단일 값을 가져야 하므로 변경되야 합니다. 이를 1정규화하면 아래와 같습니다.

 

1정규화와 밀접하게 관련된 속성 중에는 다가 속성 외에 복합속성이 있습니다. 하나의 속성이 여러개의 속성으로 분리될 수 있을 때 복합속성이라고 합니다. 예를 들어 주소가 있습니다. 주소는 시,구,동,번지 데이터로 나눌 수 있고 이는 대표적인 복합속성입니다. 주의해야할 점은 복합 속성처럼 보인다고 무조건 분해하면 안된다는 것입니다. 데이터 관리 수준에 따라 분해해야 합니다. 오히려 복합속성을 분해했을 때 더 불편할 수 있기 때문에 확인 후 분해를 진행해야 합니다.

 

2정규형

2정규형은 후보 식별자 속성과 일반 속성간의 종속성에 의해 수행됩니다. 릴레이션의 모든 속성이 후보 식별자 전체에 종속적이면 2정규형입니다. 만약 일반 속성 중에 후보 식별자 전체에 종속적이지 않고 후보 식별자를 구성하는 속성 일부에 종속적인 속성이 있다면 중복이 발생했으므로 그 속성을 릴레이션에서 분리해야 2정규형이 됩니다. 즉 완전 함수 종속이 되어야 합니다.

 

위의 릴레이션에서 상품명과 단가는 주 식별자 전체(주문번호,상품코드)에 종속되지 않고 상품코드에만 종속됩니다.

 

따라서 상품명과 단가는 주문상품 엔터티에서 제외하고 상품코드를 주 식별자로 하는 상품엔터티를 상위엔터티로 생성해야합니다.

 

 

3정규형

3정규형은 이행적 종속성과 관련이 있습니다. 만약 X->Y->Z인 관계가 있다면 X->Z도 성립한다고 할 수 있습니다. 이때 Y는 릴레이션의 후보 식별자도 아니고 후보 식별자의 일부도 아닌 일반 속성입니다.

일반 속성(비식별속성)간의 종속 관계를 분해하면 3정규형이 됩니다. 일반 속성 간에는 서로 직접 종속될 수 없으므로 함수 종속 관계가 없어야 합니다. 3정규형의 대상이 되는 속성을 이행 종속 속성이라고 합니다.

 

위의 릴레이션에서 고객ID와 고객명은 주식별자가 아닌데고 종속이 발생하였습니다.

고객ID를 주식별자로 하는 고객엔터티를 생성하고 고객명 속성을 추가하여 3정규형을 수행합니다.

 

 

보이스코드 정규형

모든 BC정규형 릴레이션은 3정규형 릴레이션이지만 3정규형 릴레이션이 모두 BC정규형 릴레이션을 만족하는 것은 아닙니다. BC정규형이 3정규형보다 더욱 엄격하지만 대부분 3정규형 릴레이션은 BC정규형 릴레이션입니다.

BC정규형은 모든 결정자는 주 식별자이어야 합니다.

 

이 릴레이션의 후보 식별자는 학생번호와 과목명을 조합한 속성이거나 학생번호와 교수번호를 조합한 속성이 될 수 있습니다. 두 개의 후보 식별자 둥에 학생번호와 과목명을 주 식별자로 택했으므로 교수번호는 일반 속성이됩니다. 그런데 교수번호의 종속자인 과목명이 주 식별자에 포함되어 있으므로 BC정규형이 어긋나게 됩니다.

일반 속성인 교수번호가 주 식별자에 속한 과목명을 결정하므로 이를 BC정규형으로 만들면 아래와 같습니다.

 

4정규형

4정규형은 다가 종속 개념이 기반이 되는 정규형입니다.

다가종속은 다가속성이 두개 이상 존재할 때 발생할 수 있습니다. 하나의 다가 속성의 모든 값이 다른 다가 속성의 모든 값마다 중복되는 문제점이 발생할 수 있는데 이를 다가 종속이라 합니다.

다가 종속은 하나의 A값에 대응하는 여러 개의 B값이 있고 A값에 대응하는 여러개의 C값이 있으며, B값과 C값 사이에는 아무런 상관관계가 없는데 A,B,C값을 하나의 릴레이션에서 관리할 때 발생합니다. 즉 두개의 독립적인 일대다(1:M)관계의 속성이 동일한 릴레이션에 존재하면 다가 종속이 발생합니다.

 

아래는 다가 종속의 사례입니다. 사원은 여러 기술을 가지고 있으며 구사할 수 있는 언어도 여러개입니다. 그리고 기술과 언어는 아무런 연관관계가 없습니다.

 

4정규화는 다가 종속이 발생한 릴레이션에서 새로운 엔터티를 생성해 다가 종속을 제거하는 것입니다. 기술과 언어 사이에 직접적인 연관이 없고 단지 한 사원에 속해 있어 간접적인 연관관계만이 존재합니다. 즉 어떤 기술이 어떤 언어와 쌍이 되는지는 중요하지 않으므로 아래와같이 두개의 릴레이션으로 분리합니다. 이렇게되면 데이터를 정확하고 효율적으로 관리할 수 있도록 해주며 사용공간도 절약됩니다.

 

5정규형

조인종속개념을 기반으로합니다. 조인종속이 존재하면 5정규화 대상입니다.

만약 하나의 릴레이션을 여러 개의 릴레이션으로 분해한 후 공통(식별자) 속성으로 조인하여 데이터 손실 없이 원래의 릴레이션으로 복원할 수 있으면 이를 무손실 조인이라고 합니다. 그리고 조인한 결과에 원래 릴레이션에 없는 데이터가 존재하지 않으면 이를 비부가적 조인이라고 합니다. 필요한 데이터가 사라지지 않는 무손실 분해가 되고 플요 없는 데이터가 생기지 않는 비부가적 분해가 된 릴레이션이 5정규형입니다.

 

아래 릴레이션은 조인종속이 존재하는 릴레이션입니다. 4정규형의 릴레이션과 유사하지만 다른점은 기술과 언어가 연관성이 있다는 점입니다. 사원이 기술과 연관성이 있고 또한 사원이 언어와 연관성이 있으므로 세 속성 사이에는 연관성이 존재합니다.

 

위의 릴레이션은 아래와 같이 분해될 수 있습니다. 아래의 3개의 릴레이션으로 분해하고 나서 조인하면 다시 위의 릴레이션으로 돌아갈 수 있으므로 분해하기 전의 릴레이션은 5정규형을 위반한 릴레이션입니다.

 

 

4정규형과 5정규형은 유사합니다. 4정규형은 기술과 언어가 서로 연관되지 않는다는 요건을 반영해 기술 엔터티와 언어 엔터티의 관계가 없습니다. 반면에 5정규형은 기술과 언어가 연관돼 관계가 존재하므로 C엔터티가 필요합니다.

 

5정규형은 니자치게 이론적이라 실제로 사용하기에는 적합하지는 않지만 알고는 있어야합니다. 

아래는 간략하게 모든 정규화를 정리한 표입니다.

 

반응형

'스터디 > 관계형 데이터 모델링' 카테고리의 다른 글

2 데이터 모델링 기본 개념  (0) 2021.08.17

댓글