CS
4.2 ERD와 정규화 과정
운으로
2022. 9. 13. 22:52
ERD는 데이터베이스를 구축할 때 가장 기초적인 뼈대 역할을 하며 릴레이션 간의 관계들을 정의한 것이다.
서비스를 구축한다면 가장 먼저 신경써야 하는 부분이다.
1) ERD의 중요성
- ERD는 시스템의 요구 사항을 기반으로 작성되며 이 ERD를 기반으로 데이터베이스를 구축한다.
- DB를 구축한 이후에도 디버깅 또는 비즈니스 프로세스 재설계가 필요한 경우에 설계도 역할을 담당하기도 한다.
- 그러나 ERD는 관계형 구조로 표현할 수 있는 데이터를 구성하는 데 유용하지만 비정형 데이터를 충분히 표현할 수 없다는 단점이 있다.
2) 정규화 과정
- 정규화 과정은 릴레이션 간의 잘못된 종속 관계로 인해 데이터베이스 이상 현상이 일어나서 이를 해결하거나, 저장 공간을 효율적으로 사용하기 위해 릴레이션을 여러 개로 분리하는 과정
- 데이터베이스 이상 현상이란 회원이 한 개의 등급을 가져야 하는데 세 개의 등급을 갖거나 삭제할 때 필요한 데이터가 같이 삭제되고, 데이터를 삽입해야하는데 하나의 필드 값이 NULL이 되면 안 돼서 삽입하기 어려운 현상
- 정규화 과정은 정규형 원칙을 기반으로 정규형을 만들어내는 과정으로 기본으로 제1정규형~제3정규형, 보이스/코드 정규형, 고급 정규형인 제4정규형, 제5정규형이 있다.
정규형 원칙
- 같은 의미를 표현하는 릴레이션이지만 좀 더 좋은 구조, 자료의 중복성 감소, 독립적인 관계는 별개의 릴레이션으로 표현, 각각의 릴레이션은 독립적인 표현이 가능해야 하는 것을 말한다.
제1정규형
- 릴레이션의 모든 도메인이 더 이상 분해될 수 없는 원자 값(atomic value)만으로 구성되어야 한다.
- 위 그림처럼 100학번의 과목번호와 성적이 2개로 이루어져있었는데 이것을 나눠서 반복 집합을 제거하는 것을 볼 수 있다.
제2정규형
- 릴레이션이 제1정규형이며 부분 함수의 종속성을 제거한 형태
- 주의할 점은 릴레이션을 분해할 때 동등한 릴레이션으로 분해해야하고, 정보 손실이 발생하지 않는 무손실 분해로 분해되어야한다.
- '이행성 함수 종속성'
- A -> B와 B -> C가 존재하면 논리적으로 A->C가 성립하는데, 이때 집합 C가 집합 A에 이행적으로 함수 종속이 되었다고 한다.
- 위 예시에서는 학번 → 지도교수, 지도교수 → 학과, 학번 → 학과의 관계가 존재한다. 따라서 지도교수의 학과를 추가하기 위해서 지도 학생까지 필요하게 되고, 학생이 자퇴하였는데 지도교수의 학과 정보가 사라지는 문제점이 발생
제3정규형
- 제2정규형이고 기본키가 아닌 모든 속성이 이행적 함수 종속을 만족하지 않는 상태
- 위 그림처럼 이행적 함수 종속 관계에 있는 속성을 분리한다.
보이스/코드 정규형
- 제 3정규형이고, 결정자가 후보키가 아닌 함수 종속 관계를 제거하여 릴레이션의 함수 종속 관계에서 모든 결정자가 후보키인 상태를 말한다.
제3 정규형을 만족한다. 이 경우에는 어떤 이상현상이 생길까?
- 삽입 이상 : 새로운 교수가 특정 과목을 담당한다는 새로운 정보를 추가할 수 없다. 적어도 한 명 이상의 수강 학생이 필요하다.
- 삭제 이상 : 학번 100이 C234 과목을 취소하면, P2가 C234 과목을 담당한다는 정보도 삭제된다.
- 갱신 이상 : P1의 과목이 변경되면 P1인 행을 모두 찾아 변경시켜주어야 한다.