정규화.. 에 대해 알아보기에 앞서 알아두어야 할 개념이 있다.
정규화를 하기 위해서는 먼저 테이블을 분석하여 기본키와 함수 종속성에 대해 파악해야한다.
또한, 함수 종속성을 파악하기 위해서는 우선 기본키를 찾아야 한다.
이번 포스팅에서는 "함수 종속성과 기본키" 에 대해 알아보도록 하자.
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
📕데이터베이스 이론과 실습
'DataBase > 개념' 카테고리의 다른 글
select 문 실행순서와 처리 과정 (0) | 2022.01.24 |
---|---|
[SQL Mapper/iBatis] iBatis 문법정리 / Oracle 쿼리정리 (0) | 2020.10.12 |
SQL Mapper (0) | 2020.10.11 |
잘못 설계된 데이터베이스는 어떻게 수정해야 할까? (3) (feat.정규화) (0) | 2020.07.31 |
잘못 설계된 데이터베이스는 어떻게 수정해야 할까? (1) (feat.이상현상) (0) | 2020.07.28 |