[DB] 데이터 정규화/비정규화란?

suno·2023년 2월 11일
0
post-thumbnail

✅ 정규화 vs 비정규화

정의

  • 정규화 데이터베이스(Normalized Database)
    중복을 최소화하도록 설계된 데이터베이스
  • 비정규화 데이터베이스(Denormalized Database)
    읽는 시간을 최적화하도록 설계된 데이터베이스

비정규화는 하나 이상의 테이블에 데이터를 중복해 배치하는 최적화 기법입니다.
시스템의 성능향상, 개발 및 운영의 편의성 등을 위해 정규화된 데이터 모델을 통합, 중복, 분리하는 과정으로 의도적으로 정규화 원칙을 위배하는 행위입니다.

정규화는 관계형 데이터베이스에서 중복을 최소화하기 위해 데이터를 구조화하는 작업입니다.
정규화의 종류는 제 1 정규형, 제 2 정규형, 제 3 정규형, BCNF형이 존재합니다.


장단점

정규화비정규화
장점1. 빠른 데이터 조회
2. 데이터 조회 쿼리의 간단화
1. 데이터 변경 시 이상현상 제거
2. 효과적인 검색 알고리즘 생성
3. 데이터 구조의 안정성, 무결성
단점1. 데이터 갱신, 삽입 비용이 높음
2. 데이터의 무결성 해침
3. 데이터 중복저장으로 인한 추가 저장공간 확보 필요
1. Join 연산의 증가로 응답 시간 저하

🔑 모든 데이터를 정규화, 비정규화 하나로 통일하기 보다는
비즈니스의 특성을 잘 고려해서 정규화할 데이터와 비정규화할 데이터를 구분하는 능력이 중요합니다.


💡 예시

정규화 데이터

쪽지 ididstring
받는 사람 uidreceiverUidstring
받는 사람 닉네임receiverDisplayNamestring
받는 사람 프로필사진receiverPhotoURLstring
보낸 사람 uidsenderUidstring
보낸 사람 닉네임senderDisplayNamestring
보낸 사람 프로필사진senderPhotoURLstring
날짜datenumber
제목titlestring
내용contentstring
읽음 여부isReadboolean

위 데이터는 받은쪽지함/보낸쪽지함의 구분 없이, 모든 쪽지 데이터를 한 컬렉션에 저장하는 구조입니다.

✔️ Create, Update, Delete

컬렉션이 하나로 이루어져 있으니 쪽지를 보내고 서버에 저장할때, 데이터 하나만 저장하면 됩니다.

✔️ Read

클라이언트에서 받은쪽지함/보낸쪽지함을 구분하기 위해서는, 쪽지 컬렉션의 uid로 쿼리를 요청해야 합니다. (파이어베이스의 필터링 기능 사용)

1) 받은 쪽지함에서는 받는 사람의 uid로 필터링
2) 보낸 쪽지함에서는 보낸 사람의 uid로 필터링

그러면, 한가지 컬렉션에서 받은쪽지함/보낸쪽지함을 모두 보여줄 수 있습니다.


비정규화 데이터

위 데이터는 받은쪽지함/보낸쪽지함 컬렉션을 구분해서 쪽지를 저장하는 구조입니다.

✔️ Create, Update, Delete

컬렉션이 두개로 나뉘어 있으니 쪽지를 보내고 서버에 저장할 때, 두가지 데이터를 두개의 컬렉션에 각각 저장해야합니다.

✔️ Read

클라이언트에서 받은쪽지함/보낸쪽지함을 각각 불러올 때는, 별도의 필터링 없이 각 컬렉션의 전체 데이터를 불러오면 됩니다.


Reference

[데이터베이스] 정규화 VS 비정규화 공부 및 정리
[Database] DB 정규화 & 비정규화란?

profile
Software Engineer 🍊

0개의 댓글