테이블에서 X와 Y를 각각 속성의 부분집합이라고 가정할 때, X의 값에 따라 Y의 값이 달라지는 경우 → Y는 X에 대해서 함수적 종속 관계를 가진다
X = 결정자 / Y = 종속자
결정자 = 주민번호 / 종속자 = 이름+성별+주소
함수적 종속성은 데이터가 가지고 있는 속성 간의 관계에 의해 결정되고 종속되는 현상
정규화는 함수적 종속성에 근거한다
종류
완전 함수 종속성 : 식별자의 전체 속성이 일반 속성을 결정하는 형태
부분 함수 종속성 : 복합 식별자의 부분적인 속성이 일반 속성을 결정하는 형태
이행 함수 종속성 : 식별자가 아닌 일반 속성이 다른 일반 속성을 결정하는 형태 / 하나의 테이블에 존재하는 X,Y,Z 속성이 X→Y, Y→Z 의 함수적 종속이 성립하는데, X→Z 관계가 성립하는 경우
결정자 함수 종속성 : 후보키가 아닌 결정자가 존재하는 상태
정규화 단계
제1정규화→ 한 개의 속성에 2개 이상의 값이 들어간 경우 분해 / ex) 책을 구매하는데 한명이 책을 2개 주문해서 구매 도서 2개, 주문 번호 2개 인 경우 → 주문 번호를 식별자로 해서 2개의 행으로 분해하기
테이블 내의 속성의 원자성을 확보하는 단계
기본키(PK)를 설정
제2정규화→ 여러 속성이 있는데, 이 중 복합식별자(2개 이상의 속성으로 식별자를 만든것)가 있는데 이 복합식별자 내부의 한 속성은 다른 일반 속성을 결정하고, 복합식별자 자체(속성 집합)은 또 다른 속성을 결정하는 경우(부분 함수적 종속)를 분해 / ex) [학번 과목코드 학생이름 성적] 테이블이 있으면, 복합식별자는 학번+과목코드! 그런데 이 안에서 학번은 학생이름을 결정하고, 복합식별자는 성적을 결정한다 → [학번 학생이름] [학번 과목코드 성적] 테이블 2개로 분해하기
기본키가 2개 이상의 속성으로 이루어진 경우, 부분 함수 종속성을 제거(분해)
일반 속성은 모두 완전히 함수적 종속성 관계
제3정규화→ 주식별자를 제외한 칼럼 간의 종속성인 이행함수 종속성을 제거하는 과정 / ex) [학번 지도교수 학과] 테이블이 있으면, 학번에 따라 지도교수가 달라지고 학번에 따라 학과가 달라지므로 주식별자는 학번! 즉 지도교수는 학번에 의해 결정되는 종속자인데, 지도교수가 달라지면 학과가 달라진다 = 이행함수 종속성 → [학번 지도교수] [지도교수 학과] 테이블 2개로 분해하기
기본키를 제외한 컬럼 간에 종속성을 제거
이행 함수 종속성 제거
기본키와 무관한 정규화 단계
BCNF(Boyce-Codd Normal Form)
기본키를 제외하고 후보키가 있는 경우, 후보키가 기본키를 종속시키면 분해
결정자 함수 종속성을 제거
강한 제3정규화
제4정규화
여러 컬럼들이 하나의 컬럼을 종속시키는 경우 분해하여 다중값 종속성을 제거
제5정규화
조인에 의해서 종속성이 발생되는 경우 분해
3. 정규화 고려사항
모든 정규화는 이전 정규화를 만족해야 한다
정규화를 하면 삽입, 삭제, 갱신 이상은 제거되지만 테이블이 여러개로 분해되어서 데이터를 조회할 때 조인 발생 가능성이 높아져 조회 성능이 저하될 수 있다
단일 테이블 조회 시, 데이터 중복 제거로 오히려 조회 성능이 향상될 수도 있다
정규화로 인해 조인이 증가하는 경우 I/O 증가와 조인 연산으로 데이터 조회 성능 저하 가능
4. 반정규화의 개념
반정규화는 데이터베이스의 성능 향상을 위해 데이터 중복을 허용하고 조인을 줄이는 데이터베이스 성능 향상 방법