정규화(normalization)이란 데이터의 중복과 이상을 막기 위해 테이블을 구조화시키는 작업을 의미한다.
제1정규화
<앨범>
*번호 | 타이틀 | 가수이름 | 배급사 | 노래 |
1 | 아이유 5집 | 아이유 | JYP | 좋은날, .... |
2 | 원더걸스 2집 | 원더걸스 | SM | tell me, .... |
3 | 싸이 3집 | 싸이 | SM | 강남스타일, ..... |
'노래'라는 속성은 여러 원자들로 쪼개질 수 있다. 예를 들면 '아이유 5집'이라는 앨범이 있다고 치면, 노래는 하나가 아닌 여러 노래로 구성되기 때문이다. 이 부분에 있어서는 제1정규화를 위반했다고 볼 수 있다.
<앨범>
*앨범번호 | 타이틀 | 가수이름 | 배급사이름 |
1 | 아이유 5집 | 아이유 | JYP |
2 | 원더걸스 2집 | 원더걸스 | SM |
3 | 싸이 3집 | 싸이 | SM |
<노래>
*노래번호 | 타이틀 | 길이(재생길이) | 앨범번호 |
1 | 좋은날 | 5분 | 1 |
2 | tell me | 4분 | 2 |
3 | 강남스타일 | 3분 | 3 |
다음 그림처럼 '노래'라는 속성을 쪼개어서 테이블을 만들게 된다면 제1정규화가 성립된다고 볼 수 있다.
제2정규화
제2정규화가 되기 위해서는 제1정규화가 되는게 전제가 되어야 하고, 키에 속하지 않은 속성 모두가 키에 완전 함수 종속이 되어야 한다. (부분적 종속 관계 배재) 사실 이 말만 들었을 때는 추상적으로 들려 무슨 말인지 이해가 안 가 그림으로 설명하겠다.
<주문 내역>
*주문번호 | *주문품목 | 주문자 주소 |
101 | 절임배추20kg | 충남 천안시 서북구 |
102 | 곶감 | 경기도 의정부시 가능동 |
103 | 무농약사과 | 전주시 덕진구 우아동 |
이 테이블을 보면 각 속성에 있어서 쪼개질 수 없는 원자로 구성되어 있기 때문에 제1정규화(1NF)가 성립된다고 할 수 있다.
여기서 primary key는 '거래번호', '주문품목'이다. primary key가 2개이상으로 졌다면 그것을 합성키라 부른다. 제2정규화가 성립이 될려면 '주문자 주소'(키에 속하지 않는 속성)가 합성키에 대해서 종속이 되어야 한다. 완전 종속이 되는 것을 확인하기 위해서는 각각의 키를 키가 아닌 속성과 비교를 해야 한다.
'주문자 주소'는 '주문 번호'을 통해 알 수 있기 때문에 '주문 품목'은 불필요하다고 할 수 있다. '주문 품목'이 어떤 항목이든 관계없이 주문자 주소는 바뀌지 않기 때문이다. 다시 말해 합성키가 있는데, 그 중에 일부만 종속이 되는 것을 '부분적 종속 관계'라고 한다.
그러면 '부분적 종속 관계'를 제거를 할려면 어떻게 해야 할까?
<주문>
*주문번호 | 주문자 주소 |
101 | 충남 천안시 서북구 |
102 | 경기도 의정부시 가능동 |
103 | 전주시 덕진구 우아동 |
<주문품목>
*주문품목 | *주문번호 |
절임배추20kg | 101 |
곶감 | 102 |
무농약사과 | 103 |
이렇게 테이블을 나누게 되면 <주문> 테이블에서는 '주문자 주소'가 primary key이며 '주문 번호'에 종속되기 때문에 완전 함수 종속이 된다고 말할 수 있다.
제3정규화
제2정규화가 되야 하는 건 물론이고 키가 아닌 속성이 또 다른 키가 아닌 속성에게 종속되지 않도록 해야 한다. 이걸 '이행적 함수 종속'을 없애는 것이라 한다. 다음 예를 들어보자.
<학생>
학번 | 이름 | 주소 | 연락처 | 학과 | 학과 위치 | 학과 사무실 전화번호 |
20122222 | 김철수 | 서울시 마포구 | 011-8888-9887 | 철학과 | 서울시 등등 | 02-1234-6598 |
20126598 | 나영희 | 부산광역시 | 011-5859-4545 | 물리학과 | 서울시 등등 | 031-788-4554 |
여기서 학번은 '이름','주소','연락처','학과' 관계를 나타낼 수 있고, 학과는 '학과 위치', '학과 사무실 전화번호'로 가능하다.
이 때 '이름','주소','연락처','학과'는 학번에 함수적으로 종속적이라고 말할 수 있고, '학과 위치', '학과 사무실 전화번호'는 학과에 함수적으로 종속된다.
이 때 학번 -> 학과 -> 학과 위치 라는 과정이 성립되는 데 학과 위치가 학번에 대해 이행적 함수 종속 관계라 한다.
<학생>
학번 | 이름 | 주소 | 연락처 | 학과 |
20122222 | 김철수 | 서울시 마포구 | 011-8888-9887 | 철학과 |
20126598 | 나영희 | 부산광역시 | 011-5859-4545 | 물리학과 |
<학과>
학과 | 학과 위치 | 학과 사무실 전화번호 |
철학과 | 서울시 등등 | 02-1234-6598 |
물리학과 | 서울시 등등 | 031-788-4554 |
제3정규화가 되기 위해서는 '학과'라는 기준점을 잡고 테이블을 나누면 3NF을 만족할 수 있게 된다.
'Database' 카테고리의 다른 글
데이터베이스 인덱싱의 이해: 인덱스의 장단점 깊게 알아보기 (0) | 2023.07.10 |
---|---|
mysql에서 백업 후 다른 곳으로 옮기기(mysqldump) (0) | 2018.10.05 |
mysql 컴파일 설치 (0) | 2018.09.30 |
커넥션 풀(Connection pool) (0) | 2018.03.14 |