ERD는 데이터베이스를 구축할 가장 기초적인 뼈대 역할을 하며, 릴레이션 간의 관계들을 정의한 것임. 만약 서비스를 구축한다면 가장 먼저 신경써야 할 부분임.
ERD는 시스템의 요구 사항을 기반으로 작성되며 이 ERD를 기반으로 데이터베이스를 구축함. 데이터베이스를 구축한 이후에도 디버깅 또는 비즈니스 프로세스 재설계가 필요한 경우에 설계도 역할을 담당하기도 함. ERD는 관계형 구조로 표현할 수 있는 데이터를 구성하는 데 유용할 수 있지만 비정형 데이터를 충분히 표현할 수 없다는 단점이 있음.
정규화 과정은 릴레이션 간의 잘못된 종속 관계로 인해 데이터베이스 이상 현상이 일어나서 이를 해결하거나, 저장 공간을 효율적으로 사용하기 위해 릴레이션을 여러 개로 분리하는 과정임.
데이터베이스 이상 현상이란 삭제시에 원하지 않는 데이터까지 삭제되는 삭제 이상, 중복된 데이터 중 일부만 변경되는 갱신 이상, 원하지 않는 데이터까지 함께 삽입해야만 데이터를 삽입할 수 있는 삽입 이상을 말함.
정규화 과정은 정규형 원칙을 기반으로 정규형을 만들어가는 과정이며, 정구화된 정도는 정규형으로 표현함. 기본 정규형인 제1정규형, 제2정규형, 제3정규형, 보이스/코드 정규형이 있고, 고급 정규형인 제4정규형, 제5정규형이 있음.
정규형의 원칙이란 같은 의미를 표현하는 릴레이션이지만 좀 더 좋은 구조로 만들어야 하고, 자료의 중복성을 감소해야 하고, 독립적인 관계는 별개의 릴레이션으로 표현해야 하며, 각각의 릴레이션은 독립적인 표현이 가능해야 하는 것을 말함.
릴레이션의 모든 도메인이 더 이상 분해될 수 없는 원자 값만으로 구성되어야 함. 릴레이션의 속성 값 중에서 한 개의 기본키에 대해 두 개 이상의 값을 가지는 반복 집합이 있어서는 안됨. 만약에 반복 집합이 있다면 제거해야 함.
릴레이션이 제1정규형이며 부분 함수의 종속성을 제거한 형태를 말함. 부분 함수의 종속성 제거란 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속적인 것을 말함. 이때 주의할 점은 릴레이션을 분해할 때 동등한 릴레이션으로 분해해야 하고, 정보 손실이 발생하지 않는 무손실 분해로 분해되어야 한다는 것임.
릴레이션이 제2정규형이고 기본키가 아닌 모든 속성이 이행적 함수 종속을 만족하지 않는 상태를 말함.
보이스/코드 정규형은 제3정규형이고 결정자가 후보키가 아닌 함수 종속 관계를 제거하여 릴레이션의 함수 종속 관계에서 모든 결정자가 후보키인 상태를 말함.
참고로 정규형 과정을 거쳐 테이블을 나눈다고 해서 성능이 100% 좋아지는 것은 아님. 성능이 좋아질 수도 나빠질 수도 있음. 테이블을 나누게 되며 어떠한 쿼리는 조인을 해야 하는 경우도 발생해서 오히려 느려질 수도 있기 떄문에 서비스에 따라 정규화 또는 비정규화 과정을 진행해야 함.