1. 정규화란?
RDBMS 설계에서 중복을 최소화해 데이터를 구조화하는 과정을 정규화라고 한다.
1.1 정규화의 목적
- 중복된 데이터를 허용하지 않음으로 무결성을 유지해 DB의 저장용량을 줄일 수 있다 .
- 무결성이란? 모든 데이터가 완전하고 일관되고 정확한지를 말한다.
- 데이터베이스 구조 확장 시 재디자인을 최소화할 수 있다. 정규화된 DB에서 새로운 데이터 형의 추가로 인한 확장시, 구조변경을 하지 않아도 되거나 일부만 변경해도 된다. 이는 DB와 연결된 응용 프로그램에 최소한의 영향을 준다.
- insert/update/delete 시 발생할 수 있는 각종 이상 현상(Anomaly)를 방지할 수 있다.
이상현상(Anomaly)란?
- 삽입 이상(Insertion anomaly) : 불필요한 정보를 함께 저장하지 않고서는 정보를 저장하는 것이 불가능하다.
- 삭제 이상(Deletion anomaly) : 필요한 정보를 함께 삭제하지 않고서는 정보를 삭제하는 것이 불가능하다.
- 갱신 이상(Update anomaly) : 데이터의 일부를 갱신할 시 데이터의 불일치가 발생한다.
1.2 정규화의 과정
정규화에는 여러가지 단계가 있지만 대체적으로 1~3단계 정규화의 과정을 거친다.
제 1 정규화 (1NF = 1st Normal Form)
: 모든 속성은 반드시 하나의 값을 가져야한다.
그림을 보면 Ram 이라는 학생의 phone 이 2개의 값을 가지고 있는데 이는 제 1 정규화 규칙에 맞지 않으므로 분리해야한다.
제 2 정규화 (2NF = 2nd Normal Form)
: 모든 속성은 반드시 모든 기본키(pk)에 종속되어야한다. 기본키 일부분에만 종속되면 안된다.
그림을 보면 해당 테이블의 기본키는 customer ID와 Store ID이다. 이 상황에서 Purchase Location은 Store ID에 종속적이지만, Customer ID에는 종속적이지 않다. 따라서 제 2 정규화 규칙에 맞지 않으므로 분리해야한다.
제 3 정규화(3NF= 3rd Normal Form)
: 이행적 함수 종속을 만족하면 안된다. 즉 기본 키가 아닌 모든 속성간에는 서로 종속될 수 없다.
- 이행적 함수 종속(Transitive Functional Dependency )이란? : A → B를 만족하는 A,B가 있을 때, B→ C가 만족하는 경우 , A →C가 만족하는 경우 이행적 함수 종속이라고 한다.
그림을 보면 Book ID (A)는 장르 ID(B)를 만족하고, 장르 ID(B)는 장르 Type(C)을 만족한다 . 따라서 Book ID(A)는 장르 Type(C)를 만족하기 때문에 이는 이행적 함수 종속을 만족하기 때문에 테이블을 정규화해야한다.
출처 및 참고
- https://wkdtjsgur100.github.io/anomaly/
- https://kosaf04pyh.tistory.com/295
- https://www.1keydata.com/database-normalization/second-normal-form-2nf.php
'CS > 데이터베이스' 카테고리의 다른 글
mysql Index 종류 및 B-Tree 구조 (0) | 2023.06.14 |
---|---|
mysql 쿼리 최적화 (0) | 2023.06.14 |
Mysql JOIN (0) | 2023.02.20 |
RDBMS vs NOSQL (1) | 2023.02.16 |
redis의 특징과 자료구조 및 pub/sub (0) | 2023.02.16 |