DB Normalization
DB Normalization
Database Normalization 이란
- 관계형 데이터베이스를 데이터의 중복성을 줄이고 무결성을 높이기 수행.
- Noraml form이라는 일련의 형태로 데이터를 구조화하는 작업.
- Anomlay가 발생할 확률을 감소시킴.
Anomaly
정규화가 진행되지 않은 테이블에서 삽입, 갱신, 삭제를 할 때 일어나는 부작용. 다음과 같이 세 가지 종류 존재.
- Insertion Anomaly
- Update Anomaly
- Deletion Anomaly
Insertion Anomaly
- 삽입될 때 모든 내용이 다 들어있지 않기 때문에 발생하는 문제.
- 학과, 학생으로 이루어진 테이블이 있을 때 학생이 없는 신설 학과를 생성하는 경우 고려.
- 학생 컬럼을 NULL로 설정하지 않는 이상 삽입이 불가한 현상.
Update Anomaly
- 같은 정보가 여러 행에 포함되어 있을때 생기는 문제.
- 이름, 주소, 기술로 이루어진 테이블이 있을 때 한 사람이 여러 기술을 가질 수 있음.
- 이 경우 어떤 사람이 주소를 바꾸면 해당 사람의 모든 행의 주소가 바뀌어야하나, 일부 행만 바뀌는 현상.
Deletion Anomaly
- 특정 상황에서 어떤 정보만 지우려고 했는데 상관 없는 다른 정보까지 같이 지워지는 현상.
- 학과, 학생으로 이루어진 테이블이 있을 때 학과에 혼자 있는 학생을 지우는 경우 고려.
- 해당 학생의 행을 지우면 학과 정보까지 같이 삭제되는 현상.
Normal Forms
관계형 데이터베이스의 여러 가지 형태로, 다음과 같은 normal form들이 존재. 특정한 normal form을 만족한다고도 표현한다.
- 1NF
- 2NF
- 3NF
- BCNF
- 4NF, 5NF, 6NF, EKNF, …
1NF (First Normal Form)
- 1NF를 만족시키기 위해서는, 테이블의 모든 행은 모두 하나의 값을 가져야 함.
Functional Dependency
- 관계형 데이터베이스에서 attribute 간의 제약 조건.
- Relation R의 attribute들의 집합의 부분 집합 X, Y에 대해 다음과 같이 정의.
- X의 각 원소가 Y의 정확히 한 원소와 연결되어 있으면, X는 Y를 함수적으로 결정한다고 하고, X → Y로 표시.
- 반대로 Y는 X에 함수적으로 종속적이라고 함.
2NF (Second Normal Form)
- 1NF여야 함.
- 어떤 non-prime attribute도 어떤 candidate key의 proper subset에 함수적으로 종속적이지 않음.
- 테이블에서 single column primary key를 가지는 경우 자동적으로 2NF
Transitively Dependent
- Functional dependency의 일종.
- X → Y, Y → Z 이고 Y → X가 아닐 때 X → Z이면, Z가 X에 transitively dependent하다고 함.
3NF (Third Normal Form)
- 2NF여야 함.
- Relation R의 모든 non-prime attribute 는 R의 어떤 key에도 transitively dependent하지 않음.
BCNF (Boyce-codd Normal Form)
- 3NF여야 함.
- X → Y를 만족하면, 둘 중 하나의 조건을 만족함.
- Y ⊆ X
- X is superkey of R
- 특수한 경우를 제외하고는 대부분 3NF 는 BCNF.
Denormalization
- 이전에 정규화된 테이블에 성능을 높이기 위해 사용되는 전략.
- 중복된 데이터를 추가하거나 그룹화하는 과정을 거침으로 인해 정규화 전 상태로 되돌림.
- 쓰기 성능을 약간 잃지만, 읽기 성능을 향상시킬 수 있음.
- 매우 많은 데이터를 읽어야 할 때 유용.
- 반대로 쓰기가 많을때는 비효율적.
Denormalization Implementation
만약 반정규화에 필요한 관계들이 물리적으로 분리되어있다면, 속도가 느려질 수 있기 때문에 이런 문제를 해결할 두 가지 방법 존재
- DBMS support
- DBA implementation
DBMS support
논리적인 정규화는 유지하되, DB가 disk에 쿼리 최적화를 위한 중복 데이터를 저장함으로 인해 반정규화 하는 방법.
DBA implementation
논리적인 테이블 디자인 역시 반정규화를 진행하는 방법으로, DBA가 constraint를 통해 DB의 consistency를 유지시켜야 함.
References
- https://en.wikipedia.org/wiki/Database_normalization
- https://en.wikipedia.org/wiki/Denormalization
- https://en.wikipedia.org/wiki/Second_normal_form
- https://en.wikipedia.org/wiki/Third_normal_form
- https://en.wikipedia.org/wiki/Boyce%E2%80%93Codd_normal_form
- https://en.wikipedia.org/wiki/Functional_dependency
기타
2022-07-07에 내용을 추가 및 제거하고, 모호한 표현들을 수정하고, 가독성을 높여 재 작성.