Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Database] 정규화 #64

Merged
merged 18 commits into from
Sep 4, 2021
Merged
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 76 additions & 8 deletions contents/database/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,17 +91,85 @@ RDBMS는 테이블 기반(Table based) DBMS로, 테이블들의 집합으로 데

## 정규화

정규화란 **종속성 이론**을 통해 데이터의 중복성을 최소화하고 일관성 등을 보장하여 데이터베이스의 품질을 보장하고 성능의 향상해나가는 과정이다. 정규화 수준이 높을수록 유연한 데이터 구축이 가능하고 데이터의 정확성이 높아지는 반면, 물리적 접근이 복잡하고 너무 많은 조인으로 인해 조회 성능이 저하된다는 특징이 있다.
정규화란 **함수의 종속성 이론**을 통해 데이터의 중복성을 최소화하고 일관성 등을 보장하여 데이터베이스의 품질을 보장하고 성능의 향상해나가는 과정이다. 정규화 수준이 높을수록 유연한 데이터 구축이 가능하고 데이터의 정확성이 높아지는 반면, 물리적 접근이 복잡하고 너무 많은 조인으로 인해 조회 성능이 저하된다는 특징이 있다
Seogeurim marked this conversation as resolved.
Show resolved Hide resolved

### 정규화의 목적

- 데이터 구조의 안정성과 무결성을 유지한다.
- 데이터 모형의 단순화가 가능하다.
- 효과적인 검색 알고리즘을 생성할 수 있다.
- 데이터 중복을 배제하여 이상(Anomaly) 발생을 방지하고 저장 공간을 최소화한다.
- 삽입 이상 (Insertion Anomaly) : 데이터를 삽입할 때 원하지 않은 값들도 함께 삽입되는 현상
- 갱신 이상 (Update Anomaly) : 데이터를 수정할 때 일부 튜플의 정보만 갱신되어 정보에 모순이 생기는 현상
- 삭제 이상 (Deletion Anomaly) : 데이터를 삭제할 때 의도와는 상관 없는 값들도 함께 삭제되는 현상
- 데이터 구조의 안정성과 무결성을 유지한다
- 데이터 모형의 단순화가 가능하다
- 효과적인 검색 알고리즘을 생성할 수 있다
- 데이터 중복을 배제하여 `이상(Anomaly)` 발생을 방지하고 저장 공간을 최소화한다

### 이상(Anomaly)의 개념 및 종류

정규화를 거치지 않으면 **데이터베이스 내에 데이터들이 불필요하게 중복**되어 릴레이션 조작 시 문제가 생기는데, 이를 이상이라고 하며
삽입 이상, 삭제 이상, 갱신 이상이 있다

- **삽입 이상** (Insertion Anomaly) : 데이터를 삽입할 때 원하지 않은 값들도 함께 삽입되는 현상
- **갱신 이상** (Update Anomaly) : 데이터를 수정할 때 일부 튜플의 정보만 갱신되어 정보에 모순이 생기는 현상
- **삭제 이상** (Deletion Anomaly) : 데이터를 삭제할 때 의도와는 상관 없는 값들도 함께 삭제되는 현상

### 정규화 과정

#### INF(제 1 정규형)

릴레이션에 속한 모든 도메인이 원자값만으로 되어있는 정규형이다
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

INF -> 1NF인 것 같네요!

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수정해놓겠습니다!


#### 2NF(제 2 정규형)

1NF를 만족하고, 부분 함수적 종속을 제거하여 기본키가 아닌 모든 속성이 기본키에 대하여 완전 함수적 종속을 만족하는 정규형이다

```bash
완전 함수적 종속 : 만약 (속성 A, 속성 B) -> 속성 C 일때, A->C, B->C 모두 성립될때 완전 함수적 종속이라 한다
부분 함수적 종속 : 만약 (속성 A, 속성 B) -> 속성 C 일때, A->C, B->C 중 하나만 성립될때(모두 성립 x) 부분 함수적 종속이라 한다
```

#### 3NF(제 3 정규형)

2NF를 만족하고, 이행적 함수 종속을 제거하는 정규형이다

```bash
이행적 종속 : A -> B, B -> C 의 종속관계에서 A -> C를 만족하는 관계를 의미한다
```
Comment on lines +119 to +134
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

각 종속 관계를 왜 제거해야 하는지에 대한 설명이 추가되면 좋을 것 같아요 !!

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

모든 종속은 이상값을 최소화하고 제거하기 위함인데 추가해놓겠습니다!


#### BCNF(Boyce-Codd 정규형)

결정자가 모두 후보키인 정규형이다.(후보키가 아닌 결정자를 제거하는 정규형이다)
</br>

[BCNF의 제약 조건]
- 키가 아닌 모든 속성은 각 키에 대하여 완전 종속해야 한다
- 키가 아닌 모든 속성은 그 자신이 부분적으로 들어가 있지 않은 모든 키에 대해 완전 종속해야 한다
- 어떤 속성도 키가 아닌 속성에 대해서는 완전 종속 할 수 없다

```bash
결정자 : 다른 속성을 고유하게 결정하는 하나 이상의 속성 (속성 간의 종속성을 규명할 때 기준이 되는 값)
종속자 : 결정자의 값에 의해 정해지는 값
후보키 : 테이블에서 각 행을 유일하게 식별할 수 있는 최소한의 속성들의 집합
```

#### 4NF(제 4 정규형)

다치 종속을 제거하는 정규형이다.

```bash
다치 종속 : 속성 A -> (속성 B, 속성 C) 일때, A->B를 만족하고, **B와 C가 무관**할때 B는 A에 다치종속 관계하고 하며, A->>B 라고 한다.
Seogeurim marked this conversation as resolved.
Show resolved Hide resolved
Seogeurim marked this conversation as resolved.
Show resolved Hide resolved
```

#### 5NF (제 5 정규형)

모든 조인 종속이 릴레이션의 후보키를 통해서만 성립되는 정규형이다.
yoongoing marked this conversation as resolved.
Show resolved Hide resolved

```bash
한 테이블을 분해했다가 분해된 결과들을 다시 조인하면 당연히 원래의 테이블로 복원된다고 기대하지만 그렇지 못한 경우가 있다.
다시 조인하면 예상하지 못했던 튜플들이 생성되는 경우가 발생한다.
Comment on lines +173 to +175
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

예를 들면 어떤 경우인지 알 수 있을까요?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A B C
ㅡㅡㅡㅡㅡ
s1 p1 c2
s1 p2 c1
s2 p1 c1
s1 p1 c1

이 테이블의 경우[A,B] [B,C] [A,C] 로 쪼갤때 아래와 같습니다

A B
ㅡㅡㅡ
s1 p1
s1 p2
s2 p1

B C
ㅡㅡㅡ
p1 c2
p2 c1
p1 c1

A D
ㅡㅡㅡ
s1 c2
s1 c1
s2 c1

[A,B]+[B,C]+[A,C] 다시 조인하면

A B C
ㅡㅡㅡㅡㅡ
s1 p1 c2
s1 p1 c1
s1 p2 c1
s2 p1 c2 ===> 이상값 발견!
s2 p1 c1

이런 이상 상황을 없애기 위해 제 5정규형을 시행합니다. 적분상수를 떠올리시면 편할 것 같아요!
@Seogeurim

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오 !!! 오 !! 신기하네요 바아로 이해됐습니당 !! 감사합니다 ~!!


조인 종속 : 테이블을 분해한 결과를 다시 조인했을 때 원래의 테이블과 동일하게 복원되는 제약조건이다.
```

### Reference

- 2021 시나공 정보처리기사 필기

---

Expand Down