
4.2 ERD와 정규화 과정
ERD(Entity Relationship Diagram)는 데이터베이스를 구축할 때 가장 기초적인 뼈대 역할을 하며, 릴레이션 간의 관계들을 정의한 것이다. 만약 서비스를 구축한다면 가장 먼저 신경 써야 할 부분이다.
4.2.1 ERD의 중요성
- 시스템의 요구 사항을 기반으로 작성됨
- 디버깅 또는 재설계가 필요한 경우에도 설계도 역할 담당
- 관계형 구조로 표현할 수 있는 데이터를 구성하는 데 유용함
- 비정형 데이터는 충분히 표현할 수 없음
4.2.2 예제로 배우는 ERD


4.2.3 정규화 과정
정규화 과정이란 릴레이션 간의 잘못된 종속 관계로 인해 데이터베이스 이상 현상이 일어나서 이를 해결하거나, 저장 공간을 효율적으로 사용하기 위해 릴레이션을 여러 개로 분리하는 과정이다.
- 정규형 원칙을 기반으로 정규형을 만들어가는 과정
- 정규화된 정도 : 정규형(NF, Normal Form)으로 표현
- 기본 정규형 : 제1 정규형, 제2 정규형, 제3 정규형, 보이스/코드 정규형
- 고급 정규형 : 제4 정규형, 제5 정규형
- 데이터베이스 이상 현상 : 회원이 한 개의 등급을 가져야 하는데 세 개의 등급을 갖거나, 삭제할 때 필요한 데이터가 같이 삭제되고 데이터를 삽입해야 하는데 하나의 필드값이 NULL이 되면 안되어서 삽입하기 어려운 현상
참고로, 정규화 과정을 거친다고 성능이 100% 좋아지는 것은 아니다.
테이블을 나누게 되면 어떠한 쿼리는 조인을 해야 하는 경우도 발생해서 오히려 느려질 수 있다.
서비스에 따라 정규화 또는 비정규화 과정을 진행해야 한다.
정규형 원칙
같은 의미를 표현하는 릴레이션의 경우
- 좀 더 좋은 구조로 만들어야 함
- 자료의 중복성은 감소해야 함
- 독립적인 관계는 별개의 릴레이션으로 표현해야 함
- 각각의 릴레이션은 독립적인 표현이 가능해야 함
제1정규형
- 릴레이션의 모든 도메인이 더 이상 분해될 수 없는 원자 값(atomic value)만으로 구성되어야 한다. 한 개의 기본키에 대해 두 개 이상의 값을 가지는 반복 집합이 있어서는 안 된다.

제2정규형
- 릴레이션이 제1 정규형이며 부분 함수의 종속성을 제거한 형태
기본키가 아닌 모든 속성이 기본키에 완전 함수 종속적이다.
릴레이션 분해시 동등한 릴레이션으로 분해해야 하고, 정보 손실이 발생하지 않는 무손실 분해가 돼야 한다.

제3정규형
- 릴레이션이 제2 정규형이고 기본키가 아닌 모든 속성이 이행적 함수 종속(transitive FD)을 만족하지 않는 상태

- 이행적 함수 종속 : A->B와 B->C가 존재하면 논리적으로 A->C가 성립하는데, 이때 집합C가 집합A에 이행적으로 함수 종속 되었다고 한다.

보이스/코드 정규형
- 릴레이션이 제3 정규형이고, 릴레이션의 함수 종속 관계에서 모든 결정자가 후보키인 상태.
결정자가 후보키가 아닌 함수 종속 관계를 제거한다.
ex. 요구사항
- 각 수강명에 대해 한 학생은 오직 한 강사의 강의만 수강
- 각 강사는 한 수강명만 담당
- 한 수강명은 여러 강사가 담당 가능
