Download presentation
Presentation is loading. Please wait.
1
데이터 베이스 정규화 정규화의 필요성
2
목차 정규화의 필요성 정규화란? 정규화의 종류
3
정규화의 필요성 속성들 간의 관계 표현 데이터의 종속과 중복 제거 정규화 기억공간 낭비 최소화 및 정보의 품질 향상
새로운 속성 추가시 기존속성과의 관계수정 최소화 기억공간 낭비 최소화 및 정보의 품질 향상 정규화
4
정규화란? 정규화란 다양한 유형의 데이터 값 검사를 통해 데이터 모델을 더 구조화시키고 개선시켜 나가는 절차에 관련된 이론입니다. 정규화가 프로세스를 나타내는 의미라면 정규형은 정규화가 완성된 이후의 엔티티 타입(테이블)을 지칭하는 용어입니다. 정규화를 이해하기 위해서는 이론적인 기반이 되는 함수 종속성을 이해할 필요가 있으며 함수의 종속성(functional dependency)은 데이터들이 어떤 기준 값에 의해 종속되는 현상을 지칭하는 것입니다. 이 때 기준 값을 결정자(determinant)라 하고 종속되는 값을 종속자/의존자(dependent)라고 합니다. 위그림을 보면 사람이라는 엔티티 타입에는 주민등록번호, 이름, 출생지, 호주라는 속성이 존재합니다. 여기에서 이름, 출생지, 호주라는 속성은 주민등록번호 속성에 종속됩니다. 만약 어떤 사람의 주민등록번호가 신고되면 그 사람의 이름, 출생지, 호주가 생성되어 단지 하나의 값만을 가지게 되는데 이를 기호로 표시하면 다음과 같습니다. 주민등록번호 -> (이름, 출생지, 호주) 즉 ‘주민등록번호가 이름, 출생지, 호주를 함수적으로 결정한다’라고 말할 수 있습니다. 실세계의 데이터들은 대부분 이러한 함수 종속성을 가지고 있으며. 함수의 종속성은 데이터가 가지고 있는 근본적인 속성으로 인식되고 있습니다. 정규화의 궁극적인 목적은 반복적인 데이터를 분리하고 각 데이터가 종속된 테이블에 적절하게(프로세스에 의해 데이터의 정합성이 지켜질 수 있어야 함) 배치되도록 하는 것이므로 이 함수의 종속성을 이용하여 정규화 작업을 합니다.
5
정규화의 종류 1차 정규화(복수의 속성 값을 갖는 속성의 분리)
1차 정규화는 복수의 속성 값을 가진 속성을 분리합니다. 즉 테이블 하나의 컬럼에는 여러 개의 데이터 값이 중복되어 나타나지 않아야 한다는 것입니다. 이는 각 속성에 값이 반복 집단이 없는 원자 값으로만 구성되어 있어야 한다는 것을 의미합니다. 1차 정규화 사례 1 ‘한 번의 주문에 여러 개의 제품을 주문한다’는 업무 규칙이 있는데 <그림 1>의 아래와같이 데이터 모델링을 했다고 가정해 봅니다. 아래의 엔티티 타입은 하나의 주문에 여러 개의 제품이 존재하므로 주문번호, 주문일자, 배송요청일자의 동일한 속성 값이 주문한 제품의 수만큼 반복해서 저장될 것입니다. 따라서 오른쪽과 같이 1차 정규화를 적용하여 중복속성 값을 제거합니다. <그림 1>
6
정규화의 종류 2차 정규화(주식별자에 종속적이지 않은 속성의 분리)
1차 정규화를 진행했지만 속성 중에 주식별자에 종속적이지 않고 주식별자를 구성하는 속성의 일부에 종속적인 속성인, 부분종속 속성을 분리하는 것이 2차 정규화입니다. 2차 정규화는 반드시 자신의 테이블을 주식별자를 구성하는 속성이 복합 식별자일 경우에만 대상이 되고 단일 식별자일 경우에는 2차 정규화 대상이 아닙니다. 2차 정규화 사례 여러 개의 속성이 주식별자로 구성되어 있을 때 일반속성 중에서 주식별자에 일부에만 종속적인 속성이 있을 경우 2차 정규화를 적용하여 엔티티 타입을 분리하도록 합니다. <그림 2> <그림 2>은 고객번호에 종속적이지 않은 속성들을 분리하여 고객점포라는 새로운 엔티티 타입을 생성하였습니다.
7
정규화의 종류 3차 정규화(속성에 종속적인 속성 분리)
3차 정규화(third normalization)는 속성에 종속적인 속성을 분리하는 것입니다. 즉 1차 정규화나 2차 정규화를 통해 분리된 테이블에서 속성 중 주 식별자에 의해 종속적인 속성 중에서 다시 속성 간에 종속 관계가 발생되는 경우에 3차 정규화를 진행합니다. 3차 정규화의 대상이 되는 속성들을 이전 종속(transitive dependence) 관계 속성이라고 한다. 이것은 곧 주식별자에 의해 종속적인 속성 중에서 다시 다른 속성을 결정하는 결정자가 존재하여 다른 속성이 이 결정자 속성에 종속적인 관계를 나타낸다. 3차 정규화 실전 적용 결정자 역할을 하는 일반 속성이 존재하고, 결정자 역할 속성에 의존하는 의존자가 존재하는 엔티티 타입은 3차 정규화의 대상이 된다. <그림 3> <그림 3>은 고객 엔티티 타입에 등록카드에 대한 정보가 포함되어 있는 모습이다. 등록카드번호가 결정자 역할을 하고 있고 등록카드사명과 등록카드유효일자가 의존자 역할을 하는 속성 간의 종속적인 속성이 발견되었으므로 3차 정규화의 대상이 되는 모델이다. 따라서 등록카드에 대한 내용에 대해 별도의 엔티티 타입을 도출한 오른쪽 모델로 만듬으로서 3차 정규화를 완성하였습니다.
8
정규화의 종류 보이스-코드 정규화 1차 정규화, 2차 정규화, 3차 정규화는 모두 하나의 주식별자를 가졌을 때를 가정하여 진행하였습니다. 만약 하나의 테이블에 여러 개의 식별자가 존재하면 비록 1, 2, 3 정규형을 모두 만족하더라도 데이터를 조작하는 데 문제가 발생될 수 있습니다. 복잡한 식별자 관계에 의해 발생되는 문제를 해결하기 위해 3차 정규화를 보완한 보이스-코드 정규화(boyce-code normalization)를 진행합니다. 보이스-코드 정규화란 테이블에 존재하는 식별자가 여러 개 존재할 경우 식별자가 중복되어 나타나는 현상을 제거하기 위해 정규화 작업을 진행합니다. <그림 4> <그림 4>의 주식별자는 부품번호, 부품이름, 납품번호 세 개의 속성의 구성이 되어 있고 세 개의 속성을 구성한 주식별자는 납품수량, 납품단가에 대해 결정자 역할을 합니다. 그런데 부품번호+납품번호 만으로도 납품수량, 납품단가에 대해 결정자 역할을 할 수도 있고 부품이름+납품번호 만으로도 납품수량, 납품단가에 대해 결정자 역할을 할 수 있으며 부품번호와 부품이름은 상호간에 결정자역할을 하는 특성을 가지고 있습니다. 이러한 성격을 이용하여 데이터 모델에서는 최소의 속성의 조합이 주식별자를 갖게 하도록 BCNF(Boyce Codd Normal Form)를 적용합니다. 즉, 부품번호를 주식별자로 하여 하여 부품을 구성하거나 부품이름을 주식별자로 하여 부품 엔티티 타입을 분리하여 납품과 관계를 갖게 하는 형식으로 정규화를 진행하는 방식이 바로 보이스-코드 정규화 방법이 됩니다.
9
정규화의 종류 4차 정규화(특정 속성 값에 따라 선택적인 속성의 분리)
하나의 테이블에 두 개 이상의 독립적인 다가속성(multi-valued attribute)이 존재하는 경우에 다가종속(multi-valued dependency)이 발생되어 문제가 생깁니다. 다가종속이라는 단어를 해석하면, 하나의 속성 값에 두 개의 이상의 의미를 가지는 값을 가지는 것을 의미합니다. 4차 정규화의 대상이 되는 경우는 실제 프로젝트에서는 독립적인 엔티티 타입을 설계할 때 발생하기 보다는 동시에 여러 개의 엔티티 타입과의 관계에서 발생되는 경우가 많이 있습니다. <그림 5> <그림 5>과 같은 업무 규칙이 있습니다. ‘한 명의 사원은 여러 개의 프로젝트를 지원할 수 있다’ 그리고 ‘한 명의 사원은 여러 개의 기술을 보유할 수 있다’ 즉 사원과 프로젝트, 사원과 기술 간의 업무적인 관계의 규칙이 있는 경우입니다. 이 업무 규칙은 보유하는 기술이 있다는 사실을 관리하고 보유한 기술은 지원한 프로젝트와는 아무런 상관이 없다는 것이 특징이다. 그럼에도 불구하고 <그림 5>의 왼쪽처럼 사원과 프로젝트와 기술 간의 관계를 모두 연결하면 4차 정규화의 규칙을 위배하여 어떤 사원이 새로운 기술을 습득하여 사원내역 엔티티 타입에 등록하려고 하면 마치 금방 습득한 기술을 가지고 어떤 프로젝트를 지원한 것처럼 값을 채워줘야만 하는 현상에 빠지게 된다. 따라서 필요하지 않은 조인 관계를 해소하기 위해 오른쪽 모델과 같이 업무 규칙에 적합하게 관계를 분리하는 방법이 4차 정규화입니다.
10
정규화의 종류 5차 정규화(제4정규형을 일반화한 것) 제4정규형이고 관계 중에서 성립되는 모든 결합 종속성이 그 관계의 후보 키만으로 논리적으로 함축되어 있는 경우에 그 관계를 제5정규형이라고 하며 다치 종속 개념을 사용하지 않고 다음과 같이 정의하기도 합니다. 어떤 관계가 제3정규형의 관계이고 모든 키가 단일 속성으로 구성되어 있는 경우에 그것을 제5정규형이라고 합니다 반정규화(역정규화) 정규화된 엔티티 타입, 속성, 관계에 대해 시스템의 성능향상과 개발(development)과 운영(maintenance)의 단순화를 위해 데이터모델을 조정하는 프로세스를 의미합니다. 단순하게 정규화 규칙에 반대되는 개념으로만 생각한다면 속성의 중복 정도가 반정규화의 범위에 해당되지만 물리적인 성능을 고려한 반정규화의 개념으로 생각한다면 테이블 통합/분리, 속성 중복, 속성 추가, 관계 중복 등이 반정규화의 범위에 해당됩니다. 성능향상을 위해 반정규화를 적용할 경우 반드시 중요하게 고려해야 할 점은 데이터의 무결성 유지입니다. 성능을 중요하게 여겨 여러 테이블에 속성들을 반정규화하는 경우가 많은데 반정규화를 많이 할수록 데이터의 무결성은 깨져 이상한 데이터가 많이 남아있거나 돈의 액수가 맞지 않거나 등록된 접수 건수가 맞지 않은 현상이 시스템을 운영하는 중에 점점 많이 발생하게 되어 나중에는 시스템을 사용하지 못하게 되는 경우가 발생될 수 있기에 데이터 무결성을 중요하게 생각하고 반정규화를 적용할 필요가 있습니다.
Similar presentations