ERD는 데이터베이스를 구축할 때 가장 기초적인 뼈대 역할을 하며, 릴레이션 간의 관계들을 정의한 것.
서비스를 구축할 시 가장 먼저 신경 써야 할 부분.
ERD의 중요성
ERD는 시스템의 요구 사항을 기반으로 작성되며 이 ERD를 기반으로 데이터 베이스를 구축한다.
데이터 베이스를 구축한 이후에도 디버깅 또는 비즈니스 프로세스 재설계가 필요할 경우 설계도 역할을 담당.
ERD는 관계형 구조로 표현할 수 있는 데이터를 구성하는 데 유용할 수 있지만 비정형 데이터를 충분히 표현할 수 없다는 단점이 있다.
정규화 과정
정구화 과정은 릴레이션간의 잘못된 종속 관계로 인해 데이터베이스 이상 현상이 일어나서 이를 해결하거나, 저장 공간을 효율적으로 사용하기 위해 릴레이션을 여러 개로 분리하는 과정이다.
데이터베이스 이상현상 - 회원이 한 개의 등급을 가져야 하는데 세 개의 등급을 갖거나 삭제할 때 필요한 데이터가 같이 삭제되고, 데이터를 삽입해야 하는데 하나의 필드값이 NULL이 되면 안되어 삽입하기 어려운 현상을 말함.
정규화 과정은 정규형 원칙을 기반으로 정규형을 만들어가는 과정이며, 정규화된 정도는 정규형으로 표현한다.
정규형 원칙
정규형의 원칙이란 같은 의미를 표현하는 릴레이션이지만
1. 좀 더 좋은 구조로 만들어야 하고,
2. 자료의 중복성은 감소해야 하고,
3. 독립적인 관계는 별개의 릴레이션으로 표현해야 하며,
4. 각각의 릴레이션은 독립적인 표현이 가능해야 하는 것을 말한다.
제 1 정규형
릴레이션의 모든 도메인이 더 이상 분해될 수 없는 원자 값만으로 구성되어야 한다.
릴레이션의 속성 값 중에서 한 개의 기본키에 대해 두 개 이상의 값을 가지는 반복 집합이 있어서는 안된다.
반복 집합이 있다면 제거한다.
제 2 정규형
릴레이션이 제 1 정규형이고, 부분 함수의 종속성을 제거한 형태
부분 함수의 종속성 제거란? 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속적인 것
※ 완전 함수 종속 (Full Functional Dependency)
- A와 B가 릴레이션 R의 속성이고 A→B 종속성이 성립할 때, B가 A의 속성 전체에 함수 종속하고 부분 집합 속성에 함수 종속하지 않을 경우
완전 함수 종속 이라고 한다.
수강강좌(학생변호, 강좌이름, 강의실, 성적) 릴레이션에서 학생번호는 강의실을 결정하지 못하고, 강좌이름은 성적을 결정하지 못하므로
완전 함수 종속이 아니다. 따라서 아래와 같이 제 2정규형으로 분해할 수 있다.
수강(학생번호, 강좌이름, 성적) 릴레이션과 강의실(강좌이름, 강의실) 릴레이션으로 분해하게 되면
수강 릴레이션에서 학생번호,강좌이름이 성적을 결정짓고, 강의실 릴레이션에서 강좌이름이 강의실을 결정짓는다.
수강과 강의실 릴레이션 모두 완전 함수 종속을 만족한다.
즉 표에서 기본키중에 중복키인것이 없다면 된다.
제 3 정규형
제 2 정규형이고, 기본키가 아닌 모든 속성이 이행적 함수 종속을 만족하지 않는 상태
※ 이행적 함수 종속
A ->B 와 B -> Crk whswogkaus shsflwjrdmfh A -> C가 성립하는데, 이때 집합 C가 집합 A에 이행적으로 함수 종속이 되었다고 한다.
계절학기(학생번호, 강좌이름, 수강료)릴레이션에서 학생번호는 강좌이름과, 수강료를 결정짓고, 강좌이름은 수강료를 결정짓는다.
따라서 제 3정규형을 만족하지 않으므로 아래와 같이 정규화할 수 있다.
계절수강(학생번호, 강좌이름) 릴레이션과 수강료(강좌이름, 수강료)릴레이션으로 분해하게 되면
계절수강 릴레이션에서 학생번호는 강좌이름을 결정짓고, 수강료 릴레이션에서 강좌이름은 수강료를 결정짓는다.
따라서 직접종속이 성립하므로 제 3정규형을 만족한다.
보이스/코드 정규형 (BNCF)
제 3 정규형이고, 결정자가 후보키가 아닌 함수 종속 관계를 제거하여 릴레이션의 함수 종속 관계에서 모든 결정자가 후보키인 상태를 말한다.
결정자 - 함수 종속 관계에서 특정 종속자를 결정짓는 요소
'X ->Y' 일때 X는 결정자, Y는 종속자
교수가 결정자
특강수강(학생번호, 특강이름, 교수)릴레이션에서 이상현상을 일으키는 (교수, 특강이름)을 분해한다.
위의 그림과 같이 분해하면 모든 결정자가 후보키를 만족하므로 BCNF 정규형을 만족한다.
'개발공부 > CS Study' 카테고리의 다른 글
JDBC 문법 (0) | 2023.03.29 |
---|---|
4. 데이터베이스(3) - 트랜잭션과 무결성 (0) | 2022.11.01 |
네트워크(2) (0) | 2022.09.27 |
네트워크 (1) (0) | 2022.09.27 |
디자인 패턴 (2) - 프로그래밍 패러다임 (1) | 2022.09.20 |