도서/모두를 위한 postgreSQL

Day16. 데이터 모델링과 인덱싱- 정규화와 비정규화

joje* 2023. 8. 15. 14:29

1. 정규화

: 정규화란 데이터의 중복성을 제거하거나 줄이기 위해 데이터를 구성하는 과정을 의미한다.

: 정규화란 크고, 제대로 조직되지 않은 테이블들과 관계들을 작고, 잘 조직된 관계들로 나누는 것을 의미한다. 

: 정규화의 과정을 거치게 되면, 데이터의 중복이 최소화되고, 더 적은 양의 데이터로 같은 내용을 저장하게 된다. 

 

2. 비정규화

: 정규화된 테이블들은 정보가 여러 테이블에 분산되어 있는 특징을 가지게 되는데, 이런 특징은 너무 많은 JOIN문을 사용하게 만들어 성능이 저하되게 만드는 원인이 될 수 있다. 따라서 모든 테이블을 반드시 정규화 시켜야 하는 것은 아니다.

: 하지만, 비정규화 된 테이블의 경우, 데이터의 중복이 있어 쓰기 작업 시 더 불리해지는 경향이 있고, 쓰기 작업 시 잘못된 코드가 작성되어 있다면, 데이터의 무결성이 깨질 위험성이 존재한다.

<정규화 모델과 비정규화 모델 특징 비교>

2.1 비정규화의 유형

2.1.1 자주 함께 조회하는 테이블

: 음악 스트리밍 사이트에 관한 음악, 가수, 앨범 3개의 테이블이 있고 사용자가 가수에 대한 정보를 조회하기 위해서 음악-앨범-가수 테이블을 연계해서 조회해야 하는 경우 가수에 대한 정보를 얻기 위해서 이중 JOIN문을 실행해야 하는 비효율성이 생긴다. 

: 이 경우 각각의 테이블에 앨범명, 가수명이라는 중복된 데이터를 저장해 비정규화 된 상태의 테이블을 이용하는 것이 정보의 조회 시 더욱 효율적일 수 있다 .하지만, 이러한 경우 역시 데이터의 무결성이 깨질 위험성을 안고 있다.

 

2.1.2 집계 연산이 빈번하게 일어나는 상황

: 음악에 대한 평점을 줄 수 있는 기능 구현을 위해 음악,평점,사용자 테이블을 만들고 음악-평점, 사용자-평점 테이블간의 다대다 관계를 이루고 있다고 가정한다. 서비스 내에서 음악 평점 정보를 빈번하게 보여준다고 가정할 때, 평점의 정보를 매번 집계연산해 표출하는 것보다 음악 테이블내에 평균 평점이란 컬럼을 생성해 데이터를 저장하고 있다 표출하는 편이 성능 측면에서 유리하다.

 

2.1.3 자주 조회되지 않는 정보가 포함된 테이블이 있는 경우

: 하나의 테이블에 자주 조회되지 않고, 데이터의 크기가 큰 데이터가 있다고 가정할 때, 조회가 자주 일어나지 않는 데이터를 의도적으로 따로 분리해 성능상의 이점을 가질 수 있다.