ERD(Entity Relationship Diagram)
- 데이터베이스를 구축할 때 가장 기초적인 뼈대 역할
- 릴레이션 간의 관계들을 정의하는 것
- 서비스를 구축한다면 가장 먼저 신경 써야할 부분
ERD의 중요성
- ERD는 시스템의 요구사항을 기반으로 작성되며 이 ERD를 기반으로 데이터베이스를 구축
- 데이터베이스를 구축한 이후에도 디버깅 또는 비즈니스 프로세스 재설계가 필요한 경우 설계도 역할을 담당
- ERD는 관계형 구조로 표현할 수 있는 데이터를 구성하는데 유용할 수 있지만 비정형 데이터를 충분히 표현할 수 없다는 단점 존재
잠깐) 비정형 데이터
- 비구조화 데이터를 말하며, 미리 정의된 데이터 모델이 없거나 미리 정의된 방식으로 정리되지 않은 정보를 말한다
ERD 예제
승원 영업부서의 ERD
요구사항
- 영원사업은 0~n명의 고객을 관리
- 고객인 0~n개의 주문을 넣을 수 있다
- 주문에는 1~n개의 상품이 들어간다
게임 속 ERD
요구사항
- 선수들은 1명의 챔피언을 고를 수 있다
- 챔피언은 한개 이상의 스킬을 갖는다
- 스킬은 한개 이상의 특성을 갖는다
정규화 과정
- 릴레이션 간의 잘못된 종속 관계로 인해 데이터베이스 이상 현상이 일어나서 이를 해결하거나, 저장 공간을 효율적으로 사용하기 위해 릴레이션을 여러 개로 분리하는 과정
- 정규형 원칙을 기반으로 정규형을 만들어간 과정
데이터 이상 현상
정규형 원칙
- 같은 의미를 표현하는 릴레이션이지만 좀 더 좋은 구조로 만들어야하고, 자료의 중복성은 감소해야하고, 독립적인 관계를 별개의 릴레이션으로 표현해야 하며, 각각의 릴레이션은 독립적인 표현이 가능해야 하는 것
제 1정규형
- 릴레이션의 모든 도메인이 더 이상 분해될 수 없는 원자 값만으로 구성되어야 한다
- 릴레이션의 속성 값 중에서 한개의 기본키에 대해 두개 이상의 값을 가지는 반복 집합이 존재하면 X (만약 반복집합 존재시 꼭 제거)
제 2정규형
- 1정규형을 만족하며 종속성을 제거한 형태
- 부분함수의 종속성 제거란 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속적인 것
- 주의해야 할 점은 릴레이션을 분해할 때 동등한 릴레이션으로 분해해야 하고, 정보 손실이 발생하지 않는 무손실 분해되어야 한다는 것
제 3정규형
- 2정규형을 만족하고, 기본키가 아닌 모든 속성이 이행적 함수 종속을 만족하지 않는 상태
이행적 함수 종속
- A-> B와 B->C가 존재한다면 A->C를 만족하고, C가 A에 이행적으로 함수 종속
보이스/코드 정규형
- 3 정규형을 만족하고, 결정자가 후보키가 아닌 함수 종속 관계를 제거하여 릴레이션의 함수 종속 관계에서 모든 결정자가 후보키인 상태
잠깐) 결정자
- 함수 종속 관계에서 특정 종속자를 결정짓는 요소
- X -> Y일 때 X는 결정자, Y는 종속자
ex) 다음과 같은 경우 {학번, 수강명}, {학번, 강사}가 후보키
-> 학번에 NULL 존재로 문제 발생
학번-강사-수강명 함수 종속
강사 속성이 결정자이지만 후보키가 아니므로 이 강사 속성을 분리
정규형 과정 주의
- 정규형 과정을 거쳐 테이블을 나눈다고 해서 성능이 100% 좋아지는 것은 아니다
- 테이블을 나누게 되면 어떠한 쿼리는 조인을 해야 하는 경우도 발생해서 오히려 느려질 수 있고 따라서 서비스에 따라서 정규화 또는 비정규화 과정을 진행해야 한다