정규화(Normalizition)

이윤근·2021년 8월 1일
0

정규화(Normalizition)

데이터베이스 설계에 따라 데이터가 어떻게 저장될 지 그 구조가 결정한다.

1)정규화 하는 이유

(1)데이터 중복(Data Redundancy)

:실제 데이터의 동일한 복사본이나,부분적인 복사본을 뜻한다.
이러한 중복으로 데이터를 복구할 때에 더 수월할 수도 있지만 일관된 자료 처리의 어려움,저장공간낭비,데이터 효율서 감소와 같은 문제점을 가진다.

(2)데이터 무결성(Data intergrity)

:데이터의 수명 주기 동안 정확성과 일관성을 유지하는 것을 뜻한다. 데이터가 오염되지 않고 입력된 그대로 데이터를 사용할 수 있다.

(3)이상현상(Anomaly)

:데이터의 다른,이상현상

-update anomaly

:갱신이상은 여러 행에 걸쳐 동일한 데이터가 있을 때 어 떤 행을 갱신해야하는지 논리적인 일관성이 없는 경우 발생한다.
예를들어 아이디 값이 똑같이 것이 2개 있다라면 어떤 것을 갱신해야할지 구분이 안되는 상황이 놓인다.

-insertion anomaly

:삽입 이상은 데이터를 삽입하지 못하는 경우를 가르킨다. 꼭 필요한 데이터에 값이 없어 삽입을 하지 못하는 상황을 이야기한다.
예를들어 담당수업이 있어야만 테이블에 추가할수 있는데 그 값이없어 이상현상이 발생한다

-deletion anomaly

삭제이상은 데이터의 특정 부분을 지울 때 의도치 않게 다른 부분도 함께 지우는 이상현상이다.
예를들어 한 직원이 담당하는 수업을 삭제하려고한다. 그러나 이 수업 데이터를 삭제하려면 레코드 전체가 삭제된다.
결국 의도치 않게 직원의 다른 데이터도 함께 삭제하는 현상이 발생한다

2)제1 정규화

:테이블의 컬럼이 원자값(하나의 값)을 갖도록 테이블을 분해하는 것

3)제2 정규화
:제 1정규화를 진행한 테이블에 대해 완전함수 종속을 만족하도록 테이블을 분해하는 것이다.

*완전함수족속:기본키의 부분집합이 결정자가 되어서 안된다는 것

위에 테이블은 기본키가 (학생번호,강좌이름)으로 복합키이다. 그리고 이 기본키는 강의실을 결장하고 있다.그러나 강의실이라는 column은 기본키의 부분집합인 강좌이름에 의해 결정될 수 있다.(강좌이름) -> (강의실) 그렇기 때문에 위의 테이블 의 경우 다음과 같이 기존의 테이블에서 강의실을 분해하여 별도의 테이블로 관리하여 제2정규형을 만족할 수 있다.

4)제3 정규화

:제2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것

*이행적 족속: A->B,B->C 와같이 성립되는 것을 의미함

기존의 테이블에서 학생 번호는 강좌이름을 결정 하고 있고, 강좌 이름은 수강료를 결정하고 있다.그렇기 때문에 이를 (학생번호,강좌이름) 테이블과 (강좌이름,수강료) 테이블로 분해해야 한다. 이행적 종속을 제거해야하는 이유는 한 필드에 강좌이름의 컬럼을 제거하고 스포츠 경영학이라는 강좌로 변경한다면 수강료는 변경하지 않았기 때문에 15000원이아니라 20000원을 내게 된다. 물론 같이 변경할 수 있지만 이러한 번거러움을 제거하기위해 제3 정규화를 하는 것이다.

5)BCNF 정규화

:제 3정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해하는 것

특강 수강 테이블에서 기본키는(학생번호,특강이름)이다. 그리고 기본키는(학생번호,특강이름)는 교수를 정하고 있다. 또한 교수는 특강이름을 결정하고 있다.
그런데 문제는 교수가 특강이름을 결정하는 결정자이지만,후보키가 아니라는 점이다. 그렇기 때문에 BCNF 정규화를 만족시키기 위해 테이블을 테이블을 분해해야 한다.

6)4,5,6 정규화

BCNF까지의 정규화를 진행했다면,자동으로 5정규화까지 조건을 만족하는 경우가 많다.
대락적으로 살펴본다면 4정규화 이후에는 '키가아닌 attribute가 존재하는지 여부"에 따라 나뉜다.

-제4정규화

다치종속성(MVD: multiValued Dependency) 을 제거 (폭넓게 결합 종속석을 제거하는 것)
예를들어 A,B,C,X의 attribute로 구성된 relation이 있을떄 {A,B,C}를 후보키라 가정하자.
X값을 알고 싶다면 후보키 {A,B,C}가 필요하며,이는 함수 종속이다.
BCNF이면 함수 종속을 해결한 상태이므로 4NF 이상의 장규형을 진행할 필요가 없게 된다.

-제5정규화

결합 종속성을 제거하는 과정
-릴레이션에 애트리뷰터 A,B,C가 있을 떄 {A,B},{B,C},{A,C} 애트리뷰트 조합을 갖는 릴레이션으로 분해될 수 있을 때, 이러한 결합 종속을 제거하는 것

-제6정규화

모든 관계가 후보키와 하나 이상의 다른 속성으로 구성됨
-직교성에 있어 유용하지만 릴레이션이 너무많이 생겨 join을 많이 하게 된다는 단점이 있다.

profile
성실한코딩러

0개의 댓글