정규화란 ?
정규화는 데이터베이스 설계에서 중복을 최소화하고 데이터 무결성을 보장하기 위한 과정입니다.
- 제 1 정규형(1NF)
- 모든 속성의 값은 원자값이어야 한다.
- 반복되는 그룹은 없어야 한다.
- 제 2 정규형(2NF)
- 1NF를 만족해야 한다.
- 부분 함수성 종속성을 제거한다.
- 제 3 정규형(3NF)
- 2NF를 만족해야 한다.
- 이행적 함수 종속성을 제거한다.
- BCNF(Boyce-Codd Normal Form)
- 3NF를 만족해야 한다.
- 모든 결정자가 후보키여야 한다.
- 제 4 정규형(4NF)
- BCNF를 만족해야 한다
- 다치 종속성을 제거한다.
- 제 5 정규형(5NF)
- 4NF를 만족해야 한다.
- 조인 종속성을 제거한다.
위 내용은 정규화에 대한 내용이지만 너무 어렵다. 대게 3 정규형까지만 진행하는 부분인거 같다.
정규화는 데이터베이스 설계를 개선하는 과정입니다. 주 목적은 데이터 중복을 줄이고, 데이터의 일관성과 효율성을 높이는데 목적이 있습니다.
예시)
제 1 정규형: 모든 속성의 값은 원자값
정규화 이전
주문(주문번호, 고객이름, 책목록)
1, 홍길동, "자바의 정석, 파이썬 기초"
제1 정규화
주문(주문번호, 고객이름, 책제목)
1, 홍길동, 자바의 정석
1, 홍길동, 파이썬 기초
제 2 정규형: 부분 종속성을 제거한다, 모든 비주요 속성이 주요 키에 완전 종속 되어야 한다.
주문(주문번호, 고객이름)
주문상세(주문번호, 책제목, 가격)
제 3 정규형: 이행적 종속성을 제거한다, 비주요 속성들 간의 종속성을 없앤다
주문(주문번호, 고객이름)
주문상세(주문번호, ISBN, 수량)
책(ISBN, 제목, 가격, 저자)
이 과정에서 얻은 이점
- 데이터 중복 감소 : 같은 정보를 여러 번 저장하지 않아 저장 공간 절약
- 데이터 일관성 향상 : 한 곳에서만 데이터 수정을 하면 되어서 오류 가능성 줄이기
- 유연성 증가 : 새로운 데이터 유형을 쉽게 추가할 수 있다.
요약하자면 1 정규형은 한칸에 한 가지 정보만 넣기 예를 들면 전화번호를 여러개 적지않고 각각 따로 저장 2 정규형은 관련 있는 정보끼리 모아두기 예로는 주문 정보와 고객 정보를 따로 저장 3 정규형은 다른 정보를 통해 알 수 있는 정보는 따로 저장 예로는 직원 정보에서 부서명 빼고, 부서 정보를 따로 저장