정규화
정규화란?
테이블을 올바른 형태로 만들고 분리하는 데이터베이스의 설계를 재구성하는 테크닉이다.
정규화가 왜 필요할까?
- 불필요한 데이터(redundancy)를 제거 : 중복 데이터 제거(무결성)
- 데이터 저장을 논리적으로 한다.
결과적으로 데이터베이스 크기가 줄어들고 찾아야 할 데이터가 적어져 쿼리가 빨라진다.
정규화되지 않은 구조의 테이블
-
Update
여러 줄의 데이터를 갱신해야 하는데 이로인해 데이터의 불일치(inconsistency)가 발생할 수 있다. -
Insert
특정 컬럼에 NULL이 포함될 수 있다. -
Delete
데이터를 삭제하려고 했지만 테이블이 삭제될 수도 있다.
정규화가 제대로 되지 않은 테이블의 경우 갱신/삽입/삭제 시 다양한 문제가 발생할 수 있다.
이를 테이블의 구성을 논리적으로 변경하여 해결하고자 하는 것이 정규화이다.
정규화의 법칙(Normalization Rule)은 1차정규화, 2차정규화, 3차정규화, BCNF, 4차정규화, 5차정규화로 나눌 수 있다.
원자값: 더 이상 쪼갤 수 없는 조각 정보
속성값은 원자값을 가져야 한다.
예를 들어 주소는 [ 도 / 시 / 번지 / 아파트명 ]으로 나눠 저장하면 원자값일까?
배달 업체인 경우 주소를 [도 시 번지 아파트명] 한 번에 저장하는 것이 원자값이고
부동산 업체인 경우 [ 도 / 시 / 번지 / 아파트명 ] 따로 나눠 저장하는 것이 원자값이다.
각각의 목적에 따라 원자값이 달라질 수 있다.
원자적 데이터를 사용하면 쿼리 작성이 쉽고 수행 시간이 빨라 쿼리를 효율적으로 수행할 수 있고
저장 데이터가 대용량인 경우 더욱 효율적이다.
- 원자적 데이터로 구성된 열은 그 열에 같은 타입의 데이터를 여러 개 가질 수 없다.
- 원자적 데이터로 구성된 테이블은 같은 타입의 데이터를 여러 열에 가질 수 없다.
제1 정규형 (1NF)
- 각 행의 데이터들은 원자적 값을 가져야 한다.
- 각 행은 기본 키를 가지고 있어야 한다.
제2 정규형 (2NF)
- 테이블의 모든 컬럼이 완전 함수적 종속을 만족해야 한다.
- 행으로 중복되는 부분을 찾아내(부분 함수 종속성을 찾아내) 테이블 분할헤야 한다.
제3 정규형 (3NF)
- 기본 키 이외의 다른 컬럼이 그외 다른 컬럼을 결정할 수 없어야 한다.
- 기본 키 외에 중복되는 부분을 찾아내 분할해야 한다.