CS 스터디를 진행하며 DB의 정규화 파트를 공부했다. 과거에 공부했던 내용들을 다시 정리하는 시간이 되었다.
노트 형식으로 작성하여 게시한다.
정규화
- 이상현상
- 데이터가 정규화되지 않아 중복이 많기 때문에 발생하는 수정, 삭제, 삽입에 대한 이상현상
- 삽입 이상
- 튜플 삽입 시 특정 속성에 부합하는 값이 없어 NULL을 입력해야하는 현상
- 수정 이상
- 수정 시 중복된 데이터의 일부만 수정되어 일어나는 불일치 현상
- 삭제 이상
- 튜플 삭제 시 같이 저장된 다른 정보들까지 연쇄적으로 삭제되는 현상
- 정규형
- 데이터베이스 이상현상을 해결하기 위해 테이블을 기준에 따라 분리하거나 변형을 가하는 것
- 제 1 정규형
- 튜플의 모든 속성이 원자값을 갖도록 함
- 제 2 정규형
- 제 1정규형을 만족하고 기본키가 아닌 속성이 완전 함수적 종속성을 갖는 것
- 완전 함수적 종속성
- 기본키의 부분 집합은 결정자가 되지 않는 것
- 완전 함수적 종속성
- 제 1정규형을 만족하고 기본키가 아닌 속성이 완전 함수적 종속성을 갖는 것
- 제 3 정규형
- 제 2정규형을 만족하고 튜플 내에 이행적 함수적 종속성을 갖지 않는 것
- 이행적 함수적 종속성
- 결정자가 연쇄적으로 다른 컬럼을 결정할 수 있는 성질
- 이행적 함수적 종속성
- 제 2정규형을 만족하고 튜플 내에 이행적 함수적 종속성을 갖지 않는 것
- BCNF 정규형
- 모든 결정자가 후보키인 것
- 정규화와 역정규화
- 정규화의 장점
- 데이터의 일관성을 향상 시킴
- 중복을 최소화하기 때문에 수정 시에도 데이터가 일관적으로 유지됨
- 데이터의 일관성을 향상 시킴
- 정규화의 단점
- 조회 비용을 증가 시킴
- 테이블을 분리하여 모델의 응집도를 증가시키기 때문에 여러 테이블에 있는 내용이 필요한 경우 Join 연산이 필수적
- 조회 비용을 증가 시킴
- 정규화의 장점
역정규화
- 정규화된 데이터베이스에서 성능을 개선하기 위해 정규화의 과정을 푸는 것
- Join 연산이 너무 많은 DB 조회의 경우 성능 개선을 위해 정규화 단계를 낮추는 것이 필요함
정규화 과정을 통해 데이터의 일관성, 응집도를 향상 시키는 것이 중요하지만 필요에 따라 유연하게 실제 조회 성능을 따져보며 역정규화를 고려하는 지혜가 필요하다.
'개인 공부' 카테고리의 다른 글
CS 공부 - Spring (0) | 2023.03.31 |
---|---|
CS 공부 - HTTP (0) | 2023.03.24 |
WebMvcTest에서 MockMVC로 실패 테스트하기 (0) | 2023.03.04 |
당근마켓 클론코딩 - 게시글 검색 기능 구현을 위한 실험 (1) | 2023.02.08 |
정적 팩토리 메서드 (0) | 2022.11.21 |