Part3. 데이터베이스 설계자
Chapter 07. 정규화
이상현상
잘못 설계된 테이블로 삽입, 삭제, 수정 같은 데이터 조작을 하면 이상현상이 일어난다. 이상현상이란 테이브렝 투플을 삽입 할 때 부득이하게 NULL값이 입력되거나, 삭제 시 연쇄삭제 현상이 발생하거나, 수정 시 데이터의 일관성이 훼손되는 현상을 말한다.
이상현상의 예
삭제이상
삭제이상이란 투플 삭제 시 같이 저장된 다른 정보까지 연쇄적으로 삭제되는 현상이다.
-> 연쇄삭제 문제 발생
ex) 장미란 학생이 스포츠 경영학 과목을 수강 취소하여 DELETE문으로 세번째 투플을 삭제하였다. 그런데 삭제 후 장미란 학생의 학생번호, 학과, 주소 정보가 없어졌다. 스포츠경영학 수강을 취소하려 했던 의도는 달성되었지만, 장미란 학생의 기본 정보가 없어진 것이다.
삽입이상
삽입이상이란 투플 삽입 시 특정 속성에 해당하는 값이 없어 NULL값을 입력해야 하는 현상이다.
-> NULL값 문제 발생
EX) 박세리 학생이 체육학과에 입학하여 INSERT문으로 (학생번호, 학생이름, 학과, 주소) 정보를 삽입하였다. 그런데 아직 수강신청은 하지 않은 상태라 (강좌이름, 강의실) 속성에는 NULL값을 입력하였다. 여기서 NULL값은 특별한 값으로 테이블에는 가능 한 없어야 한다.
수정이상
수정이상이란 투플 수정 시 중복으로 저장된 데이터 일부만 수정되어 데이터의 불일치 문제가 일어나는 현상이다.
-> 불일치 (일관성 없음) 문제 발생
EX) 박지성 학생의 주소가 대한민국 서울로 바뀌었다. 보통 UPDATE문으로 주소를 수정할 경우 두 군데 모두 바뀌지만, 만약 한 군데만 바뀐다면 문제가 된다. SELECT문으로 조회 했을 때 서로 다른 주소값이 조회되어 데이터의 일관성이 깨지는 불일치 문제가 발생하기 때문이다.
함수 종속성
함수 종속성의 개념
이상현상이 발생하는 테이블을 수정하여 정상적으로 만드는 과정을 정규화라고 한다. 정규화를 하기 위해서는 먼저 테이블을 분석하여 기본키와 함수 종속성을 파악해야 한다.
릴레이션 R과 R에 속하는 속성의 집합 X,Y가 있을 때, X 각각의 값이 Y의 값 한 개와 대응될 때 'X는 Y를 함수적으로 결정한다'라고 하고 X->Y로 표기한다.
TIP) 릴레이션과 테이블은 같은 의미로 쓰이는 용어지만 릴레이션은 구조를 강조하는 측면이 있고, 테이블은 구조보다는 데이터를 강조하는 측면이 있다. 함수 종속성은 릴레이션 구조에 관한 이론적인 내용을 많이 포함하고 있다.
어떤 속성 A의 값을 알면 다른 속성 B의 값이 유일하게 정해지는 의존 관계를 ‘속성 B는 속성 A에 종속한다.’ 혹은 ‘속성 A는 속성 B를 결정한다’ 라고 한다. 이 관계를 A -> B라고 표기하며, A는 B의 결정자라고 한다.
함수 종속성 다이어그램
함수 종속성을 나타내는 표기법으로 함수 종속성 다이어그램이 있다.
학생 수강성적 릴레이션에서 함수 종속성을 찾아 정리하면 다음과 같다. 한가지 주의 깊게 봐야 할 점은 결정자가 복합 속성일 수 있다는 점이다. 예를 들어 학생번호와 강좌이름을 합하여 보면 성적을 알 수 있다.
학생번호->학생이름 학생번호->학과 학생번호->주소 학과->학과사무실 강좌이름->강의실 (학생번호, 강좌이름)->성적
이를 다이어그램으로 표현하면 아래의 그림과 같다.

