정규화
관계형 데이터베이스 설계 시, 데이터 중복과 갱신 이상을 최소화하기 위해서 데이터를 구조화하는 작업이다.
제 1 정규형 (1NF)
제 1 정규형(1NF) 은 모든 도메인은 원자(Atomic) 값으로 구성되어야 한다
는 내용이다. 쉽게 말해 하나의 Column 에는 두개 이상의 값이 오면 안된다는 것을 의미한다.
- 수강과목이라는 Column 의 값의 범위. 즉, 도메인은
,
으로 구분되어야 할 것이 아니라 원자값으로 구성되어야 한다.
Note
Domain 은 데이터베이스에서 컬럼이나 속성(attribute)에 허용되는 값의 범위 또는 데이터 타입을 정의한다. 즉, 특정 Column 에 저장될 수 있는 값들의 집합을 의미한다.
제 2 정규형
제 2 정규형 (2NF) 은 부분 함수 종속성 제거. 즉, 기본키에 종속적인 데이터를 분리한다
는 내용이다. 쉽게 말해 현재 기준 테이블과 관계없는 Column 을 다른 Table 로 분리
과정을 말한다.
학번
이 학생을 구분할 수 있는 PK 라고 가정했을 때, 학번에 종속적인이름
,학년
,학과
를 따로 학생으로 분리할 수 있다.과목 코드
가 과목을 구분할 수 있는 PK 라고 가정했을 때, 과목 코드에 종속적인과목명
,학점
을 따로 과목으로 분리할 수 있다.- 제 2 정규형의 결과로 데이터의 중복이 사라지는것은 물론이고, 나중에 Update 를 할 때도 하나의 테이블만 수정하면 되는 이점이 있다.
정리
정리하면 2NF 는 PK 가 아닌 모든 Attribute 가 PK 에 완전 함수 종속되도록 릴레이션을 분해하는 과정이며, 하나의 Relation 이 두개 이상의 PK 로 구성되었을 때 고려하면 된다.
제 3 정규형
제 3 정규형 (3NF) 은 2NF 가 적용되어있는 상태에서 기본키가 아닌 모든 속성(Column) 에서 이행적 함수 종속을 제거한다
는 내용이다. 쉽게 말해 일반 Column 에만 종속된 Column 을 다른 Table 분리
하라는 의미이다.
- 아래와 같이
과목명
이 정해지면 강의실이 정해지고,강의실
에 따라컴퓨터 유무와 최대인원이 정해
지는 상황에서 3NF 를 적용할 수 있다.
장점
데이터 중복 감소
- 동일한 데이터를 여러 번 저장하는 것을 방지한다. 이는 데이터베이스의 크기를 줄이고, 저장 공간을 효율적으로 사용할 수 있게 한다.
데이터 무결성 보장
- 데이터가 일관되게 유지된다. 하나의 데이터 변경이 모든 관련된 항목에 일관되게 반영되기 때문에 무결성이 보장된다.
데이터 갱신 이상(Anomalies) 방지
- 삽입, 삭제, 갱신 시 발생할 수 있는 이상 현상(Anomalies)을 줄일 수 있다. 예를 들어, 중복 데이터가 없다면 데이터 수정 시 모든 관련 항목을 수정할 필요가 없으므로 갱신 이상이 발생하지 않게 된다.
데이터 구조의 명확화
- 테이블 간의 관계가 명확해져 데이터 구조가 보다 직관적이고 이해하기 쉬워진다. 이는 쿼리를 작성할 때도 유리해진다.
단점
복잡한 쿼리
- 정규화로 인해 테이블이 여러 개로 분리되기 때문에, 데이터를 조회하기 위해 여러 테이블을 조인(join)해야 하는 복잡한 쿼리가 필요할 수 있다. 이로 인해
성능 저하
가 발생할 수 있다.
성능 저하
- 정규화된 데이터베이스는 데이터를 삽입, 삭제, 갱신할 때도 여러 테이블을 조작해야 할 수 있기 때문에 성능이 저하될 수 있다. 특히나 매우 큰 데이터셋에서는 이 문제가 더 심각해질 수 있다.
대응책
조회를 하는 SQL 문장에서 Join 이 많이 발생하여 이로 인한 성능저하가 나타나는 경우에는 반정규화를 적용하는 전략
이 필요하다.
반정규화
반정규화
(De-normalization, 비정규화) 는 정규화된 엔티티, 속성, 관계를 시스템의 성능 향상 및 개발과 운영의 단순화를 위해 중복 통합, 분리 등을 수행하는 데이터 모델링 기법 중 하나
이다.
반정규화
- 디스크 I/O 량이 많아서 조회 시 성능이 저하되거나, 테이블끼리의 경로가 너무 멀어 조인으로 인한 성능 저하가 예상될때 진행한다.
- Column 을 계산하여 조회할 때, 성능이 저하될 것이 예상되는 경우에 진행한다.
일반적으로 조회에 대한 처리 성능이 중요하다고 판단될 때 부분적으로 반정규화를 고려하게 된다.
반정규화의 대상
- 자주 사용되는 테이블에 액세스하는 프로세스의 수가 가장 많고, 항상 일정한 범위만을 조회하는 경우
- 테이블에 대량 데이터가 있고 대량의 범위를 자주 처리하는 경우, 성능 상 이슈가 있을 경우
- 테이블에 지나치게 조인을 많이 사용하게 되어 데이터를 조회하는 것이 기술적으로 어려울 경우
주의점
반정규화를 과도하게 적용하다 보면 데이터의 무결성이 깨질 수 있다
. 또한 입력, 수정, 삭제의 질의문에 대한 응답 시간이 늦어질 수 있다.