Normalization & Denormalization
정규화와 비정규화
정규화(Normalization)
데이터베이스 설계 기술로, 테이블을 조직하여 중복과 의존성을 최소화한다.
데이터베이스를 두 개 이상의 테이블로 나누고 그들 사이의 관계를 정의하는 것을 포함한다.
정규화의 목적은 데이터 중복과 insertion, update, deletion anomaly를 최소화하기 위해 일련의 normal forms(NF)에 따라 관계형 데이터베이스를 구성하고 데이터 무결성을 향상시키는 데 있다.
단계
제1정규화(1NF)
모든 필드의 값은 원자적이어야 하며, 더 이상 분할되지 않는 단일 값을 가져야 한다.
각 필드에는 하나의 값만 있어야 하며, 테이블의 모든 열은 유일한 데이터 타입을 가져야 한다
제2정규화(2NF)
1차 정규화를 만족하며, 모든 비주요 속성이 기본 키에 완전히 함수적으로 의존해야 한다.
부분적 의존성을 제거해야 한다
제3정규화(3NF)
제2정규화를 만족하며, 모든 비주요 속성이 기본 키에만 의존해야 한다.
즉 이행적 의존성을 제거하여 데이터 중복을 더욱 줄여야 한다
제4정규화(BCNF)
제3정규화를 만족하며,멀티밸류드 종속성(multi-valued dependency)을 제거한다.
한 속성이 다른 속성에 대해 두 개 이상의 독립적인 값을 가질 떄 발생한다
예시
비정규화된 테이블 (제 1 정규화 위반):
여러 값이 하나의 필드에 저장되어 있어 1NF를 위반한다.
1
홍길동
컴퓨터,수학
1,2
김교수, 이교수
350,250
5,3
서울,경기도
2
전우치
물리
2
이교수
300
4
경기도
제 1 정규화 (1NF):
각 필드에 하나의 값만 있도록 테이블을 분리한다.
1
홍길동
컴퓨터
1
김교수
350
5
서울
1
홍길동
수학
2
이교수
250
3
경기도
2
전우치
물리
2
이교수
300
4
경기도
제 2 정규화 (2NF):
학생ID와 과목명, 교수ID를 기본 키로 사용하고, 학생ID에 부분적으로 의존하는 이름을 별도의 테이블로 분리한다.
1
홍길동
2
전우치
1
김교수
2
이교수
1
컴퓨터
1
350
5
서울
1
수학
2
250
3
경기도
2
물리
2
300
4
경기도
제 3 정규화 (3NF):
과목명,교슈ID를 기본 키로 사용하고,기본키가 등록금Level을 결정하고,등록금Level이 등록금을 결정하므로, 등록금Level과 등록금을 별도의 테이블로 분리한다.
1
컴퓨터
1
5
서울
1
수학
2
3
경기도
2
물리
2
4
경기도
5
350
4
300
3
250
제 4 정규화(4NF):
멀티밸류드 종속성을 제거하여, 과목과 위치 정보를 별도의 테이블로 분리한다
1
컴퓨터
1
5
1
수학
2
3
2
물리
2
4
컴퓨터
서울
수학
경기도
물리
경기동
비정규화(Denormalization)
특히 읽기 중심의 작업에서 성능을 향상시키기 위해 의도적으로 데이터베이스에 중복 데이터를 추가하는 과정이다.
이는 테이블을 결합하거나 쿼리에서 조인의 필요성을 중리기 위해 테이블 내에 중복 데이터를 추가하는 것을 포함할 수 있다.
비정규화는 쿼리 성능이 중요한 데이터 웨어하우징아니 빅 데이터 애플리케이션에서 자주 사용한다
정규화 와 비정규화 trade off
정규화의 장단점
장점
데이터 중복 감소
중복 데이터의 저장을 최소화하여 데이터 무결성과 저장 공간 효율성을 높인다.
데이터 관리 용이성
데이터 무결성 증가로 인해 오류 발생 가능성이 줄어들고, 데이터 관리가 용이해진다.
단점
쿼리 성능 저하
데이터가 여러 테이블에 분산되어 있어 조인이 많이지면 쿼리의 복잡성과 시스템 성능이 저하될 수 있다.
비정규화의 장단점
장점
쿼리 성능 향상
데이터가 여러 테이블에 분산되어 있어 조인이 많아지면 쿼리의 복잡성과 시스템 성능이 저하될 수 있다.
단점
데이터 중복 증가
데이터의 중복이 증가하여 데이터 무결성 유지가 어려워진다.
데이터 무결성 유지 어려움
중복된 데이터가 여러 곳에 퍼져 있어 무결성을 유지하기 위한 노력이 필요한다.
정규화시 고려사항
데이터의 최신성 요구도
데이터가 얼마나 빠르게 최신 상태를 유지해야 하는지 고려해야 한다.
히스토리성 데이터 처리
히스토리성이 강한 데이터는 정규화하지 않는 것이 바람직할 수 있다.
데이터 변경 및 조회 주기
데이터의 변경 주기와 조회 주기를 고려해야 한다.
객체(테이블) 탐색 깊이
객체 간의 관계와 탐색 깊이를 고려해야 한다.
정규화를 선택한 경우의 고려사항
읽기 전략
테이블 조인은 테이블 간 결합도를 높이므로, 성능이 좋은 별도의 데이터베이스 사용이나 캐싱 등의 최적화 기법을 고려해야 한다.
조인의 영향
조인 사용은 최적화 기법 적용에 제한을 줄 수 있으며, 리소스 사용 증가를 야기할 수 있다.
읽기 쿼리 부담
추가적인 읽기 쿼리 발생은 큰 부담이 아닐 수 있다.
추가 개념
Functional dependency(FD)
테이블 내의 두속성 집합 간의 관계를 나타낸다.
한 속성 집합 X가 다른 속성 집합 Y에 함수적으로 결정한다는 것은 X의 값에 따라 Y의 값이 유일하게 결정됨을 의미한다.
이 경우 Y는 X에 함수적으로 의존한다.
테이블의 스키마를 보고 의미적으로 파악해야 한다. 즉 테이블의 state를 보고 FD를 파악해서는 안된다.
X -> Y는 Y가 X에 종속되지만, 반대는 성립하지 않는다.
Trivial FD
Y가 X의 부분집할 일 때
예: {A, B} → {B}
Non-trivial FD
Y가 X의 부분집합이 아닐 때
예: {A} → {B}
Completely non-trivial FD
X와 Y가 완전히 독립적일 때
예: {A} → {B, C}
Partial FD
X의 부분집합이 Y를 결정할 때
예: {A, B} → {C}, 여기서 {A} 또는 {B}만으로 C를 결정할 수 있음
Full FD
X의 모든 부분집합이 Y를 결정하지 못할 떄
예: {A, B} → {C}, 여기서 {A}와 {B} 모두 필요
Transitive FD
X->Y,Y->Z의 경우, X->Z가 성립할 때
예: {A} → {B}, {B} → {C}, 따라서 {A} → {C}
Super Key
테이블에서 각 튜플을 유일하게 식별할 수 있는 속성들의 집합니다.
슈퍼 키는 필요 이상의 정보를 포함할 수 있다.
Candidate Key
슈퍼 키 중에서 최소성을 만족하는 키
즉 키를 구성하는 어떠한 속성도 제거할 수 없는 최소한의 속성들로 구성된다.
이러한 키들 중 어느 하나가 주 키(Primary Key)로 선택될 수 있다.
Primary Key
후보 키들 주에서 선택된 주 키
이 키는 각 튜블을 유일하게 식별하는 데 사용되며, NULL 값을 가질 수 없고, 각 튜플마다 고유한 값을 가져야 한다.
Prime Attribute
후보 키에 속하지 않은 속성
이 속성들은 테이블의 각 튜블을 구별하는데 중요한 역할을 한다.
Non-Prime Attribute
후보 키에 속하지 않은 속성
이 속성들은 테이블의 기본 키에 직접적으로 의존하지 않다.
Last updated
Was this helpful?