정규화란? 테이블이 더 이상 분리할 수 없는 상태로 나누어 가는 것
1. 제1정규형 - 원자값이 아닌 도메인을 분해
- primary key가 존재하고, primary key를 통해 각 집합을 고유하게 식별해야 한다.
- 각 컬럼이 하나의 속성만을 가져야 한다.
- 하나의 컬럼은 같은 종류나 타입의 값을 가져야 한다.
- 각 컬럼이 유일한 이름을 가져야 한다.
2. 제2정규형 - 부분 함수 종속성 제거
- primary key가 아닌 컬럼들은 primary key에 의존적이어야 한다.
(primary key가 복합 key일 경우 key의 일부분에 key가 아닌 컬럼들이 의존적이면 안 된다. 복합 key에 해당하는 컬럼에 모두 의존적이어야 한다.)
예를 들어 이벤트 번호+응모 회원 번호로 pk가 있는 경우 응모회원명 컬럼은 응모 회원 번호에만 종속적이라 제 2 정규화 대상이다.
3. 제3정규형 - 이행 함수 종속성 제거
- 엔터티의 일반 속성 간에는 서로 종속적이지 않는다.
예를 들어 회원번호(pk), 회원 등급, 회원 등급명이 같은 테이블에 있는 경우 제3정규형 위반, 회원 등급명은 다른 테이블로 분리 해야 한다.
4. BCNF - BCNF는 강한 제3정규화라고도 하며, 모든 결정자는 항상 후보키가 되도록 릴레이션을 분리 해줘야 한다.
댓글