일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Linux
- 위험관리
- IT
- 클라우드
- 복습
- 드림핵
- Review
- wargame
- 리눅스
- reivew
- it자격증
- 취약점진단
- webhacking
- 정보처리기사
- 자격증공부
- keyword
- 케이쉴드주니어
- Security
- 기록
- 워게임
- 보안
- 보안용어
- DreamHack
- Shell
- 리눅스마스터2급
- study
- 자격증
- 웹해킹
- 정리
- 공부
- Today
- Total
IT Memory Note
[정보처리기사] 데이터 입출력 구현 : 데이터 저장소(2) 본문
2️⃣ 논리 데이터 모델링
☆☆☆
(6) 정규화(Normalization)
1. 이상 현상(Anomaly)
- 데이터 중복성으로 인해 릴레이션을 조작할 때 발생하는 비합리적 현상
이상 현상 | 설명 |
삽입 이상 | 정보 저장 시 해당 정보의 불필요한 세부정보를 입력해야 하는 경우 |
삭제 이상 | 정보 삭제 시 원치 않는 다른 정보가 같이 삭제되는 경우 |
갱신 이상 | 중복 데이터 중에서 특정 부분만 수정되어 중복된 값이 모순을 일으키는 경우 |
※ 릴레이션(Relation) : 행(Row)과 열(Column)로 구성된 테이블
2. 함수 종속(FD, Functional Dependency)
⓵ 함수 종속의 개념
- 릴레이션에서 속성의 의미와 속성 간 상호 관계로부터 발생하는 제약조건
⓶ 결정자(Determinant)/종속자(Dependent)
- X → Y 관계일 때 X는 결정자, Y는 종속자
⓷ 함수 종속 종류
종류 | 설명 |
부분 함수 종속 (Partial Functional Dependency) |
릴레이션에서 기본 키가 복합 키일 경우 기본키를 구성하는 속성 중 일부에게 종속된 경우 |
완전 함수 종속 (Full Functional Denpendency) |
릴레이션에서 X → Y 관계가 있을 때, Y는 X의 전체 속성에 대해 종속하고, 부분 집합 속성에 종속하지 않는 경우 |
이행 함수 종속 (Transitive Functional Denpendency) |
릴레이션에서 X → Y, Y → Z 종속 관계가 있을 때, X → Z가 성립되는 경우 |
3. 정규화의 개념
- 관계형 데이터 모델에서 데이터 중복성을 제거하여 이상 현상을 방지하고, 데이터 일관성과 정확성을 유지하기 위해 무손실 분해하는 과정
단계 | 조건 |
1정규형(1NF) | 원자값으로 구성 |
2정규형(2NF) | 부분 함수 종속 제거(완전 함수적 종속 관계) |
3정규형(3NF) | 이행함수 종속 제거 |
보이스-코드 정규형(BCNF) | 결정자 후보키가 아닌 함수 종속 제거 |
4정규형(4NF) | 다치(다중 값) 종속 제거 |
5정규형(5NF) | 조인 종속 제거 |
■ 정규화 상세 단계
⓵ 1차 정규화(1NF, 1 Normal Form) : 원자값으로 구성, 반복 속성/중복 제거가 필요한 정규화 과정
< 1차 정규화 >
고객 ID | 이메일 |
1 | apple@domain.com; banana@domain.com; |
2 | coconut@domain.com; damson@domain.com; |
⬇️
고객 ID | 이메일 |
1 | apple@domain.com |
1 | banana@domain.com |
2 | coconut@domain.com |
2 | damson@domain.com |
- 테이블 내의 속성값은 원자값을 가지고 있어야 함
- 이메일 주소가 속성에 2개 이상 가지고 있는 경우 원자값이 아니기 때문에 속성 1개만 가지도록 저장하면 1차 정규화를 만족함
⓶ 2차 정규화(2NF, 2 Normal Form) : 부분함수 종속 제거(완전 함수적 종속 관계), 주식별자 아닌 속성을 분리하는 정규화 과정
< 2차 정규화 >
고객명 | 서비스 이름 | 서비스 가격 | 서비스 이용 기간 |
홍길동 | 헬스 | 70000 | 1달 |
홍길동 | 수영 | 100000 | 2달 |
장동길 | 수영 | 100000 | 2달 |
⬇️
고객명 | 서비스 이름 | 서비스 이용 기간 | / |
서비스 이름 | 서비스 가격 |
홍길동 | 헬스 | 1달 | 헬스 | 70000 | |
홍길동 | 수영 | 2달 | 수영 | 100000 | |
장동길 | 수영 | 2달 | / | / |
⬇️
- <고객명, 서비스 이름>이 <서비스 이용 기간>에 영향을 주고, <서비스 이름>이 <서비스 가격>에 영향을 주는 관계를 부분함수 종속 관계라 함
- <고객명, 서비스 이름, 서비스 가격, 서비스 이용 기간>을 한 테이블에 두는 것은 부분함수 종속성으로 인해 2차 정규화를 만족하지 못함
- 부분 관계인 <서비스 이름, 서비스 가격> 관계를 별도의 테이블로 두면 부분 함수 종속 관계가 제거되어 2차 정규화를 만족함
⓷ 3차 정규화(3NF, 3 Normal Form) : 이행함수 종속 제거, 속성에 종속적인 속성을 분리하는 정규화 과정
< 3차 정규화 >
책번호 | 도서 이름 | 도서 가격 | 출판사 | 홈페이지 |
1 | C 언어 | 30000 | A사 | www.apple.com |
2 | C++ 언어 | 25000 | B사 | www.banana.com |
3 | JAVA 언어 | 40000 | B사 | www.coconut.com |
⬇️
책번호 | 도서 이름 | 도서 가격 | 출판사 | / | 출판사 | 홈페이지 |
1 | C 언어 | 30000 | A사 | A사 | www.apple.com | |
2 | C++ 언어 | 25000 | B사 | B사 | www.banana.com | |
3 | JAVA 언어 | 40000 | B사 | / | / |
⬇️
- <책번호>가 <출판사>에 영향을 주고, <출판사>가 <홈페이지>에 영향을 주는 관계인 A → B이고, B → C이면서 A → C 관계가 같이 있는 경우를
이행함수 종속 관계라고 함
- <책번호, 출판사, 홈페이지>를 한 테이블에 두는 것은 이행함수 종속성으로 인해 3차 정규화를 만족하지 못함
- <책번호>는 <홈페이지>에 직접 영향을 주는 관계가 아니기 때문에(A → C 관계), <책번호, 춢판사> 테이블, <출판사, 홈페이지> 테이블로 분리하여 이행 함수 관계를 제거하여 3차 정규화를 만족함
⓸ 보이스-코드 정규화(BCNF, Boyce and Codd Normal Form) : 결정자 함수 종속 제거, 모든 결정자가 후보키인 정규화 과정
< 보이스-코드 정규화 >
학번 | 과목명 | 교수명 |
202001 | C 언어 | 장동길 |
202001 | DB | 홍길동 |
202002 | DB | 홍길동 |
⬇️
학번 | 교수명 | / | 교수명 | 과목명 |
202001 | 장동길 | 장동길 | C 언어 | |
202001 | 홍길동 | 홍길동 | DB | |
202002 | 홍길동 | / | / |
⬇️
- <학번, 과목명>이 <교수명>에 영향을 주고, <교수명>이 <과목명>에 영향을 주는 관계로, <교수명>은 <과목명>에 영향을 주지만, 한 테이블에 같이 존재
하고 <교수명>은 키가 아닌 상황이므로 결정자인 <교수명>이 후보키가 아님
- <학번, 과목명, 교수명>을 한 테이블에 두는 것은 <교수명>이 결정자이지만 후보키가 아니기 때문에 보이스-코드 정규화를 만족하지 못함
- <교수명>은 <과목명>에 직접 영향을 주기 때문에, <교수명, 과목명> 테이블로 분리하여 교수명이 후보키 역할을 하도록 하여 보이스-코드 정규화를 만족함
⓹ 4차 정규화(3NF, 4 Normal Form) : 다치(다중값) 종속 제거, 특정 속성값에 따라 선택적인 속성을 분리하는 정규화 과정
< 4차 정규화 >
개발자 | 자격증 | 언어 |
홍길동 | 정보처리기사 | C |
홍길동 | 빅데이터분석기사 | C++ |
장동길 | 정보보안기사 | JAVA |
⬇️
개발자 | 자격증 | / | 개발자 | 언어 |
홍길동 | 정보처리기사 | 홍길동 | C | |
홍길동 | 빅데이터분석기사 | 홍길동 | C++ | |
장동길 | 정보보안기사 | 장동길 | JAVA |
⬇️
- <개발자>마다 <자격증> 값들이 여러 개 존재하고, 특정 <개발자>마다 <언어> 값들이 여러 개 존재하는 경우 다치 종속 관계라 함
- <개발자>별로<개발자> 별로 여러 <자격증> 값을 가지고 있고, <개발자> 별로 여러 <언어> 값을 가지고 있으므로 <개발자, 자격증>, <개발자, 언어> 테이블로 분리하여
관리하면 다치 종속 관계를 제거하기 때문에 4차 정규화를 만족함
⓺ 5차 정규화(5 Normal Form) : 조인 종속을 제거하는 정규화 과정
< 4차 정규화에서 조인 연산 후 결과 >
개발자 | 자격증 | ⨝ | 개발자 | 언어 |
홍길동 | 정보처리기사 | 홍길동 | C | |
홍길동 | 빅데이터분석기사 | 홍길동 | C++ | |
장동길 | 정보보안기사 | 장동길 | JAVA |
⬇️
개발자 | 자격증 | 언어 |
홍길동 | 정보처리기사 | C |
홍길동 | 빅데이터분석기사 | C |
홍길동 | 정보처리기사 | C++ |
홍길동 | 빅데이터분석기사 | C++ |
장동길 | 정보보안기사 | JAVA |
- 4차 정규화 테이블에 대해 조인 연산을 수행하면 4차 정규화 수행 전 데이터와 다르게 되는 문제인 조인 종속이 발생함
< 5차 정규화>
개발자 | 자격증 | 언어 |
홍길동 | 정보처리기사 | C |
홍길동 | 빅데이터분석기사 | C++ |
장동길 | 정보보안기사 | JAVA |
⬇️
개발자 | 자격증 | / | 자격증 | 언어 | / | 개발자 | 언어 |
홍길동 | 정보처리기사 | 정보처리기사 | C | 홍길동 | C | ||
홍길동 | 빅데이터분석기사 | 빅데이터분석기사 | C++ | 홍길동 | C++ | ||
장동길 | 정보보안기사 | 정보보안기사 | JAVA | 장동길 | JAVA |
⬇️
- 조인 종속 관계를 제거하기 위해서는 모든 속성 관계인 <개발자, 자격증>, <개발자, 언어>뿐만 아니라 <자격증, 언어> 관계에 대한 테이블을 만들어
줌으로써 조인했을 때 정확히 원래의 데이터로 복원할 수 있게 함
(7) 반 정규화(De-Normalization)
1. 반 정규화의 개념
- 정규화된 엔터티, 속성, 관계에 대해 성능 향상과 개발 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링의 기법
- 비정규화, 역정규화라고도 불림
2. 반 정규화의 특징
- 장점 : 반 정규화된 데이터 구조는 성능 향상과 관리의 효율성이 증가
- 단점 : 데이텅의 일관성 및 정합성 저하, 유지를 위한 비용이 별도로 발생하여 성능에 나쁜 영향을 미칠 수 있음
- 반 정규화를 위해서는 데이터 일관성과 무결성을 우선으로 할지 DB의 성능과 단순화에 우선순위를 둘 것인지를 비교하여 조정하는 과정이 중요함
※ 반 정규화 절차
⓵ 대상 조사 : 범위 처리 빈도수, 대량 범위 처리, 통계성 프로세스, 테이블 조인 수를 고려
⓶ 다른 방법 유도 : 뷰 테이블, 클러스터링, 인덱스 조정, 애플리케이션 변경 등을 유도
⓷ 반 정규화를 적용
3. 반 정규화 기법
구분 | 수행 방법 | 설명 |
테이블 | 테이블 병합 | 1:1 관계, 1:M 관계를 통합하여 조인 횟수를 줄여 성능을 향상 |
테이블 분할 | 테이블을 수직 또는 수평으로 분할 | |
중복 테이블 추가 | 대량의 데이터들에 대한 집계함수(GROUP BY, SUM 등)를 사용하여 실시간 통계정보를 계산하는 경우에 효과적인 수행을 위해 별도의 통계 테이블을 두거나 중복 테이블을 추가 - 집계 테이블 추가 : 집계 데이터를 위한 테이블을 생성하는 방법 - 진행 테이블 추가 : 이력 관리 등의 목적으로 테이블을 추가하는 방법 - 특정 부분만을 포함하는 테이블 추가 : 해당 부분 만으로 새로운 테이블을 생성하는 방법 |
|
컬럼 | 컬럼 중복화 | 조인 성능 향상을 위한 중복 허용 |
관계 | 중복관계 추가 | 성능 저하를 예방하기 위해 추가적 관계를 맺는 방법 |
'자격증 > 정보처리기사' 카테고리의 다른 글
[정보처리기사] 데이터 입출력 구현 : 데이터베이스 기초 활용 (0) | 2024.08.08 |
---|---|
[정보처리기사] 데이터 입출력 구현 : 데이터 저장소(3) (0) | 2024.08.08 |
[정보처리기사] 데이터 입출력 구현 - 데이터 저장소(1) (0) | 2024.07.17 |
[정보처리기사] 화면 설계 : UI 설계(2) (1) | 2024.01.31 |
[정보처리기사] 화면 설계 - UI 설계(1) (0) | 2024.01.31 |