본문 바로가기
DataBase/개념

잘못 설계된 데이터베이스는 어떻게 수정해야 할까? (2) (feat.함수 종속성)

by 깐니 2020. 7. 29.

목차
1. 이상현상
2. 함수 종속성
3. 정규화


정규화.. 에 대해 알아보기에 앞서 알아두어야 할 개념이 있다.
정규화를 하기 위해서는 먼저 테이블을 분석하여 기본키함수 종속성에 대해 파악해야한다.
또한, 함수 종속성을 파악하기 위해서는 우선 기본키를 찾아야 한다.

이번 포스팅에서는 "함수 종속성과 기본키" 에 대해 알아보도록 하자.

 

1.

함수 종속성이 뭐지?

이름에서부터 유추할 수 있듯이, 속성과 속성간의 의존관계를 나타낸다.

예를 들어보자.

학생번호 학생이름 학과 강좌이름 강의실 성적
101 신가은 컴퓨터과학과 데이터베이스 북악621 3.5
102 라영지 컴퓨터과학과 자료구조 북악620 4.0
103 홍영준 공연예술학부 문학과사회 혜인503 3.5
101 신가은 컴퓨터과학과 운영체제 북악606 4.0


위 테이블은 학생정보와 강의정보를 저장한 학생수강성적정보 릴레이션이다.
강좌이름이 '데이터베이스'라면, 강의실은 '북악621' 뿐이다.
반면 학생이름이 '신가은'이라면 강좌이름은 '데이터베이스'도 있고, '운영체제'도 있다.
그렇다면 강의실은 강좌이름만 알면 알 수 있지만, 강좌이름은 학생이름만으로는 바로 알 수 없다.

이처럼 어떤 속성 A를 알면 속성 B의 값이 유일하게 정해지는 의존관계를 다음과 같이 표현한다.
  '속성 B는 속성 A에 종속한다. (dependent)' 
  '속성 A는 속성 B를 결정한다. (determine)'
  'A -> B'
  'A는 B의 결정자이다.'


또한, 함수 종속성을 판단 할 때는 릴레이션의 현재 인스턴스(데이터)만을 가지고 판단하는 것이 아닌, 속성이 갖는 의미로 판단해야한다.

수학적 예를 들어 함수 종속성을 나타낸 설명도 참고해보자.
함수종속성
릴레이션 R과 R에 속하는 속성의 집합 X, Y가 있을 때, X 각각의 값이 Y의 값 한 개와 대응이 될 때 'X는 Y를 함수적으로 결정한다.'
라고 하고, X->Y로 표기한다.
이때 X를 결정자 (determinant)라 하고, Y를 종속 속성 (dependent attribute)라고 한다.
함수 종속성은 보통 릴레이션 설계 때 속성의 의미로부터 정해진다.

 

함수 종속성 규칙

릴레이션 학생수강성적정보 (학생번호, 학생이름, 학과, 강좌이름, 강의실,성적) 를 예를 들어 함수 종속성 규칙에 대해 알아보자.

규칙 예시 설명
부분집합 규칙 (학과,학생이름) -> 학과 학과는 (학과,학생이름)의 부분집합 속성이므로, 성립
증가 규칙 (학생번호, 강좌이름) -> (학생이름, 강좌이름) 학생번호->학생이름 이므로 강좌이름을 추가해도, 성립
이행 규칙 학생번호 -> 학과 학생번호->학생이름, 학생이름->학과 이므로, 성립
(복수전공은 없다고 가정)
결합 규칙 학생번호 -> (학생이름, 학과) 학생번호->학생이름, 학생번호->학과이므로, 성립
분해 규칙 학생번호->학생이름, 학생번호->주소 학생번호->(학생이름,학과)를 분해하여, 성립
유사이행 규칙 (강좌이름,학생이름) -> 성적 학생이름->학생번호, (강좌이름,학생번호)->성적이므로, 성립

 

 

함수 종속성과 기본키

릴레이션의 함수 종속성을 파악하기 위해서는 우선 기본키를 찾아야 한다.

왜?
릴레이션 R (K, A1, A2, A3 ,,, An) 에서 K가 기본키면, K->R이 성립한다.
기본키 값은 유일하기 때문에 값은 값을 갖는 K는 없다.
그러므로 K->A1, K->A2, ,, K->An이 성립한다. 
여기에 함수 종속성 규칙을 적용하면 K->A1A2...An이 성립하므로 K->R임을 알 수 있다.
따라서, 기본키는 릴레이션의 모든 속성에 대해 결정자이다.

 

2.

이상현상을 고쳐보자.

이제껏 봐왔던 학생수강성적정보 릴레이션에는 학생정보 (학생번호, 학생이름, 학과)와 강좌정보 (강좌이름, 강의실)이 한 릴레이션에 모두 포함되어있기 때문에 이상현상이 나타난다.

학생수강성적정보 릴레이션의 함수 종속성 다이어그램은 다음과 같다.

학생수강성적정보 릴레이션

결정자는 ('학생번호', '강좌이름'), '학생번호', '강좌이름'이다.
이상현상은 결정자가 기본키가 아닐 때 발생한다.

학생수강성적정보 릴레이션에서 부분 릴레이션을 분해해보자.

성적 릴레이션
학생 릴레이션
강의실 릴레이션

최종 분해된 릴레이션은 위 그림과 같다. 더 이상 이상현상이 발생하지 않는다.
또한 데이터 간의 관계를 유지하는 공통속성을 가지고 있기 때문에 기존의 학생수강성적 릴레이션 정보를 모두 포함한다는 것을 알 수 있다.

이렇게 이상현상이 발생하는 릴레이션을 분해하여 이상현상을 없애 보았다. 
이를 정규화라고 한다.

다음 포스팅에서는 정규화 과정에 대해 알아보도록 하자.

 

 

Reference
📕데이터베이스 이론과 실습