완전 함수 종속성(Full Functional Dependency)

위 테이블에서, '성적' Y는 {학생ID, 과목ID}의 조합 X에 의해 결정된다
부분함수 종속성(Partial Functional Dependency)
이행 함수 종속성(Transitive Functional Dependency)
(학번(기본키) / 지도교수 / 학과) 의 관계
학번이 지도교수를 지도교수가 학과를 결정한다.
대부분의 릴레이션에서는 BCNF까지 정규화하면 실제적인 이상현상이 없어지기 때문에 정규형은(1,2,3,BCNF)까지만 다룹니다
정규화 : 테이블의 속성들이 상호 종속적인 관계를 갖는 특성을 이용하여 테이블을 무손실 분해 하는 과정이다 (정규화란 행위 자체의 의미)
무손실 분해 : 원래대로 복원할 수 있는 분해
- 가능한 한 중복을 제거하여 삽입, 삭제, 갱신 이상의 발생 가능성을 줄이는 것이다
그렇다면 이상 현상은 무엇일까?
이상(Anomaly)
이상이란 테이블에서 일부 속성들의 종속으로 인해 데이터의 중복이 발생
이 중복으로 인해 테이블 조작 시 문제가 발생하는 현상을 의미한다,

삽입 이상
테이블에 데이터를 삽입할 때, 의도와는 상관 없이 원하지 않는 값들로 인해 삽입할 수 없게 되는 현상
(의도적으로 테이블 기본키 - 고객아이디,이벤트번호 에 null값을 넣었다)
이벤트가 끝난 이후 회원을 가입시키려면 기본키인 이벤트 번호에 넣을 수 있는 값이 없어서 고객을 테이블에 삽입 (등록) 시킬 수 없다
삭제 이상
테이블에서 한 튜플(행)을 삭제할 때 의도와는 상관없는 값들도 함께 삭제되는 즉, 연쇄 삭제가 발생하는 현상이다
고객 중 아무 한명이나 이벤트 기록만 삭제한다고 가정하면 이 테이블에서는
이벤트 관련 데이터만 삭제할 수 없다.
갱신 이상
테이블에서 튜플에 있는 속성 값을 갱신할 때 일부 튜플(행)의 정보만이 갱신되어 정보에 불일치성이 생기는 현상이다
001의 이벤트 번호 E010 행에서 등급이 gold로 변경됐다면 첫번째 두번째 행과 등급 정보에 불일치성이 생긴다
제 1 정규형
도메인이 원자값
모든 속성이 원자값(하나의 값)을 갖도록 한다
제 2 정규화
부분 함수 종속성 제거
제 1 정규형을 진행한 테이블을 완전 함수 종속을 만족하도록 테이블을 분해하는 것이다. == 기본키의 부분집합이 결정자가 되어서는 안 된다.
(제 1정규형 이후 각 속성들이 완전 함수 종속성을 갖도록 릴레이션을 분리한다)
안 한다고 가정 할 경우 어떤 문제가 생길까?
- 이상 현상 설명을 위해 사용했던 단일 테이블에서 고객아이디 001인 고객의 등급이 이벤트번호 E010에서 등급이 변경된 것을 볼 수 있다.
등급의 변경이 생겼을 때, 갱신이상이 생겨 정보의 불일치성이 생길 수 있다 또한 위에서 설명했던 삽입 이상의 문제 또한 생길 수 있다
삭제 이상도 동일
제 3 정규형
이행 함수 종속성을 제거
제 2 정규형을 만족하고, 테이블에 대해 이행적 종속을 없애도록 릴레이션을 분해하는 것이다.
안 한다고 가정 할 경우 어떤 문제가 생길까?
- 할인율을 변경할 일이 생긴다면 일일이 수정해줘야 한다.(갱신 이상 발생 될 수 있음)
BCNF 정규형
(기존 테이블에서) 결정자이면서 후보키가 아닌 것 제거
제 3정규형을 만족하고, 모든 결정자가 후보키인 정규형
즉, 모든 결정자가 후보키가 되도록 테이블을 분리해야 한다
안 한다고 가정 할 경우 어떤 문제가 생길까?