일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- have a nice day
- Have a good day :)
- 우유가 옆으로 넘어지면 아야
- Have a nice day.
- DFS
- 아자아자 화이팅
- SSAFY 10기 화이팅
- LeetCode #릿코드 #좋은 하루 되세요 #Have a nice day
- SSAFY IM/A
- Java 환경 설정
- DP
- 우유아야
- Hamming weight
- I am Korean
- HAVE A GOOD DAY
- 자고 싶다
- 모르고리즘
- 수학
- 자료구조
- SSAFY 화이팅
- BFS
- SeongSeobDang
- SSAFY 테스트
- amazon
- 우유가옆으로넘어지면아야
- 텐션 업 10기 화이팅
- 코로나 싫어요
- 텐션 업 10기!
- 네트워크
- Today
- Total
Hope Everyone Is Happy
2. ERD와 정규화 과정 본문
본 게시글은 책 : 면접을 위한 CS 전공지식 노트 (출판사 : 길벗, 주홍철 지음) 을 참조하여 작성하였습니다. + 구글링
◆ ERD (Entity Realtionship Diagram)
- 데이터 베이스를 구축할 때 가장 기초적인 뼈대 역할로 릴레이션 간의 관계들을 정의
- 서비스를 구축한다면 가장 먼저 신경 써야 하는 부분
- 시스템의 요구 사항을 기반으로 작성되며 데이터베이스를 구축
- 데이터베이스를 구축한 이후에도 디버깅 또는 비즈니스 프로세스 재설계가 필요한 경우에 설계도 역할을 담당 가능
- 관계형 구조로 표현할 수 있는 데이터를 구성하는데는 유용하지만 비정형 데이터를 충분히 표현할 수 없음
*비정형 데이터 : 비구조화 데이터를 말하며, 미리 정의된 데이터 모델이 없거나 미리 정의된 방식으로 정리되지 않은 정보
ex) 영업부서의 ERD
ex) League of ~ 게임의 ERD
◆ 정규화 과정
- 릴레이션간의 잘못된 종속 관계로 인해 데이터베이스 이상 현상이 일어나서 이를 해결하기 위해 활용
- 저장 공간을 효율적으로 사용하기 위해 릴레이션을 여러 개로 분리하는 과정
- 데이터베이스 이상 현상이란 삽입, 삭제 , 조회 과정에서 발생하는 이상 현상을 정의
- 정규화 과정은 정규형 원칙을 기반으로 정규형을 만들어가는 과정
- 정규화 과정 정도는 정규형 (NF, Normal Form)으로 표현
- 기본 정규형으로는 제1 정규형, 제2 정규형, 제3 정규형, 보이스/코드 정규형 등이 존재
- 고급 정규형으로는 제4 정규형, 제5 정규형 존재
◆ 정규형 원칙
- 같은 의미를 표현하는 릴레이션이지만 좀 더 좋은 구조로 만들고자 하는 원칙
- 자료의 중복성은 감소, 독립적인 관계는 별개의 릴레이션으로 표현
- 각각의 릴레이션은 독립적으로 표현
- 제 1정규형
: 릴레이션의 모든 도메인이 더 이상 분해 될 수 없는 원자 값(atomic value)만으로 구성
: 릴레이션의 속성 값 중에서 한 개의 기본키에 대해 두 개 이상의 값을 가지는 반복 집합은 금지
ex) 아래 릴레이션의 속성 중 유저 ID 기본키에 대해 두 개 이상의 수강명을 나눠서 반복집합 제거
- 제2 정규형
: 릴레이션이 제1 정규형이며 부분 함수의 종속성을 제거한 형태
: 부분 함수의 종속성 제거란 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속적인 것
ex) 기본키인 {유저ID, 수강명} 과 완전히 종속된 유저번호 릴레이션과 성취도 릴레이션으로 분리된 것을 확인 가능
: 릴레이션을 분해할 때 동등한 릴레이션으로 분해, 정보 손실이 발생하지 않는 무손실 분해로 진행
- 제3 정규형
: 제2 정규형이고 기본키가 아닌 모든 속성이 이행적 함수 종속(transitive FD)을 만족하지 않는 상태
*이행적 함수 종속 : 만약, A->B, B->C == true면 A->C == true 이 때, C가 A에 이행적으로 함수 종속되었다고 표현
ex) 아래와 같이 유저 ID와 등급, 할인율이 정해져 있는 테이블을 분해
- 보이스/코드 정규형
: 보이스/코드 정규형(BCNF)은 제3 정규형이고, 결정자가 후보키가 아닌 함수 종속 관계를 제거
: 릴레이션의 함수 종속 관계에서 모든 결정자가 후보키인 상태
*결정자 : 함수 종속 관계에서 특정 종속자(dependent)를 결정 짓는 요소, 'X->Y'일 때, X는 결정자, Y는 종속자
ex) 아래의 요구사항에 맞추어 테이블을 작성하면,
· 각 수강명에 대해 한 학생은 오직 한 강사의 강의만 수강
· 각 강사는 한 수강명만 담당
· 한 수강명은 여러 강사가 담당
· {학번, 수강명}, {학번, 강사}가 후보키가 되며, 수강명-롤, 강사-범석 삽입 시 학번 NULL에러 발생
· 해당 릴레이션은 학번->강사 강사->수강명을 가지며 강사 속성이 결정자이지만 후보키가 아니므로 속성을 분리
· 서비스에 따라 성능이 좋아질 수도 나빠질 수도 있으므로 알맞게 정규화 or 비정규화 진행
데이터베이스도 꿀잼이네요~22
위의 글과 관련하여 추가적인 내용이나 피드백은 언제나 환영입니다 :)
'※ CS 스터디 > 데이터베이스' 카테고리의 다른 글
7. 조인의 원리 (0) | 2023.08.29 |
---|---|
6. 조인(Join)의 종류 (0) | 2023.08.29 |
4. 데이터베이스의 종류 (0) | 2023.08.29 |
3. 트랜잭션과 무결성 (0) | 2023.08.23 |
1. 데이터 베이스의 기본 (0) | 2023.08.23 |