1NF
제 1정규형
•
속성의 도메인이 오직 원자 값들만 포함되고 튜플의 모든 속성값은 그 속성 도메인에 속하는 하나의 값이어야 한다.
•
제 1 정규형이 허용하는 속성값의 유일한 형태는 원자값이다.
원자값 : 쪼개질 수 없는 단위
제 1정규형으로 정규화
•
기본키가 중복되므로 특정 튜플을 식별하기 어려움
정상적인 분리
기본키와 다치값을 가지고 있는 속성으로 분리(수평적 분리)
→다치값을 수직적으로 분리 (수직적 분리)
2NF
제 2정규형
•
제 1정규형 + 릴레이션 스키마에 있는 비주요 속성이 릴레이션의 기본키에 완전하게 함수적으로 종속되면 릴레이션은 제2정규형을 만족한다.
•
키가 아닌 속성들은 기본키의 부분 함수적으로 종속되서는 안된다.
함수적 종속의 의미 : X→Y 에서 X로부터 임의의 속성을 제거했을 때 함수적 종속이 성립하지 않는 것을 완전 함수적 종속이라고 한다.
X의 값을 알면 Y의 값을 바로 식별할 수 있고, X의값에 Y의 값이 달라지면 Y는 X에 함수적 종속이라고 한다.
이 테이블에서 회원 번호나 게시글 번호를 제거하면 함수적 종속이 성립하지 않는다.
ex) 회원번호 1의 조회 날짜시간이 2030-01-01 00:00 , 2030-01-02 00:00 → 함수적 종속 성립하지 않는다.
제 2정규형으로 정규화
•
부분 함수적종속을 제거하기 위해 함수적 종속 별로 릴레이션을 분리한다.
3NF
제 3정규형
릴레이션의 모든 함수적 종속성 X→Y에 대해서
1.
X가 릴레이션의 슈퍼키이다.
2.
Y가 릴레이션의 주요 속성이다.
3.
둘 중 하나라도 만족하면 제 3정규형을 만족한다.
이행적 종속 : X를 알면 Y를 알고 그를 통해 Z를 알 수 있는 경우
슈퍼키 : 각 행을 유일하게 식별할 수 있는 하나 또는 그 이상의 속성들의 집합, 유일성 만족 유일성 : 하나의 키로 특정 행을 찾아낼수 있는 고유한 데이터 속성.
X가 릴레이션의 슈퍼키 , Y가 릴레이션의 주요 속성
회원 번호 → 아이디 (함수적 종속)
회원 번호 , 아이디 → 릴레이션의 슈퍼키
•
회원 번호에 작성자 이름과 작성자 성별이 이행적 종속되지만 슈퍼키가 아니다.
게시글 번호 → 회원 번호
회원 번호 → 작성자 이름
회원 번호 → 작성자 성별
BCNF (Boyce-Codd Normal Form)
•
제 3 정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해하는 것.
(회원 번호 , 과목 이름)이 기본키로 강사번호를 알 수 있다. 하지만 강사번호를 알면 강사가 어떤 과목을 가르치는지 알 수 있으므로 강사 번호 → 과목 이름이 성립한다.
(후보키 집합이 아닌 컬럼이 결정자가 되어버린 상황)
릴레이션 분할 후 두 릴레이션을 조인했을 때 튜플 내용이 손실되지 않고 가짜 튜플도 만들어지지 않도록 하는 릴레이션 찾기.
•
FD3을 기준으로 릴레이션을 분리하면 Case 1 , Case2 두개의 테이블 생성
(R1 ∩ R2) → (R1 -R2) 또는 (R1 ∩ R2) → (R2 -R1)를 만족하는 릴레이션을 찾는다
R1 ∩ R2 : 과목 이름
R1 -R2 : 강사 번호
R2 -R1 : 회원 번호
과목 이름 → 강사 번호
데이터베이스 → A0002 ,A0003
함수적 종속성 성립 X
과목 이름 → 회원 번호
네트워크 →1 , 4
함수적 종속성 성립 X
(R1 ∩ R2) → (R1 -R2) 또는 (R1 ∩ R2) → (R2 -R1)를 만족하는 릴레이션을 찾는다
R1 ∩ R2 : 강사 번호
R1 -R2 : 과목 이름
R2 -R1 : 회원 번호
강사 번호 → 회원 번호
A0002 → 1 , 3
함수적 종속성 성립 X
강사 번호 → 과목 이름
A0001 → 네트워크
A0002 → 데이터베이스
A0003 → 데이터베이스
A0004 → 프로그래밍
강사 번호가 모두 하나의 고유한 속성을 갖는다.
함수적 종속성 성립 O
★두 릴레이션을 강사 번호 속성을 기준으로 내부 조인하면 분리하기 이전의 튜플이 생성된다.