ERD에 대해서 정리를 하려고 한다.
ERD
- 데이터베이스를 구축할 때 가장 기초적인 뼈대
- 이 부분을 먼저 신경써서 서비스를 구축해야한다.
- 건물을 지을 때, 골조로 생각.
- 시스템을 설계할때 시스템의 요구사항에 맞추어 설계하는 것이 일반적
"ERD란 시스템의 요구사항에 맞추어 데이터베이스에 있는 테이블간 관계도를 의미한다."
ERD의 장점, 단점
장점
- 시스템 설계 중 디버깅 또는 비즈니스 프로세스 재설계시 참고 가능
- 관계형 구조로 표현할 수 있는 데이터를 구성하는데 유용
단점
- 비정형 데이터를 충분히 표현할 수 없다.
비정형 데이터 - 비구조화 데이터를 의미하며, 미리 정의된 데이터 모델이 없거나 미리 정의된 방식으로 정리되지 않은 정보.
ERD 예시
요구사항
- 영업사원은 0~N명의 고객을 관리한다.
- 고객은 0~N개의 주문을 넣을 수 있다.
이러한 요구를 ERD로 설계하는 것이다.
정규화
" 릴레이션간의 잘못된 종속 관계로 인해 데이터베이스 이상 현상이 일어나 이를 해결하거나, 저장 공간을 효율적으로 사용하기 위해 릴레이션을 분리하는 과정 "
이상 현상
- 필요없는 데이터 삭제 시 필요한 데이터까지 삭제되는 경우
- 데이터를 삽입하는데 하나의 필드 값이 NULL이 되면 안되어서 삽입하기 어려운 경우 등
종류
- 제 1 정규형 (기본 정규형)
- 제 2 정규형
- 제 3 정규형
- 보이스/코드 정규형
- 제 4 정규형 (고급 정규형)
- 제 5 정규형 (고급 정규형)
정규형 원칙
- 같은 의미를 표현하는 릴레이션이지만 좀 더 좋은 구조로 만든다.
- 자료의 중복성을 감소시킨다.
- 독립적인 관계는 별도의 릴레이션으로 분리한다.
- 릴레이션은 독립적인 표현이 가능해야한다.
1. 제 1 정규형 ( 원자값 만들기 )
- 모든 도메인이 더 이상 분해될 수 없는 원자값으로만 구성되어야한다.
- 한 개의 기본키를 갖는 레코드의 속성 중 두개 이상의 값을 가져서는 안된다.
예시
유저번호 - ID - 이름 - 장바구니
1 - minsoo - 민수 - A, B, C
->
1 - minsoo - 민수 - A
1 - minsoo - 민수 - B
1 - minsoo - 민수 - C
- 하지만 테이블을 보면 레코드들이 아이디로 구별할 수 없다.
- 즉, 종속성 제거가 되어 있지않으며 기본키에 대해 나머지 속성이 완전 함수 종속적이지 않다.
2. 제 2 정규형 ( 완전 함수 종속적으로 만든다. )
- 제 1 정규형의 성질을 가진체 부분 함수의 종속성을 제거한 형태
- 종속성 제거 : 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속적이게 만들어야 한다.
- 테이블의 분리를 의미하며 분리시 데이터는 무손실 분해가 되어야 한다.
완전 함수 종속
- 한개의 속성(기본키)에 다른 여러가지 속성이 종속되어 있다.
- 한개의 속성으로 레코드를 구별 가능하다.
예시
Table 1 (회원 목록)
1 - minsoo - 민수
Table 2 (장바구니 목록)
minsoo - A
minsoo - B
minsoo - C
3. 제 3 정규형 ( 이행적 종속성을 제거한다. )
- 제 2 정규형의 성질을 만족하면서 모든 속성이 이행적 함수 종속을 만족하지 않은 상태
이행적 함수 종속
- A가 B이고 B가 C이면 A는 C다. 이 때, C가 A에 이행적으로 종속되어 있다라고 한다.
예시
Table 1
1 - minsoo
Table2
minsoo - 민수
-> 유저번호가 1이고 아이디가 minsoo이면 이름이 민수임을 알 수 있는데 이를 분리.
4. 보이스/코드 정규형 ( 결정자는 후보키 중 하나여야 한다. )
- 제 3 정규형의 성질을 만족하면서 결정자가 후보키(기본키 or 대체키)가 아닌 함수 종속 관계를 제거하여 릴레이션의 함수 종속 관계에서 모든 결정자가 후보키인 상태를 의미.
예시
(학번 - 수강명 - 강사) 라는 테이블 존재할 때, 만약 새로운 수업을 개설한 강사를 저장하려면 아직 수강한 사람이 없으므로 학번은 Null이 된다. 이를 (학번 - 수강명), (수강명 - 강사) 테이블로 나누어 오류가 발생하지 않게 한다.
(학번 - 수강명 - 강사)
2016 - 자바 - A
2016 - 파이썬 - B
2017 - 자바 - A
여기서 결정자의 후보는 (학번-수강명) or (수강명-강사) 인데, 이 두개의 결정자는 만약 위에처럼 데이터 삽입 시 결정자가 될 수 없다. 즉, 이 테이블은 함수 종속 관계의 결정자가 결정자의 후보에 속하지 않는다. 이런 경우 결정자의 후보 중에 결정자가 선정될 수 있도록 테이블을 분리한다.
'CS Knowledge > DataBase' 카테고리의 다른 글
DataBase - Join (0) | 2023.04.27 |
---|---|
DataBase - Index (0) | 2023.04.26 |
DataBase - Type (1) | 2023.04.25 |
DataBase - Transaction and Integrity (0) | 2023.04.25 |
DataBase - Basic (0) | 2023.04.02 |