ERD(Entity Relationship Diagram)
- 데이터베이스를 구축할 때 가장 기초적인 뼈대 역할
- 릴레이션 간의 관계 정의
- 시스템의 요구 사항을 기반으로 작성
- 디버깅, 프로세스 설계 역할
ERD 예시

ERD 단점
- 관계형 구조로 표현할 수 있는 데이터를 구성하는데 유용하지만,
- 비정형 데이터를 충분히 표현할 수 없음
비정형 데이터
- 비구조화 데이터
- 미리 정의된 데이터 모델이 없거나 미리 정의된 방식으로 정리되지 않은 정보
- 식별 가능한 구조나 아키텍처가 없는데이터
- 일반적으로 텍스트 중심
- 그 외의 날짜, 숫자, 사실과 같은 데이터 포함

정규화 과정
- 릴레이션 간의 잘못된 종속 관계로 인해 데이터베이스 이상 현상 발생 가능
- 릴레이션을 여러 개로 분리하여 저장 공간을 효율적으로 사용함으로서 해결
데이터베이스 이상 현상
- 테이블 내의 데이터 들이 불필요하게 중복되어 테이블을 조작할 때 발생되는 데이터 불일치 현상
- 삽입 이상(Insertion Anomaly), 갱신 이상(Modification Anomaly), 삭제 이상(Deletion Anomaly)
삽입 이상(Insertion Anomaly)
- 원하지 않는 데이터가 삽입되거나, key가 없어서 삽입이 불가능(불필요한 데이터를 추가해서 삽입할 수 있는 구조)
갱신 이상(Modification Anomaly)
- 일부 데이터를 변경할 경우, 데이터가 불일치하는 모순, 중복되는 튜플이 존재
삭제 이상(Deletion Anomaly)
- 필요한 정보를 함께 삭제하지 않고서는 어떤 정보를 삭제하는 것이 불가능
정규형(NF, Normal Form)
- 정규화된 정도
- 기본 정규형(제1정규형, 제2정규형, 제3정규형, 보이스/코드 정규형)
- 고급 정규형(제4정규형, 제5정규형)
정규형 원칙
- 릴레이션을 보다 좋은 구조로 설계
- 자료의 중복성 감소
- 독립적이 관계는 별개의 릴레이션으로 표현
- 릴레이션은 독립적 표현 가능해야 함
제1정규형
- 릴레이션의 모든 도메인이 더 이상 분해될 수 없는 원자 값(atomic value)만으로 구성
- 릴레이션의 속성 값 중에서 1개의 기본키에 대해 2개 이상의 값을 가지는 반복 집합이 있어서는 안됨

이상 현상
- 삽입 이상: 수강신청을 할 때, 유저번호와 유저ID를 반드시 알아야 함 (불필요한 정보)
- 갱신 이상: 유저번호가 1인 유저의 유저ID를 변경하려면, 유저ID가 "홍철"인 행을 모두 찾아 변경해야 함
- 삭제 이상: 유저번호가 1인 유저가 "C++코딩테스트" 수강을 취소하면, 해당 과목에 대한 정보가 모두 사라짐(ex 성취도)
이상 현상 원인
- 기본키가 아닌 속성들이 기본키에 완전 함수 종속되지 못하고 부분함수로 종속되어 있기 때문
- 기본키는 일부 속성에만 의존하고 있기 때문
제2정규형
- 제1정규형 + 기본키에 속하지 않은 속성 모두가 기본키에 완전 함수 종속인 정규형
- 부분 함수의 종속성을 제거한 형태

이상 현상
- 삽입 이상: 강의를 신청할 때, 유저ID 필요(불필요한 정보 필요)
- 갱신 이상: 유저ID가 변경될 경우, 다른 릴레이션에 존재하는 유저ID를 모두 변경해줘야 함
- 삭제 이상: 유저번호가 1인 학생이 자퇴하면, "C++코딩테스트", "프런트특강" 강의가 삭제됨
이상 현상 원인
- 이행적 함수 종속성
- A->B이고, B->C이면 A->C인 관계

제3정규형
- 제2정규형 + 이행적 함수 종속성 제거
- 기본키에 속하지 않은 모든 속성이 기본키에 이행적 함수 종속이 아닌 함수
- 기본키 이외의 속성이 그 외 다른 속성 결정 불가

보이스/코드 정규형(BCNF, Boyce and Codd Normal Form)
- 제3정규형을 조금 더 강화시킨 개념
- 결정자가 후보키가 아닌 함수 종속 제거, 모든 결정자가 후보키이어야 함
- 결정자: 함수 종속 관계에서 특정 종속자(dependent)를 결정짓는 요소, ''X->Y" 일 때, X는 결정자, Y는 종속자
- 후보키: 유일하게 튜플 1개를 식별 가능한 키



- 후보키: (학번, 수강명), (학번, 강사)
- "롤" 삽입시, 학번 NULL 발생 -> 삽입 이상현상

- 강사 속성은 결정자지만, 후보키가 아님 -> 강사 속성 분리해야 함

제4정규형
- 다중값 종속(다치 종속) 제거
- 다치 종속
: A->B 일 때, 하나의 A값에 여러 개의 B값이 존재함, A↠B
: 최소 3개의 컬럼 존재



- 2개의 테이블이 여전치 다치 종속 존재
- 2개 이상의 컬럼이 하나의 컬럼에 다치 종속되지 않기 때문에 제4정규화 만족
제5정규형
- 중복을 제거하기 위해 분해할 수 있을 만큼 전부 분해
- 제4정규화 만족

정규화 절차 정리
비정규화 테이블
-> 반복 속성 제거, 모든 속성이 원자값
제1정규형
-> 부분 함수적 종속 제거, 키가 아닌 모든 속성이 기본키 그룹에 완전하게 함수적 종속
제2정규형
-> 이행적 함수적 종속 제거, 키가 아닌 모든 속성이 기본키 그룹에 완전히 함수적 종속
제3정규형
-> 후보키가 아닌 결정자 제거, 모든 결정자가 후보키
BCNF
-> 다치종속 제거
제4정규형
-> 조인 종속성 이용
제5정규형