함수 종속성과 기본키
릴레이션의 함수 종속성을 파악하기 위해서는 우선 기본키를 찾아야 한다.
함수 종속성과 기본키 릴레이션 R(K, A1, A2, A3…An)에서 K가 기본키이면, K->R이 성립한다. 즉 기본키는 릴레이션의 모든 속성에 대한 결정자이다.
이상현상과 결정자
이상현상은 한 개의 릴레이션에 두 개 이상의 정보가 포함되어 있을 때 나타난다.
EX) 학생수강성적 릴레이션의 경우 학생정보(학생번호, 학생이름, 주소, 학과)와 강좌 정보(강좌이름, 강의실)가 한 릴레이션에 포함되어 있기 때문에 이상현상이 나타난다.
이상현상은 기본키가 아니면서 결정자인 속성(비후보키 결정자 속성)이 있을 때 발생한다.
함수 종속성 예제
다음 릴레이션 R에서 주어진 함수 종속성이 성립하는지 살펴보시오.
| A | B | C |
|---|---|---|
| b | c | h |
| e | i | f |
| g | i | f |
| e | b | a |
[함수 종속성]
- A->B
- B->C
- (B,C)->A
- (A,B)->C
풀이)
- X. e->i, e->b
- o
- x. (i,f)->e, (i,f)->g
- o
정규화
이상현상의 원인은 여러가지가 있는데, 대부분 두 가지 이상의 정보가 한 릴레이션에 저장되어 있으므로 발생한다. 따라서 이상현상은 릴레이션을 분해하여 제거한다. 분해된 릴레이션에 이상현상이 남아 있다면 이상현상이 없어질 때까지 분해한다. 이상현상이 발생하는 릴레이션을 분해하여 이상현상을 없애는 과정을 정규화라고 한다.
제 1 정규형(1NF)
제 1 정규형은 릴레이션의 속성값이 원자값이어야 한다는 조건으로 정의는 다음과 같다. (뭐 여러개면 안된다?)
제 1 정규형 릴레이션 R의 모든 속성값이 원자값을 가지면 제 1 정규형이라고 한다.

제 2 정규형(2NF)
제 2 정규형은 릴레이션의 기본키가 복합키일 때, 복합키의 일부분이 다른 속성의 결정자인지 아닌지를 판단하는 것이다.(완전함수 종속일때!)
제 2 정규형 릴레이션 R이 제 1정규형이고 기본키가 아닌 속성이 기본키에 완전 함수 종속일 때 제 2정규형이라고 한다.
완전 함수 종속 A와 B가 릴레이션 R의 속성이고 A->B 종속성이 성립할 때, B가 A의 속성 전체에 함수 종속하고 부분집합 속성에 함수 종속하지 않을 경우 완전함수 종속이라고 한다.

위 그림은 제 2 정규형을 만족하지 못한다.
성적은 OK, 그러나 강의실은 강좌이름만으로 가능하기 때문.(완전종속 X, 부분종속 O)
제 3 정규형(3NF)
속성들이 이행적으로 종속되어 있는지를 판단하는 것이다. (이행관계를 끊어줘야 한다. 이행관계가 있으면 X)
제 3 정규형 릴레이션 R이 제 2정규형이고 기본키가 아닌 속성이 기본키에 비이행적으로 종속할 때(직접종속) 제 3정규형이라고 한다. 이행적 종속이란 A->B, B->C 가 성립할 대 A->C가 성립되는 함수 종속성을 말한다.

위 그림에서 학생번호->강좌이름, 학생번호->수강료가 되므로 이행관계이다.
BCNF
릴레이션에 존재하는 함수 종속성에서 모든 결정자가 후보키이면 BCNF 정규형이다.
BCNF 정규형 릴레이션 R에서 함수 종속성 X->Y가 성립할 때 모든 결정자 X가 후보키이면 BCNF 정규형이라고 한다.

위 그림이면 안된다.

위의 그림이어야 함,,,
Comments