본문 바로가기
소프트웨어 공학

데이터베이스 정규화(Database Normalization)의 정의와 그 목적

by iwuooh 2022. 1. 3.

데이터베이스 정규화(Database Normalization)의 개념과 이상(Anomaly) 현상

관계형 데이터베이스를 설계할 때 데이터의 중복을 최소화하여 구조화하는 과정을 데이터베이스 정규화(Database Normalization)라고 한다. 일반적으로 정규화는 규모가 크고 제대로 조직되지 않은 테이블들이나 관계들을 새로 재구성하여 작은 단위로 나눠 잘 조직된 관계를 새로이 만드는 것에 목표가 있다. 관계형 모델의 발견자인 에드거는 1970년에 제1정규화(First Normal Form, 1NF)로 처음 개념을 도입했다. 이후에 제2 정규화(Second Normal Form, 2NF), 제3정규화(Third Normal Form, 2NF) 등을 정의했으며 이후의 정규화 과정은 다른 데이터베이스 이론가들에 의해 정의되었다. 데이터베이스를 디자인하는 표준 관저에서는 데이터베이스가 완벽하게 정규화되어야 한다고 정의한다. 이후에 일부가 성능상의 이유로 비 정규화될 수도 있다고 본다. 그러나 관점 모델링과 같은 일부 데이터베이스 모델링 규칙에서는 비 정규화된 데이터베이스 디자인을 추천하기도 한다. 데이터베이스를 잘못 설계하면 데이터의 중복이 발생하여 데이터를 수정하거나 삭제, 삽입하는 등의 연산을 처리할 때 오류가 발생할 수 있다. 이런 오류들을 이상(Anomaly) 현상이라 한다. 이상(Anomaly) 현상에는 삽입 이상(Insertion Anomaly), 갱신 이상(Update Anomaly), 삭제 이상(Deletion Anomaly)이 있다. 삽입 이상은 새 데이터를 데이터베이스에 삽입할 때 이를 위해 필요하지 않은 데이터도 함께 삽입해야 하는 문제를 칭한다. 갱신 이상은 중복된 튜플 중 일부만 변경하게 되어 데이터 간에 불일치가 생겨서 데이터가 일관성을 유지하지 못하는 문제이다. 삭제 이상은 튜플을 삭제할 때 반드시 필요한 데이터까지도 삭제되어 데이터가 손실되는 문제를 말한다. 정규화를 거치지 않은 데이터베이스에서 이상현상이 나타나며 데이터들이 불필요하게 중복되어서 예상치 못하게 테이블의 조작에 문제를 야기할 수 있다. 이런 이상 현상을 없애면서 올바르게 데이터베이스를 설계하는 것을 정규화라고 볼 수 있다.

데이터베이스 정규화(Database Normalization)의 목적

데이터베이스 정규화를 실행하는 데는 여러 목적이 있다. 첫째로 데이터베이스를 변경할 때 중복을 없앰으로써 삽입, 수정, 삭제를 처리할 때 발생하는 이상현상을 제거한다. 그리고 효과적으로 검색 알고리즘의 생성이 가능하게끔 하는 데에도 목적이 있다. 또한 데이터를 새로이 삽입하여 테이블이 확장될 때 그 구조를 변경하지 않아도 되거나 일부만 수정할 수 있게 하여 재구성의 필요성을 줄일 수 있다. 이는 해당 데이터베이스와 관련이 있는 응용 프로그램에 최소한의 영향을 미치며 응용 프로그램의 생명을 늘릴 수 있다. 정규화가 이루어진 테이블은 그 자체로써, 또한 정규화된 테이블 사이의 관계는 사용자로 하여금 데이터 모델을 더욱 의미 있게 할 수 있다. 정규화된 테이블은 일반적으로 사용자가 제기하는 질의를 지원한다. 즉 테이블에 대해 세부적인 것이 정해지지 않은 상태에서도 미래에 발생할 수 있는 질의를 어느 정도는 지원할 수 있다는 의미이다. 이를 쉽게 생각하기 위해 온라인 서점을 예시로 들어보자. 우리가 미리 예상할 수 있는 질의로는 '고객이 원하는 책은 무엇인가', '책의 저자나 발행일은 언제인가' 등이 있고, 이는 책의 목록 테이블에서 불러와서 충분히 답변이 가능하다. 그러나 다른 예상 밖이나 관심이 없는 질문에는 대답할 수가 없는데 '어떤 고객들이 경제분야의 책을 선호하는가', '고객이 원하는 책은 무엇인가' 등이 있다. 이에 고객이 원하는 답변을 제시하기 위해서는 기존의 데이터베이스와는 분리하여 해당 질의를 다루는 새로운 소프트웨어를 구현해야 한다. 즉 이는 비 정규화된 데이터베이스를 정규화하는 과정이라 할 수 있다. 이처럼 정규화된 테이블에서는 예상치 못한 질의라고 해도 데이터베이스 내부에서 쉽게 처리가 가능해진다.

댓글