어느날 팀장님께서 이렇게 물었다 정규화가 뭔지 아세요?
머쓱하게 잘 모른다고 말씀드렸다.
다음에 같은 걸 물어보시면 대답해드리기 위해 공부한다.
SQL 정규화란?
정규화는 1NF ~ 6NF 그리고 BCNF 가 있다. 하지만 보통, 3NF 정규화까지만 해도 충분하다고한다.
설명
데이터를 중복으로 저장하면 일관되지 않은 데이터, 비정상적인 삽입 갱신 삭제 처리, 디스크 공간 낭비 등 많은 문제를 일으킨다. 정규화는 중복 데이터를 저장하면서 일으키는 문제점을 없애려고 정보를 주제별로 분할하는 프로그램을 의미한다. 즉, 정규화란 데이터가 꼬이는 것을 막기위해 테이블을 잘게 나누는 것 행위다.
기본 목표
테이블 간에 중복된 데이터를 허용하지 않는다는 것, 중복된 데이터를 허용하지 않음으로써 무결성(Integrity)를 유지할 수 있으며, DB의 저장 용량 역시 줄일 수 있다.
제 1 정규화 : 1NF
제1 정규화란 테이블의 컬럼이 하나의 값을 갖도록 테이블을 분해하는 것
회원 프로그램 수강등록목록 테이블을 보면 김민수 회원은 프로그램에 헬스와 골프 두개의 데이터가 들어가있다. 1NF로 수정된다면 한 칸에 한개의 데이터만 들어가도록 수정할 수 있다.
Before
After (1NF)
제 2 정규화 : 2NF
제2 정규화란 partial depenmndency(부분 함수 종속)을 제거한 테이블 즉, 제1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것입니다.
partial depenmndency(부분 함수 종속) 이란?
우선...
PK 역활의 컬럼이 없는 테이블에 Composite Primary Key (이하 CPK )라는게 있는데 2개 이상을 합쳐서 PK를 만들 수 있을 경우 그것을 CPK라고 한다.
종속자가 기본키(PK)가 아닌 다른 속성에 종속되거나, 기본키를 구성하는 여러 속성들의 부분집합(CPK) 중 일부분에만 종속되어 있음을 말합니다.
CPK에 종속된 컬럼을 partial depenmndency라고 하는데 이것을 제거하는 것을 제 2 정규화라고 한다.
완전 함수 종속이란?
기본키가 종속자이며 기본키가 여러 속성으로 구성되어 있을 경우 기본키를 구성하는 모든 속성이 포함된 부분집합 또한 종속자일 경우를 말합니다.
학번 학부 이름
----------------------------------------
001 컴퓨터공학과 홍길동
002 컴퓨터공학과 이순신
003 전자공학과 장보고
결정자 : 학번
종속자 : 학부, 이름
종속 관계 : {학번 -> 학부, 이름}
이러한 관계에서 종속자는 기본키이며 기본키를 구성하는 모든 속성의 부분집합이 종속자이기 때문에 "학부와 이름은 학번에 완전 함수 종속 되어있다." 라고 말합니다.
빨간 표시가 두개 이상의 컬럼을 합쳐 만들어진 CPK이다.
그리고 가격이란 CPK인 프로그램에 종속되어 있으므로 partial depenmndency가 존재하는 것이다.
그러면 partial depenmndency를 제거된 것을 2NF 라고한다.
위 내용을 자세히 설명한 영상(1분33초부터 시작)
제 3 정규형 : 3NF
제3 정규화란 제2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것이다.
이행적 종속 이란 A -> B, B -> C가 성립할 때 A -> C가 성립되는 것을 의미
2NF 테이블에서 출신대학은 강사라는 일반컬럼에 종속되어 있다.
이것을 다른 테이블 분리하면 제 3 정규형 3NF라고합니다.
참고한 자료
'데이터베이스 > SQL' 카테고리의 다른 글
[SQL] JOIN(결합)에 대해서(with.옵티마이저 및 결합 알고리즘) (0) | 2023.02.20 |
---|---|
[SQL] CROSS JOIN 이란? 그리고 JPA에서 주의할 점 (0) | 2023.02.18 |