IT Memory Note

[정보처리기사] 데이터 입출력 구현 : 데이터 저장소(2) 본문

자격증/정보처리기사

[정보처리기사] 데이터 입출력 구현 : 데이터 저장소(2)

h00ddu 2024. 8. 7. 19:07

 

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차 정규화를 만족하지 못함

  - 부분 관계인 <서비스 이름, 서비스 가격> 관계를 별도의 테이블로 두면 부분 함수 종속 관계가 제거되어 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사 / /

                                                                             ⬇️

3차 정규화 함수 종속

 

  - <책번호>가 <출판사>에 영향을 주고, <출판사>가 <홈페이지>에 영향을 주는 관계인 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차 정규화 관계

 

  - <개발자>마다 <자격증> 값들이 여러 개 존재하고, 특정 <개발자>마다 <언어> 값들이 여러 개 존재하는 경우 다치 종속 관계라 함

  - <개발자>별로<개발자> 별로 여러 <자격증> 값을 가지고 있고, <개발자> 별로 여러 <언어> 값을 가지고 있으므로 <개발자, 자격증>, <개발자, 언어> 테이블로 분리하여

    관리하면 다치 종속 관계를 제거하기 때문에 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

                                                                             ⬇️

5차 정규화 관계

 

  - 조인 종속 관계를 제거하기 위해서는 모든 속성 관계인 <개발자, 자격증>, <개발자, 언어>뿐만 아니라 <자격증, 언어> 관계에 대한 테이블을 만들어

    줌으로써 조인했을 때 정확히 원래의 데이터로 복원할 수 있게 함


 

(7) 반 정규화(De-Normalization)

 

1. 반 정규화의 개념

 

  • 정규화된 엔터티, 속성, 관계에 대해 성능 향상과 개발 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링의 기법
  • 비정규화, 역정규화라고도 불림

2. 반 정규화의 특징

 

  • 장점 : 반 정규화된 데이터 구조는 성능 향상과 관리의 효율성이 증가
  • 단점 : 데이텅의 일관성 및 정합성 저하, 유지를 위한 비용이 별도로 발생하여 성능에 나쁜 영향을 미칠 수 있음
  • 반 정규화를 위해서는 데이터 일관성과 무결성을 우선으로 할지 DB의 성능과 단순화에 우선순위를 둘 것인지를 비교하여 조정하는 과정이 중요함

※ 반 정규화 절차

⓵ 대상 조사 : 범위 처리 빈도수, 대량 범위 처리, 통계성 프로세스, 테이블 조인 수를 고려

⓶ 다른 방법 유도 : 뷰 테이블, 클러스터링, 인덱스 조정, 애플리케이션 변경 등을 유도

⓷ 반 정규화를 적용


3. 반 정규화 기법

 

구분 수행 방법 설명
테이블 테이블 병합 1:1 관계, 1:M 관계를 통합하여 조인 횟수를 줄여 성능을 향상
테이블 분할 테이블을 수직 또는 수평으로 분할
중복 테이블 추가 대량의 데이터들에 대한 집계함수(GROUP BY, SUM 등)를 사용하여 실시간 통계정보를 계산하는 경우에 효과적인 수행을 위해 별도의 통계 테이블을 두거나 중복 테이블을 추가
 - 집계 테이블 추가 : 집계 데이터를 위한 테이블을 생성하는 방법
 - 진행 테이블 추가 : 이력 관리 등의 목적으로 테이블을 추가하는 방법
 - 특정 부분만을 포함하는 테이블 추가 : 해당 부분 만으로 새로운 테이블을 생성하는 방법
컬럼 컬럼 중복화 조인 성능 향상을 위한 중복 허용
관계 중복관계 추가 성능 저하를 예방하기 위해 추가적 관계를 맺는 방법