데이터베이스 정규화 1NF ~ 3NF

라코마코·2021년 2월 11일
0

데이터베이스

목록 보기
3/3

이 글은 데이터베이스 정규화를 공부하고 내 맘대로 정리한 글이다. 보통 현업에선 3NF 까지 정규화를 진행한다고 하여서 우선은 3NF까지 정리한다. 추후 BCNF를 업데이트 한후 여유가 된다면 6NF까지 진행할 생각이다.

1NF

각 테이블의 도메인 값은 원자적으로 이루어져야한다.

bad Case

학번이름학과학년과동아리
1김추추컴퓨터공학과3에니악,해커킹
1김추추문헌정보학과3책벌레
2김다루기계공학과2메카니즘,유체산책
3김설화전자공학과4쇼크
4김기추전기공학과1쇼크

위 테이블에서 1번 김추추의 과동아리 도메인의 값이 에니악,해커킹이다.

이 에니악,해커킹은 쉼표를 기준으로 2개의 의미있는 값으로 쪼갤 수 있음으로 도메인 값이 원자적이지 않다고 볼 수 있다.

1NF을 만족시키기 위해선 아래와 같이 도메인 값을 원자적으로 이루어질 때 까지 쪼개여야한다.

1NF을 만족한 테이블

학번이름학과학년과동아리
1김추추컴퓨터공학과3에니악
1김추추컴퓨터공학과3해커킹
1김추추문헌정보학과3책벌레
2김다루기계공학과2메카니즘
2김다루기계공학과2유체산책
3김설화전자공학과4쇼크
4김기추전기공학과1쇼크

1NF의 문제점

1NF에서는 삽입 이상, 갱신 이상, 삭제 이상 문제점이 여전히 남아있다는 문제점을 가지고 있다.

2NF

테이블내 속성들이 기본키에 대해서 완전 함수적 종속을 이루어야한다.

학번이름학과학년과동아리
1김추추컴퓨터공학과3에니악
1김추추컴퓨터공학과3해커킹
1김추추문헌정보학과3책벌레
2김다루기계공학과2메카니즘
2김다루기계공학과2유체산책
3김설화전자공학과4쇼크
4김기추전기공학과1쇼크

위 테이블의 경우 기본키는 <학번,과동아리> 조합이 기본키이다.

이제 기본키을 통해서 함수적 종속성을 한번 축출해보자

<학번,과동아리> -> 이름
<학번,과동아리> -> 학년
<학번,과동아리> -> 학과
<학번> -> 이름
<학번> -> 학년
<과동아리> -> 학과

와 같은 함수적 종속성을 찾을 수 있다.

이제 테이블을 완전 함수적 종속을 만족시키기 위해 테이블을 분리해야한다.

학생 테이블

학번이름학년
1김추추3
2김다루2
3김설화4
4김기추1

동아리 테이블

과동아리학과
에니악컴퓨터공학과
해커킹컴퓨터공학과
책벌레문헌정보학과
메카니즘기계공학과
쇼크전자공학과

학생 동아리 테이블

학번과동아리
1에니악
1해커킹
1책벌레
2메카니즘
2유체산책
3쇼크
4김기추

3NF

기본키가 아닌 모든 속성이 이행적 함수 종속을 이루지 않아야 한다.

X,Y,Z 에 대해
X->Y
Y->Z 이면
X->Z 가 성립된다.

이행적 종속은 삼단논법과 비슷하다.

X->Y->Z 가 성립할경우 이를

[X,Y] | [Y,Z] 테이블로 분리하여 이행적 함수 종속을 없애는 것을 3NF라고 부른다.

위 테이블에서는 학생테이블에 3NF를 적용할 수 있다.

(학번)->이름
(이름)->학년
(학번)->학년 이  성립한다.

학번

학번이름
1김추추
2김다루
3김설화
4김기추

학생

이름학년
김추추3
김다루2
김설화4
김기추1

예제가 조금 이상하여 현실성이 떨어진 정규화였지만 3NF을 적용할 수 있었다.

0개의 댓글