[CS] 10. DB 정규화

정규화

한 릴레이션에 여러 엔티티의 속성들이 존재하면 정보가 중복 저장되게 된다. 데이터가 중복 저장되면 저장 공간이 낭비되는 것은 물론, 갱신 이상도 발생하게 된다. 갱신 이상은 크게 삽입 이상, 삭제 이상, 수정 이상으로 나뉘는데, 삽입 이상은 불필요한 정보를 함께 저장하지 않고는 어떠한 정보를 저장하는 것이 불가능하다는 것이며, 삭제 이상은 유용한 정보를 삭제하지 않고는 정보를 삭제하는 것이 불가능하다는 것이다. 마지막으로 수정 이상은 반복된 데이터 중 일부만 수정하면 데이터 불일치가 발생한다는 것이다.

 

이러한 문제를 해결하기 위해 RDB를 설계할 때 중복과 갱신 이상을 최소화하고 데이터의 일관성을 유지하기 위해 테이블을 분해하고, 데이터를 구조화하는 작업을 한다. 이를 정규화라고 한다.

 

정규화 장점 정규화 단점
데이터 구조의 안정성 유지

중복 값과 null값이 줄어든다

이상 현상 제거

저장 공간 최소화

유지 보수가 용이
릴레이션 분해로 인해 릴레이션 간의

join이 많아져 연산량이 늘어날 수 있다.

 

RDB의 경우 6개의 정규형이 존재하고, 보다 높은 정규형 단계를 적용할 수록 데이터의 중복이 줄어들고 데이터의 일관성이 보다 강화된다. 그러나 과도한 정규화는 성능 저하를 유발할 수 있기 때문에 적절한 정규화 수준을 유지하는 것이 중요하다.

 

정규화가 진행되면 기존 릴레이션이 분해된다. 분해된 릴레이션은 무손실 join(무손실 join : 분해된 릴레이션을 다시 join하면 원래의 데이터가 동일하게 나오는 것을 의미한다.)을 보장해야 한다. 또한 함수적 종속성(어떤 속성 X가 Y의 값을 유일하게 결정한다면 Y가 함수에 함수적으로 종속)을 보존하여야 한다.

 

완전 함수적 종속성

완전 함수적 종속성이란, 어떤 속성이 기본키에 대해 완전히 종속적일 때를 말한다. 즉, 어떤 릴레이션에서 주요 속성들의 조합이 유일하게 다른 속성을 결정하는 것을 말한다. 릴레이션에서 주요 속성의 일부가 변경되면 그 속성들의 조합으로만 특정되는 나머지 속성이 함께 변경되는 것을 의미한다!

 

예를 들어 학번과 과목명을 조합하여 학점을 결정할 수 있다고 가정해보자. 관계를 그림으로 표현하면 다음과 같으며,

완전 함수적 종속성

학번과 과목명은 학점에 대해 완전 함수적 종속성을 가진다고 할 수 있다. 완전 함수적 종속성은 데이터의 중복을 방지하고, 데이터 무결성을 유지하는 데 중요한 역할을 한다.

 

부분 함수성 종속성

부분 함수성 종속성이란, 릴레이션에서 하나의 속성이 릴레이션의 후보키에 대해 완전 함수적 종속성을 만족하지 않고 다른 속성에도 종속되는 경우, 이를 부분 함수적 종속성이라고 한다.

 

부분 함수성 종속성

위의 그림에서 학점 속성이 학번과 교수명에 대해 완전 함수적 종속성을 만족하지 않고 교수명에도 종속되므로 부분 함수적 종속성을 나타낸다는 것을 알 수 있다. 부분 함수적 종속성은 데이터의 무결성을 보장하기 어려워 중복 데이터를 만들고 데이터 불일치 문제를 야기할 수 있다. 이를 최소화하기 위해 데이터 분석과 정규화 과정을 거치고, 릴레이션을 적절히 설계할 필요가 있다.

 

이행 함수적 종속성

관계에서 X,Y,Z라는 3개의 속성이 있을 때, X->Y, Y->Z이란 종속 관계가 있다면 X->Z도 성립하는 것을 의미한다.

이행 함수적 종속성

예를 들어서, 학과명 속성이 학생번호에 대해 직접 종속되고 학년 속성이 학과명에 직접 종속된다면, 이는 이행 함수적 종속성을 나타낸다. 이행 함수적 종속성도 데이터의 무결성을 보장하기 어렵게 만들기 때문에, 중복 데이터를 만들어내고 데이터 불일치를 야기할 수 있다. 따라서 DB 설계시 이행 함수적 종속성이 최소가 되도록 해야 한다.

 

정규화 과정

제1 정규형

릴레이션의 모든 속성이 원자값을 갖는다는 특징을 가진다. 이는 반복 그룹이 나타나지 않아야 함을 의미한다. 즉, 하나의 속성값이 복수형을 가지면 안 된다는 소리와 같다. 하나의 속성에는 하나의 값만 들어가야 한다!

제1 정규형은 모든 릴레이션(Relation)이 각 열(Column)이 하나의 값만 가지는 것을 목표로 한다.

위 표는 Order ID가 중복되기 때문에 제1정규형을 만족하지 않는다.

 

변형된 표. 제1 정규형을 만족한다.

제2 정규형

릴레이션이 제1 정규형을 만족하면서 기본키가 아닌 모든 컬럼이 기본키에 완전 함수 종속되도록 릴레이션을 분해해야 함을 의미한다. 즉, 테이블에서 부분 함수적 종속성을 제거한 것을 의미한다. 기본키가 두 개 이상의 애트리뷰트로 구성되었을 경우에만 제2 정규형을 만족하는가를 고려할 필요가 있다.

국어, 영어, 국사 성적이 학번에 대해 부분적으로 함수적 종속
제2정규형 만족

 

제3 정규형

릴레이션이 제2 정규형을 만족하고, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속되지 않도록 릴레이션을 분해함을 의미한다. 즉, 다른 속성에 종속하는 속성을 따로 분리하는 것을 의미한다. 분리 후 join으로 데이터를 관리한다.

교수 전화번호와 교수 이메일이 비주요 속성에 종속되고 종속이 후보키인 학번을 통해 이루어지므로 제3 정규형 불만족
제3 정규형 만족하도록 테이블 분리

 

➕그 외 정규형

더보기

제4 정규형

테이블 내에 존재하는 다중값 종속 관계를 제거하기 위해 테이블을 분해하는 것을 의미한다. 다중값 종속 관계란 테이블의 특정 속성 값이 여러 개의 다른 속성 값에 종속되는 현상 의미

제5 정규형

JOIN을 사용하지 않고 함수성 종속성을 보장하기 위해 테이블을 분해하는 것을 의미한다.

 

제6 정규형

다중값 종속을 제거하기 위해 테이블을 분해하는 것을 의미한다. 다중값 종속이란 테이블의 한 속성이 다른 속성 집합에 종속되어 여러 개의 값이 중복 저장되는 것을 의미한다.

 

 


Reference

https://www.youtube.com/watch?v=DHyYQod48pk 

https://gyoogle.dev/blog/computer-science/data-base/Normalization.html

'CS' 카테고리의 다른 글

[CS] 12. 객체지향, 절차지향, 함수형 프로그래밍  (0) 2023.04.19
[CS] 11. 선형 자료 구조  (0) 2023.04.13
[CS] 9. 트랜잭션, 쿼리문 정리  (0) 2023.03.30
[CS] 8. RDBMS, NoSQL  (0) 2023.03.21
[CS] 7. 쿠키와 세션  (0) 2023.03.02
TAGS.

Comments