정규화
정규화란 데이터의 중복성을 제거하거나 줄이기 위해 크고 조직화 되지 않은 테이블들과 관계들을
잘 조직된 테이블과 관계들로 나누는 과정이다.
예시를 통해 이해해보자.
위의 예시 데이터는 아래의 단점이 있다
- 중복된 정보가 많아서 데이터가 비효율적으로 저장되어 있음
- 중복된 정보 사이에 실수로 오류가 발생할 확률이 높음
- 특정 구매 이력의 고유 값이 없어서 어떤 내역을 간단하게 특정 지을수 없음
예시 데이터를 정규화 해보면
위와 같이 3개 테이블로 나누어지고 각각의 테이블에 프라이머리 키 id값을 추가하게 된다.
앞의 테이블보다 복잡해보이지만, 데이터의 중복이 최소화되어 있고, 더 적은 양의 데이터로 같은 내용을 저장한다.
비정규화
정규화의 반대로 데이터의 중복을 허용하여 테이블과 관계로 표현한다.
정규화된 테이블은 정보가 여러 테이블에 분산되어 있게 되는데,
이런 특징이 여러 정보를 묶어서 조회할 때 너무 많은 JOIN문을 사용하게 만들어 성능이 낮아지는 원인이 되기도 한다.
이러한 이유 때문에 정규화하여 데이터베이스를 관리하는건 저장측면에서 효율적이지만
조회측면에선 비효율적인 경우도 있기에 비정규화를 한다.
하지만 비정규화된 모델은 데이터의 중복이 있기 때문에 쓰기 작업시 불리하고,
잘못된 코드 작성시 데이터의 무결성이 깨질 위험도 존재한다.
※데이터 무결성? 조직의 데이터가 라이프사이클의 어느 시점에서든 정확하고 완전하며 일관성이 있다는 것을 보장하는 것
특징 | 정규화 모델 | 비정규화 모델 |
정보 분산 정도 | 많이 분산됨 | 적게 분산됨 |
조회 속도 | 느림 | 빠름 |
쓰기 속도 | 빠름 | 느림 |
데이터 무결성 | 깨지지 않음 | 깨질 수 있음 |
'SQL' 카테고리의 다른 글
SQL 데이터 모델링 (0) | 2025.02.11 |
---|---|
SQL django와 연동 (0) | 2025.02.06 |
SQL 6장 실습문제 (0) | 2025.02.05 |
SQL 테이블 열연결 응용 (0) | 2025.02.05 |
SQL 테이블 열연결(JOIN) (0) | 2025.02.05 |