정규화

정규화란? 

간단하게 표현하자면, 중복의 최소화를 통해 데이터의 일관성과 변경의 효율성을 높이는 것이다.

 

하나의 테이블에서 중복으로 존재하는 데이터를 별도의 테이블로 분리해서 한 곳에서 데이터를 관리하여 데이터의 변경이 일어났을 때 하나의 원본 데이터만 수정하면 되기 때문에 효율적이다.

 

 

반정규화

반정규화는 정규화와 반대로 중복을 허용하고 데이터의 정합성을 유지하기가 힘들지만 데이터를 참조 없이 읽을 수 있다.

즉, 데이터가 자주 변경된다면 정규화를 하는 것이 좋고, 변경할 일이 없는 데이터의 경우 반정규화가 더 좋을 수 있다.

** 예를 들어 히스토리성 데이터는 주로 읽기 작업을 많이 하고, 변경을 하지 않기 때문에 반정규화가 더 유리하다.

 

 

정규화 시 고려사항

  • 조회 빈도데이터의 변경 빈도를 고려해보아야한다.
  • 정규화를 했을 때 읽기 시 데이터를 어떻게 가져올 것인가?에 대해 고민해보아야한다.
    • 테이블 조인을 많이 활용하지만, 테이블 조인은 비용이 큰 작업이다.
    • 조인은 테이블의 결합도를 높이고, 별도의 고성능 데이터베이스나 캐싱을 활용한 최적화 기법을 이용할 때 제한이나 더 많은 리소스를 필요로할 수 있다.

** 게시글의 작성자 이름이 변경될 수 없고 정말 적은 빈도로 추가적인 유저 정보가 필요한 경우라면, 매번 유저 테이블과 조인하는 방식보다 게시글에 작성자 이름 컬럼을 두고, 유저 정보가 필요한 순간에 읽기 쿼리를 한번 더 보내는 것이 나을 수도 있다.

'데이터베이스 > MySQL' 카테고리의 다른 글

MySQL 인덱스  (1) 2024.01.04
MySQL 아키텍처  (0) 2024.01.04
해시 태그 테이블 설계  (0) 2023.12.28
[MySQL] INSERT INTO SELECT  (0) 2023.05.09
[MySQL] workbench ERD 자동 생성  (0) 2023.04.15