본문 바로가기

CS 스터디/데이터베이스

ERD와 정규화 과정

ERD(Entity Relationship Diagram)

- 데이터베이스를 구축할 때 가장 기초적인 뼈대 역할

- 릴레이션 간의 관계 정의

- 시스템의 요구 사항을 기반으로 작성

- 디버깅, 프로세스 설계 역할

 

ERD 예시

 

ERD 단점

- 관계형 구조로 표현할 수 있는 데이터를 구성하는데 유용하지만,

- 비정형 데이터를 충분히 표현할 수 없음

 

비정형 데이터

- 비구조화 데이터

- 미리 정의된 데이터 모델이 없거나 미리 정의된 방식으로 정리되지 않은 정보

- 식별 가능한 구조나 아키텍처가 없는데이터

- 일반적으로 텍스트 중심

- 그 외의 날짜, 숫자, 사실과 같은 데이터 포함

출처: https://thebook.io/006977/ch01/01/03/

 

정규화 과정

- 릴레이션 간의 잘못된 종속 관계로 인해 데이터베이스 이상 현상 발생 가능

- 릴레이션을 여러 개로 분리하여 저장 공간을 효율적으로 사용함으로서 해결

 

데이터베이스 이상 현상

- 테이블 내의 데이터 들이 불필요하게 중복되어 테이블을 조작할 때 발생되는 데이터 불일치 현상

- 삽입 이상(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개의 컬럼 존재

출처: https://code-lab1.tistory.com/270
출처: https://code-lab1.tistory.com/270
출처: https://code-lab1.tistory.com/270

- 2개의 테이블이 여전치 다치 종속 존재

- 2개 이상의 컬럼이 하나의 컬럼에 다치 종속되지 않기 때문에 제4정규화 만족

 

 

제5정규형

- 중복을 제거하기 위해 분해할 수 있을 만큼 전부 분해

- 제4정규화 만족

출처: https://minimax95.tistory.com/entry/%EC%A0%95%EA%B7%9C%ED%99%94Normalization-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%A0%95%EA%B7%9C%ED%99%94-%EA%B3%BC%EC%A0%954NF-5NF

 

 

정규화 절차 정리

비정규화 테이블

-> 반복 속성 제거, 모든 속성이 원자값

제1정규형

-> 부분 함수적 종속 제거, 키가 아닌 모든 속성이 기본키 그룹에 완전하게 함수적 종속

제2정규형

-> 이행적 함수적 종속 제거, 키가 아닌 모든 속성이 기본키 그룹에 완전히 함수적 종속

제3정규형

-> 후보키가 아닌 결정자 제거, 모든 결정자가 후보키

BCNF

-> 다치종속 제거

제4정규형

-> 조인 종속성 이용

제5정규형