-
데이터베이스 정규화 알아보기STUDY/Computer Science 2023. 8. 16.
DB 정규화란 (normalization)
데이터 중복과 insertion, update, deletion anomaly를 최소화하기 위해 일련의 normal forms(NF)에 따라 relational DB를 구성하는 과정
정규형(Normal form) 이란?
정규화 되기 위해 준수해야 하는 몇 가지 규칙 들이 있는데 이 각각의 규칙을 normal form(NF) 이라고 부른다.
이 normal form을 가지고 정규화 하는 과정을 알아보자
Init table - 1NF - 2NF - 3NF - BCNF - 4NF - 5NF - 6NF
처음부터 순차적으로 진행하며 normal form을 만족하지 못하면 만족하도록 릴레이션 구조를 조정한다
앞 단계를 만족해야 다음 단계로 진행할 수 있다.
1NF 부터 BCNF 까지를 함수적 종속성(FD ,Functional Dependency)과 key 만으로 정의되는 normal forms 라고 함
정규형이 3NF까지 도달하면 정규화 됐다고 말하는 경우도 있고, 보통 실무에서는 3NF 혹은 BCNF까지만 정규화를 진행시킨다고도 한다.
그래서 이번엔 BCNF 까지 알아보도록 하겠다.
제 1 정규화 (1NF) :
제 1 정규화란, 릴레이션의 컬럼이 원자값으로 구성되어 있는 것이다.
학번 과목코드 성적 501 AAA111, BBB222 A+, B+ 위의 릴레이션은 과목코드와 성적의 값이 여러 개의 값을 가지고 있어서 제 1 정규화를 만족하지 못한다.
모든 속성이 원자 값을 가지려면 다음과 같이 분리되어야 한다.
학번 과목코드 성적 501 AAA111 A+ 501 BBB222 B+ 제 2 정규화 (2NF):
제 2 정규화란, 제 1 정규화에 속하면서, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속된 것이다.
* 완전 함수적 종속이란 ?
A, B가 각각 관계 R의 속성이고 B가 A에 함수 종속(A→B)인 경우, A의 임의의 부분 집합에 대하여 B의 어떤 값도 A의 부분 집합의 값에 대응하지 않으면 B는 A에 완전함수(적) 종속이라고 한다.
여기서 {학번, 과목코드} 가 집합 A, 성적이 집합 B 라고 한다면 성적(A)은 {학번, 과목코드}(B)에 종속되어 있다. 하지만 학번만으로 성적을 결정할 수 없고, 과목코드만으로 성적을 결정지을 수 없기 때문에 A의 부분 집합에는 종속되어 있지 않다.
학번 과목코드 성적 학부 등록금 20800399 CSE011101 A+ 컴퓨터공학부 350 20800399 CSE022202 A 컴퓨터공학부 350 20800399 CSE033303 B+ 컴퓨터공학부 350 21300758 MEC011101 F 경영학부 300 21400001 POD032939 C+ 기계공학부 400 21500399 CSE011101 D 컴퓨터공학부 350 위의 릴레이션은 {학번, 과목코드}가 기본키인 릴레이션이다. 기본키가 아닌 속성으로는 성적, 학부, 등록금이 있는데 이때 성적은 기본키의 부분 함수 종속성(릴레이션에서 기본키가 복합키일 경우 기본키를 구성하는 속성 중 일부에게 종속된 경우를 부분함수 종속이라고 한다.)을 가지지 않지만, 학부와 등록금은 부분 함수 종속성(학번 -> 학부, 학번 -> 등록금)을 가진다.
따라서 부분 함수 종속성을 제거하여 제 2 정규형을 만족하는 릴레이션은 이렇게 나올 수 있다.
학번 학부 등록금 20800399 컴퓨터공학부 350 21300758 경영학부 300 21400001 기계공학부 400 21500399 컴퓨터공학부 350 학번 과목코드 성적 20800399 CSE011101 A+ 20800399 CSE022202 A 20800399 CSE033303 B+ 21300758 MEC011101 F 21400001 POD032939 C+ 21500399 CSE011101 D 제 3 정규화 (3NF):
제3 정규형은 제2 정규형이면서, 이행적 함수 종속성을 제거한 정규형을 말한다.
즉, 기본키에 속하지 않은 모든 속성이 기본키에 이행적 함수 종속이 아닐 때 제3 정규형이라고 한다. 다르게 표현하면, 기본키 이외의 속성이 그 외 다른 속성을 결정할 수 없는 것이다.* 이행적 함수 종속이란 ?
A, B, C가 각각 관계 R에 상호 중복되지 않는 속성(다만, A는 1차 키 이외의 속성)인 경우에, A가 B에 함수 종속적이 아니면 이때 C는 A에 이행함수 종속이라고 한다. 제2정규형(2NF)의 관계에 이행함수 종속성이 있는 경우, 그것을 배제하고 분해한 관계를 제3정규형(3NF)이라고 한다. A->B 이고 B->C 일 경우에만 A->C 이면 이행함수(적) 종속이라고 한다
학번 학부 등록금 20800399 컴퓨터공학부 350 21300758 경영학부 300 위의 릴레이션의 함수 종속성은 학번 -> 학부 , 학부 -> 등록금 이므로 학번 -> 등록금 이 성립된다.
결국 학번에 따라 등록금이 결정되므로 제 3 정규형을 만족하지 않는 릴레이션이다.
만약 이대로 구성을 한다고 했을 때 학부를 컴퓨터공학부에서 경영학부로 전과를 한다면 학부를 변경함에 따라 등록금도 같이 변경해야하는 번거로움을 가진다. 그래서 학번을 통해 학부를 참조하고, 학부를 통해 등록금을 참조하도록 만들어야 한다.
학번 학부 20800399 컴퓨터공학부 21300758 경영학부 학부 등록금 컴퓨터공학부 350 경영학부 300 BCNF 정규화 :
BCNF는 3차 정규화를 조금 더 강화한 버전이다. 이는 3차 정규화에서 해결할 수 없는 이상현상을 해결할 수 있다.
BCNF란 3차 정규화를 만족하면서 모든 결정자가 후보키 집합에 속한 정규형이다.참조 :
https://easy-code-yo.tistory.com/41
https://yaboong.github.io/database/2018/03/09/database-anomaly-and-functional-dependency/https://yaboong.github.io/database/2018/03/09/database-normalization-1/
'STUDY > Computer Science' 카테고리의 다른 글
API란 무엇인가? (0) 2023.08.09 DB Transaction (0) 2023.07.26 시간 복잡도에 관하여 (0) 2023.07.12 디자인 패턴과 프로그래밍 패러다임 (0) 2023.05.19