이번에는 데이터베이스 비정규화에 대해서 알아보겠습니다. 무결성 있고, 일관성있는 설계를 하기 위해서는 정규화 원칙들을 잘 지켜야한다고 배웠습니다.
1NF->2NF->3NF->BCNF(Boyce-Codd Normal Form)를 거쳐 정규화 과정을 거칩니다. 이렇게 열심히 정규화를 시킨 구조 왜 일부로 깨뜨리려고 하는지에 대해 알아보겠습니다.
정규화 데이터베이스(normalized database)는
중복을 최소화하도록 설계된 데이터베이스를 말한다.
비정규화 데이터베이스(denormalized database)는
읽는 시간을 최적화하도록 설계된 데이터베이스를 말한다.
정규화 데이터베이스
비정규화 데이터베이스
비정규화(Denormalization, 반정규화)란 무엇인가?
하나 이상의 테이블에 데이터를 중복해 배치하는 최적화 기법이다.
시스템의 성능 향상, 개발 및 운영의 편의성 등을 위해 정규화된 데이터 모델을 통합, 중복, 분리하는 과정으로, 의도적으로 정규화 원칙을 위배하는 행위이다.
🚁 예를 들어, Courses와 Teachers라는 테이블로 이루어진 정규화된 데이터베이스를 생각해 보자. Courses 테이블에는 teacherlD를 둘 수는 있어도, teacherName이라는 필드를 두지는 않을 것이다. 따라서 강좌 정보와 교사 이름을 함께 나열하고 싶은 경우에는 두 테이블을 조인해야 한다.
어떤 면에서는 멋진 방법이다. 교사가 자신의 이름을 바꿀 경우, 한 곳의 데이터만 갱신하면 된다.
하지만 이 방법의 단점은 테이블이 아주 클 경우 조인을 하느라 불필요할 정도로 많은 시간을 낭비하게 된다는 것이다.
비정규화는 다른 타협안을 내놓음으로써 그런 단점을 해소하고자 한다. 어느 정도의 데이터 중복이나 그로 인해 발생하는 데이터 갱신 비용은 감수하는 대신 조인 횟수를 줄여 한층 효율적인 쿼리를 날릴 수 있도록 하겠다는 것이다.
장점
단점
비정규화 대상
대부분의 대규모 IT 업체의 경우처럼, 규모 확장성(scalability)을 요구하는 시스템의 경우 거의 항상 정규화된 데이터베이스와 비정규화된 데이터베이스를 섞어 사용한다.
주의점
1. Trigger 사용
2. 일괄 업데이트 스크립트 사용
3. 실시간 업데이트 매커니즘 사용