From 5a624c0faf7f3c686f203c3ee0752c72ca9580b5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=EC=9C=A4=EA=B0=80=EC=98=81?=
Date: Sun, 8 Aug 2021 11:59:06 +0900
Subject: [PATCH 1/9] =?UTF-8?q?[Database]=20=EC=A0=95=EA=B7=9C=ED=99=94=20?=
=?UTF-8?q?=EA=B9=83=20=EC=A0=95=EB=A6=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
contents/database/README.md | 79 +++++++++++++++++++++++++++++++++----
1 file changed, 71 insertions(+), 8 deletions(-)
diff --git a/contents/database/README.md b/contents/database/README.md
index a3d5d29..7c13d10 100644
--- a/contents/database/README.md
+++ b/contents/database/README.md
@@ -91,17 +91,80 @@ RDBMS는 테이블 기반(Table based) DBMS로, 테이블들의 집합으로 데
## 정규화
-정규화란 **종속성 이론**을 통해 데이터의 중복성을 최소화하고 일관성 등을 보장하여 데이터베이스의 품질을 보장하고 성능의 향상해나가는 과정이다. 정규화 수준이 높을수록 유연한 데이터 구축이 가능하고 데이터의 정확성이 높아지는 반면, 물리적 접근이 복잡하고 너무 많은 조인으로 인해 조회 성능이 저하된다는 특징이 있다.
+정규화란 **함수의 종속성 이론**을 통해 데이터의 중복성을 최소화하고 일관성 등을 보장하여 데이터베이스의 품질을 보장하고 성능의 향상해나가는 과정이다. 정규화 수준이 높을수록 유연한 데이터 구축이 가능하고 데이터의 정확성이 높아지는 반면, 물리적 접근이 복잡하고 너무 많은 조인으로 인해 조회 성능이 저하된다는 특징이 있다
### 정규화의 목적
-- 데이터 구조의 안정성과 무결성을 유지한다.
-- 데이터 모형의 단순화가 가능하다.
-- 효과적인 검색 알고리즘을 생성할 수 있다.
-- 데이터 중복을 배제하여 이상(Anomaly) 발생을 방지하고 저장 공간을 최소화한다.
- - 삽입 이상 (Insertion Anomaly) : 데이터를 삽입할 때 원하지 않은 값들도 함께 삽입되는 현상
- - 갱신 이상 (Update Anomaly) : 데이터를 수정할 때 일부 튜플의 정보만 갱신되어 정보에 모순이 생기는 현상
- - 삭제 이상 (Deletion Anomaly) : 데이터를 삭제할 때 의도와는 상관 없는 값들도 함께 삭제되는 현상
+- 데이터 구조의 안정성과 무결성을 유지한다
+- 데이터 모형의 단순화가 가능하다
+- 효과적인 검색 알고리즘을 생성할 수 있다
+- 데이터 중복을 배제하여 `이상(Anomaly)` 발생을 방지하고 저장 공간을 최소화한다
+
+### 이상(Anomaly)의 개념 및 종류
+
+정규화를 거치지 않으면 **데이터베이스 내에 데이터들이 불필요하게 중복**되어 릴레이션 조작 시 문제가 생기는데, 이를 이상이라고 하며
+삽입 이상, 삭제 이상, 갱신 이상이 있다
+
+- **삽입 이상** (Insertion Anomaly) : 데이터를 삽입할 때 원하지 않은 값들도 함께 삽입되는 현상
+- **갱신 이상** (Update Anomaly) : 데이터를 수정할 때 일부 튜플의 정보만 갱신되어 정보에 모순이 생기는 현상
+- **삭제 이상** (Deletion Anomaly) : 데이터를 삭제할 때 의도와는 상관 없는 값들도 함께 삭제되는 현상
+
+### 정규화 과정
+
+#### INF(제 1 정규형)
+
+릴레이션에 속한 모든 도메인이 원자값만으로 되어있는 정규형이다
+
+#### 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를 만족하는 관계를 의미한다
+```
+
+#### BCNF(Boyce-Codd 정규형)
+
+결정자가 모두 후보키인 정규형이다.(후보키가 아닌 결정자를 제거하는 정규형이다)
+
+
+[BCNF의 제약 조건]
+- 키가 아닌 모든 속성은 각 키에 대하여 완전 종속해야 한다
+- 키가 아닌 모든 속성은 그 자신이 부분적으로 들어가 있지 않은 모든 키에 대해 완전 종속해야 한다
+- 어떤 속성도 키가 아닌 속성에 대해서는 완전 종속 할 수 없다
+
+```bash
+결정자 : 다른 속성을 고유하게 결정하는 하나 이상의 속성 (속성 간의 종속성을 규명할 때 기준이 되는 값)
+종속자 : 결정자의 값에 의해 정해지는 값
+후보키 : 테이블에서 각 행을 유일하게 식별할 수 있는 최소한의 속성들의 집합
+```
+
+#### 4NF(제 4 정규형)
+
+다치 종속을 제거하는 정규형이다.
+
+```bash
+다치 종속 : 속성 A -> (속성 B, 속성 C) 일때, A->B를 만족하고, **B와 C가 무관**할때 B는 A에 다치종속 관계하고 하며, A->>B 라고 한다.
+```
+
+#### 5NF (제 5 정규형)
+
+모든 조인 종속이 릴레이션의 후보키를 통해서만 성립되는 정규형이다.
+
+```bash
+한 테이블을 분해했다가 분해된 결과들을 다시 조인하면 당연히 원래의 테이블로 복원된다고 기대하지만 그렇지 못한 경우가 있다. 다시 조인하면 예상하지 못했던 튜플들이 생성되는 경우가 발생한다.
+
+조인 종속 : 테이블을 분해한 결과를 다시 조인했을 때 원래의 테이블과 동일하게 복원되는 제약조건이다. 조인 종속성은 다치 종속의 개념을 더 일반화한 것이다
+```
---
From 617b48663a8a54be641d2f53de03f459c7410c63 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=EC=9C=A4=EA=B0=80=EC=98=81?=
Date: Sun, 8 Aug 2021 12:03:09 +0900
Subject: [PATCH 2/9] =?UTF-8?q?[Database]=20=EC=A0=95=EA=B7=9C=ED=99=94=20?=
=?UTF-8?q?=EA=B9=83=20=EC=A0=95=EB=A6=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
contents/database/README.md | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/contents/database/README.md b/contents/database/README.md
index 7c13d10..98f7062 100644
--- a/contents/database/README.md
+++ b/contents/database/README.md
@@ -161,11 +161,16 @@ RDBMS는 테이블 기반(Table based) DBMS로, 테이블들의 집합으로 데
모든 조인 종속이 릴레이션의 후보키를 통해서만 성립되는 정규형이다.
```bash
-한 테이블을 분해했다가 분해된 결과들을 다시 조인하면 당연히 원래의 테이블로 복원된다고 기대하지만 그렇지 못한 경우가 있다. 다시 조인하면 예상하지 못했던 튜플들이 생성되는 경우가 발생한다.
+한 테이블을 분해했다가 분해된 결과들을 다시 조인하면 당연히 원래의 테이블로 복원된다고 기대하지만 그렇지 못한 경우가 있다.
+다시 조인하면 예상하지 못했던 튜플들이 생성되는 경우가 발생한다.
-조인 종속 : 테이블을 분해한 결과를 다시 조인했을 때 원래의 테이블과 동일하게 복원되는 제약조건이다. 조인 종속성은 다치 종속의 개념을 더 일반화한 것이다
+조인 종속 : 테이블을 분해한 결과를 다시 조인했을 때 원래의 테이블과 동일하게 복원되는 제약조건이다.
```
+### Reference
+
+- 2021 시나공 정보처리기사 필기
+
---
## 인덱스 (Index)
From 738dda7e90b9197eba88c84662ee6d90fc26c5e1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=EC=9C=A4=EA=B0=80=EC=98=81?=
Date: Fri, 13 Aug 2021 13:28:05 +0900
Subject: [PATCH 3/9] 20210813
---
contents/database/README.md | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/contents/database/README.md b/contents/database/README.md
index 98f7062..ffa0ecc 100644
--- a/contents/database/README.md
+++ b/contents/database/README.md
@@ -91,7 +91,7 @@ RDBMS는 테이블 기반(Table based) DBMS로, 테이블들의 집합으로 데
## 정규화
-정규화란 **함수의 종속성 이론**을 통해 데이터의 중복성을 최소화하고 일관성 등을 보장하여 데이터베이스의 품질을 보장하고 성능의 향상해나가는 과정이다. 정규화 수준이 높을수록 유연한 데이터 구축이 가능하고 데이터의 정확성이 높아지는 반면, 물리적 접근이 복잡하고 너무 많은 조인으로 인해 조회 성능이 저하된다는 특징이 있다
+정규화란 **함수의 종속성 이론**을 통해 데이터의 중복성을 최소화하고 일관성 등을 보장하여 데이터베이스의 품질과 성능을 향상키시는 과정이다. 정규화 수준이 높을수록 유연한 데이터 구축이 가능하고 데이터의 정확성이 높아지는 반면, 물리적 접근이 복잡하고 너무 많은 조인으로 인해 조회 성능이 저하된다는 특징이 있다
### 정규화의 목적
@@ -153,7 +153,16 @@ RDBMS는 테이블 기반(Table based) DBMS로, 테이블들의 집합으로 데
다치 종속을 제거하는 정규형이다.
```bash
-다치 종속 : 속성 A -> (속성 B, 속성 C) 일때, A->B를 만족하고, **B와 C가 무관**할때 B는 A에 다치종속 관계하고 하며, A->>B 라고 한다.
+다치 종속 : 속성 A -> (속성 B, 속성 C) 일때, A->B를 만족하고, **B와 C가 무관**할때 B는 A에 다치종속 관계라고 하며, A->>B 라고 한다.
+
+다치종속을 제거하지 않으면 A->>B 상황에서 C값이 중복될수 있다.
+예를들어,
+
+(회원번호)-> (이름, 주문번호) 인 테이블에서
+(회원번호 ->> 주문번호) 일때,
+
+흐쟈미란 고객이 책을 두번 주문하면 흐쟈미 이름이 불필요하게 두번 중복된다.
+이를 해결하기 위해서는 (회원번호->이름), (회원번호->주문번호)로 쪼개주는것이 제 4정규형이다.
```
#### 5NF (제 5 정규형)
From ad3b1904fd02368d8953e483dd5bd86c31b8f5fc Mon Sep 17 00:00:00 2001
From: yoongoing
Date: Sun, 15 Aug 2021 22:05:51 +0900
Subject: [PATCH 4/9] =?UTF-8?q?Database=20=EC=A0=95=EA=B7=9C=ED=99=94?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
contents/database/README.md | 149 ++++++++++++++++++++++++++++--------
1 file changed, 116 insertions(+), 33 deletions(-)
diff --git a/contents/database/README.md b/contents/database/README.md
index b0604c9..154b372 100644
--- a/contents/database/README.md
+++ b/contents/database/README.md
@@ -91,62 +91,144 @@ RDBMS는 테이블 기반(Table based) DBMS로, 테이블들의 집합으로 데
## 정규화
-정규화란 **종속성 이론**을 통해 데이터의 중복성을 최소화하고 일관성 등을 보장하여 데이터베이스의 품질을 보장하고 성능의 향상해나가는 과정이다. 정규화 수준이 높을수록 유연한 데이터 구축이 가능하고 데이터의 정확성이 높아지는 반면, 물리적 접근이 복잡하고 너무 많은 조인으로 인해 조회 성능이 저하된다는 특징이 있다.
+정규화란 **함수의 종속성 이론**을 통해 데이터의 중복성을 최소화하고 일관성 등을 보장하여 데이터베이스의 품질과 성능을 향상키시는 과정이다. 정규화 수준이 높을수록 유연한 데이터 구축이 가능하고 데이터의 정확성이 높아지는 반면, 물리적 접근이 복잡하고 너무 많은 조인으로 인해 조회 성능이 저하된다는 특징이 있다
### 정규화의 목적
-- 데이터 구조의 안정성과 무결성을 유지한다.
-- 데이터 모형의 단순화가 가능하다.
-- 효과적인 검색 알고리즘을 생성할 수 있다.
-- 데이터 중복을 배제하여 이상(Anomaly) 발생을 방지하고 저장 공간을 최소화한다.
- - 삽입 이상 (Insertion Anomaly) : 데이터를 삽입할 때 원하지 않은 값들도 함께 삽입되는 현상
- - 갱신 이상 (Update Anomaly) : 데이터를 수정할 때 일부 튜플의 정보만 갱신되어 정보에 모순이 생기는 현상
- - 삭제 이상 (Deletion Anomaly) : 데이터를 삭제할 때 의도와는 상관 없는 값들도 함께 삭제되는 현상
+- 데이터 구조의 안정성과 무결성을 유지한다
+- 데이터 모형의 단순화가 가능하다
+- 효과적인 검색 알고리즘을 생성할 수 있다
+- 데이터 중복을 배제하여 `이상(Anomaly)` 발생을 방지하고 저장 공간을 최소화한다
----
+### 이상(Anomaly)의 개념 및 종류
-## 인덱스 (Index)
+정규화를 거치지 않으면 **데이터베이스 내에 데이터들이 불필요하게 중복**되어 릴레이션 조작 시 문제가 생기는데, 이를 이상이라고 하며
+삽입 이상, 삭제 이상, 갱신 이상이 있다
-아래의 자료에서 자세한 설명을 볼 수 있다.
+- **삽입 이상** (Insertion Anomaly) : 데이터를 삽입할 때 원하지 않은 값들도 함께 삽입되는 현상
+- **갱신 이상** (Update Anomaly) : 데이터를 수정할 때 일부 튜플의 정보만 갱신되어 정보에 모순이 생기는 현상
+- **삭제 이상** (Deletion Anomaly) : 데이터를 삭제할 때 의도와는 상관 없는 값들도 함께 삭제되는 현상
-- 작성자 윤가영 | [데이터베이스와 Index](./materials/윤가영_database_&Index.pdf)
+### 정규화 과정
----
+#### 1NF(제 1 정규형)
+
+릴레이션에 속한 모든 도메인이 원자값만으로 되어있는 정규형이다
+
+#### 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를 만족하는 관계를 의미한다
+```
+
+#### BCNF(Boyce-Codd 정규형)
+
+결정자가 모두 후보키인 정규형이다.(후보키가 아닌 결정자를 제거하는 정규형이다)
+
+
+[BCNF의 제약 조건]
+- 키가 아닌 모든 속성은 각 키에 대하여 완전 종속해야 한다
+- 키가 아닌 모든 속성은 그 자신이 부분적으로 들어가 있지 않은 모든 키에 대해 완전 종속해야 한다
+- 어떤 속성도 키가 아닌 속성에 대해서는 완전 종속 할 수 없다
+
+```bash
+결정자 : 다른 속성을 고유하게 결정하는 하나 이상의 속성 (속성 간의 종속성을 규명할 때 기준이 되는 값)
+종속자 : 결정자의 값에 의해 정해지는 값
+후보키 : 테이블에서 각 행을 유일하게 식별할 수 있는 최소한의 속성들의 집합
+```
-## 트랜잭션(Transaction)
+#### 4NF(제 4 정규형)
-트랜잭션이란? 데이터베이스의 상태를 변화시키기 위해 수행되는 작업의 논리적 단위이다.
+다치 종속을 제거하는 정규형이다.
-### ACID
+```bash
+다치 종속 : 속성 A -> (속성 B, 속성 C) 일때, A->B를 만족하고, **B와 C가 무관**할때 B는 A에 다치종속 관계라고 하며, A->>B 라고 한다.
-- Atomicity(원자성) : 트랜잭션에 해당하는 작업 내용이 (모두 성공했을 시) 모두 반영되거나, (하나라도 실패했을 시) 모두 반영되지 않아야 한다.
-- Consistency(일관성) : 트랜잭션 처리 결과는 항상 데이터의 일관성을 보장해야 한다.
-- Isolation(고립성) : 둘 이상의 트랜잭션이 동시에 실행되고 있을 때, 각 트랜잭션은 서로 간섭 없이 독립적으로 수행되어야 한다.
-- Durability(지속성) : 트랜잭션이 성공적으로 완료된다면, 그 결과가 데이터베이스에 영구적으로 반영되어야 한다.
+다치종속을 제거하지 않으면 A->>B 상황에서 C값이 중복될수 있다.
+예를들어,
+(회원번호)-> (이름, 주문번호) 인 테이블에서
+(회원번호 ->> 주문번호) 일때,
+흐쟈미란 고객이 책을 두번 주문하면 흐쟈미 이름이 불필요하게 두번 중복된다.
+이를 해결하기 위해서는 (회원번호->이름), (회원번호->주문번호)로 쪼개주는것이 제 4정규형이다.
+```
-주의사항
+#### 5NF (제 5 정규형)
-Isolation(고립성)을 보장하기 위해 무차별적으로 Lock을 걸다보면 대기시간이 매우 길어지므로 트랜잭션은 최소한으로 사용해야한다.
+릴레이션 R의 모든 조인종속이 R의 후보키를 통해서만 성립되는 정규형이다.
+```bash
+한 테이블을 분해했다가 분해된 결과들을 다시 조인하면 당연히 원래의 테이블로 복원된다고 기대하지만 그렇지 못한 경우가 있다.
+다시 조인하면 예상하지 못했던 튜플들이 생성되는 경우가 발생한다.
+조인 종속 : 테이블을 분해한 결과를 다시 조인했을 때 원래의 테이블과 동일하게 복원되는 제약조건이다.
+```
+릴레이션 R이 다음과 같을때,
+|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|
-![image](https://user-images.githubusercontent.com/22047374/125165837-a951ee00-e1d3-11eb-9b0b-486cc5eff6b2.png)
+|B|C|
+|------|---|
+|p1|c2|
+|p2|c1|
+|p1|c1|
-- Active : 트랜잭션이 실행중인 상태(SQL 실행)
-- Parital Commit : 트랜잭션의 마지막 연산까지 실행했지만, commit 연산이 실행되기 직전의 상태
-- Commited : 트랜잭션이 성공적으로 종료되고 commit 연산까지 실행 완료된 상태
-- Failed : 트랜잭션 실행에 오류가 발생한 상태
-- Aborted: 트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태
+|A|C|
+|------|--|
+|s1|c2|
+|s1|c1|
+|s2|c1|
+다시 합치면
+|A|B|C|
+|------|---|---|
+|s1|p1|c2|
+|s1|p2|c1|
+|s2|p1|c1|
+|s1|p1|c1|
+|s2|p1|c2| ====> 이상값 발견!!!!
-1. Commit : 데이터베이스 내의 연산이 성공적으로 종료되어 연산에 의한 수정 내용을 지속적으로 유지하기 위한 명령어이다.
+이런 상황을 방지하기 위해 제 5정규형을 시행합니다.
-2. Rollback : 데이터베이스 내의 연산이 비정상적으로 종료되거나 정상적으로 수행이 되었다 하더라도 수행되기 이전의 상태로 되돌리기 위해 연산 내용을 취소할 때 사용하는 명령어이다.
+### Reference
+
+- 2021 시나공 정보처리기사 필기
+
+---
+
+## 인덱스 (Index)
+
+아래의 자료에서 자세한 설명을 볼 수 있다.
+
+- 작성자 윤가영 | [데이터베이스와 Index](./materials/윤가영_database_&Index.pdf)
+
+---
+
+## 트랜잭션(Transaction)과 교착상태
---
@@ -226,7 +308,7 @@ ex2) ex1에 대한 중복을 제거하기 위한 여러개의 전화번호 행
-
+
제3 정규형을 '추이 종속' or '함수적 이행 종속' 단어를 사용하여 설명할 수 있나요?
@@ -245,7 +327,7 @@ ex2) ex1에 대한 중복을 제거하기 위한 여러개의 전화번호 행
반정규화는 진행하면 안됩니다. 개인정보에 관한 데이터베이스로서 데이터의 무결성과 보안이 제일 중요합니다.
만약 반정규화로 인해 '삽입, 삭제, 수정 이상'이 발생하는 경우에는 데이터의 무결성이 깨질 수 있고 더군다나 개인정보라서 데이터의 무결성이 깨지면 복원에 큰 어려움이 있습니다. 따라서 반정규화가 아닌 데이터베이스 튜닝, 재구성이 필요해 보입니다.
-
+
@@ -561,3 +643,4 @@ Deadlock Prevention , Avoidance 그리고 Ignorance 세가지 방법중에 실
> - Database System Concepts - 6th edition
> - 시나공 정보처리기사 필기
+
From 5c27213aaf32efd436d059167dc0d7e9b2d1fc87 Mon Sep 17 00:00:00 2001
From: yoongoing
Date: Sun, 15 Aug 2021 22:27:15 +0900
Subject: [PATCH 5/9] Database modify
---
contents/database/README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/contents/database/README.md b/contents/database/README.md
index 154b372..594f99c 100644
--- a/contents/database/README.md
+++ b/contents/database/README.md
@@ -210,7 +210,7 @@ RDBMS는 테이블 기반(Table based) DBMS로, 테이블들의 집합으로 데
|s1|p2|c1|
|s2|p1|c1|
|s1|p1|c1|
-|s2|p1|c2| ====> 이상값 발견!!!!
+|s2|p1|c2| ===> 이상값 발견!!!!
이런 상황을 방지하기 위해 제 5정규형을 시행합니다.
From 54d95243c0c44bca051b0b22384224960804ab74 Mon Sep 17 00:00:00 2001
From: yoongoing
Date: Sun, 15 Aug 2021 22:50:21 +0900
Subject: [PATCH 6/9] =?UTF-8?q?Database=20=EB=B0=98=EC=A0=95=EA=B7=9C?=
=?UTF-8?q?=ED=99=94?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
contents/database/README.md | 80 +++++++++++++++++++++++++++++++++++++
1 file changed, 80 insertions(+)
diff --git a/contents/database/README.md b/contents/database/README.md
index 594f99c..e20fd83 100644
--- a/contents/database/README.md
+++ b/contents/database/README.md
@@ -7,6 +7,7 @@
- [데이터베이스](#데이터베이스)
- [정규화](#정규화)
+- [반정규화](#반정규화)
- [인덱스 (Index)](#인덱스-(index))
- [트랜잭션(Transaction)과 교착상태](#트랜잭션(transaction)과-교착상태)
- [NoSQL](#nosql)
@@ -220,6 +221,85 @@ RDBMS는 테이블 기반(Table based) DBMS로, 테이블들의 집합으로 데
---
+## 반정규화
+
+### 반정규화 개념
+
+반정규화란 시스템의 성능 향상, 개발 및 운영의 편의성등을 위해 정규화된 데이터모델을 통합, 중복, 분리하는 과정으로 의도적으로 정규화 원칙을 위배하는 행위이다.
+
+* 반정규화를 수행하면 시스템의 성능이 향상되고 관리 효율성은 증가하지만, 데이터의 일관성과 정합성은 저하될 수 있다.
+* 과도한 반정규화는 성능을 저하시킨다.
+* 반정규화를 위해서는 사전에 **데이터의 일관성과 무결성을 우선으로 할지, 데이터베이스의 성능과 단순화를 우선**으로 할지 생각한다.
+* 반정규화 방법에는 테이블 통합, 테이블 분할, 중복 데이블 추가, 중복 송성 추가 등이 있다.
+
+
+### 테이블 통합
+
+두 개의 테이블이 조인되는 경우가 많아 하나의 테이블로 합쳐 사용하는 것이 성능 향상에 도움이 될 경우 수행한다.
+`두 개의 테이블에서 발생하는 프로세스가 동일하게 자주 처리되는 경우`, `두 개의 테이블을 이용하여 항상 조회를 수행하는 경우` 테이블 통합을 고려한다.
+
+#### 테이블 통합 시 고려사항
+
+* 검색은 간편하지만, 레코드 증가로 인해 처리량이 증가한다.
+* 데이블 통합으로 인해 입력, 수정, 삭제 규칙이 복잡해질 수 있다.
+
+
+### 테이블 분할
+
+테이블을 수직 또는 수평으로 분할하는 것이다.
+
+1. **수평 분할** : 레코드를 기준으로 테이블을 분할한다.
+2. **수직 분할** : 하나의 테이블에 속성이 너무 많을 경우 속성을 기준으로 테이블을 분할한다.
+ 1. `갱신위주의 속성 분할` : 데이터 갱신 시 레코드 잠금으로 인해 다른 작업을 수행 할 수 없으므로 갱신이 자주 일어나느 속성들을 수직 분할하여 사용한다.
+ 2. `자주 조회되는 속성 분할` : 테이블에서 자주 조회되는 속성이 극히 일부일 경우 자주 사용되는 속성들을 수직분할하여 사용한다.
+ 3. `크기가 큰 속성 분할` : 이미지, 2GB 이상 저장될 수 있는 텍스트 형식으로 된 속성들을 수직분할하여 사용한다.
+ 4. `보안을 적용해야 하는 속성 분할` : 데이블 내의 특정 속성에 대해 보안을 적용할 수 없으므로 보안을 적용해야 하는 속성들을 수직분할 하여 사용한다.
+
+#### 테이블 분할 시 고려사항
+
+* 기본키의 유일성 관리가 어려워진다.
+* 데이터양이 적거나 사용빈도가 낮은 경우 테이블 분할이 필요한지를 고려해야한다.
+* 분할된 테이블로 인해 수행속도가 느려질 수 있다.
+* 검색에 중점을 두어 테이블 분할 여부를 결정해야한다.
+
+
+### 중복 테이블 추가
+
+여러 테이블에서 데이터를 추출해서 사용해야 하거나 다른 서버에 저장된 테이블을 이용해야 하는 경우 중복 테이블을 추가하여 작업의 효율성을 향상시킬 수 있다.
+
+1. 중복 테이블을 추가하는 경우
+ * 정규화로 인해 수행 속도가 느려지는 경우
+ * 많은 범위의 데이터를 자주 처리해야하는 경우
+ * 특정 범위의 데이터만 자주 처리해야 하는 경우
+ * 처리 범위를 줄이지 않고는 수행속도를 개선할 수 없는 경우
+
+2. 중복 테이블을 추가하는 방법
+ 1. `집계 테이블의 추가` : 집계 데이터를 위한 테이블을 생성하고, 각 원본 테이블에 트리거를 설정하여 사용하는 것으로, 트리거의 오버헤드에 유의한다.
+ 2. `진행 테이블의 추가` : 이력 관리 등의 목적으로 추가하는 테이블로, 적절한 데이터 양의 유지와 활용도를 높이기 위해 기본키를 적절히 설정한다.
+ 3. `특정 부분만을 포함하는 테이블의 추가` : 데이터가 많은 테이블의 특정부분만을 사용하는 경우 해당 부분만으로 새로운 테이블을 생성한다.
+
+### 중복 속성 추가
+
+조인해서 데이터를 처리할 때 데이터를 조회하는 경로를 단축하기 위해 자주 사용하는 속성을 하나 더 추가하는 것이다.
+> 중복 속성을 추가하면 데이터의 무결성 확보가 어렵고, 디스크 공간이 추가로 필요하다.
+
+1. 중복 속성을 추가하는 경우
+ * 조인이 자주 발생하는 속성인 경우
+ * 접근 경로가 복잡한 속성인 경우
+ * 액세스 조건으로 자주 사용되는 속성인 경우
+ * 기본키의 형태가 적절하지 않거나 여러 개의 속성으로 구성된 경우
+
+2. 중복 속성 추가 시 고려 사항
+ * 데이블 중복과 속성의 중복을 고려한다.
+ * 데이터 일관성 및 무결성에 유의해야 한다.
+ * 저장공간의 지나친 낭비를 고려한다.
+
+### Reference
+
+- 2021 시나공 정보처리기사 필기
+
+---
+
## 인덱스 (Index)
아래의 자료에서 자세한 설명을 볼 수 있다.
From 2bc7c9b5f195828772c51ba3caa75b6bc403727e Mon Sep 17 00:00:00 2001
From: yoongoing
Date: Sun, 15 Aug 2021 22:52:31 +0900
Subject: [PATCH 7/9] =?UTF-8?q?Database=20=EB=B0=98=EC=A0=95=EA=B7=9C?=
=?UTF-8?q?=ED=99=94?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
contents/database/README.md | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/contents/database/README.md b/contents/database/README.md
index e20fd83..ed3029a 100644
--- a/contents/database/README.md
+++ b/contents/database/README.md
@@ -250,10 +250,10 @@ RDBMS는 테이블 기반(Table based) DBMS로, 테이블들의 집합으로 데
1. **수평 분할** : 레코드를 기준으로 테이블을 분할한다.
2. **수직 분할** : 하나의 테이블에 속성이 너무 많을 경우 속성을 기준으로 테이블을 분할한다.
- 1. `갱신위주의 속성 분할` : 데이터 갱신 시 레코드 잠금으로 인해 다른 작업을 수행 할 수 없으므로 갱신이 자주 일어나느 속성들을 수직 분할하여 사용한다.
- 2. `자주 조회되는 속성 분할` : 테이블에서 자주 조회되는 속성이 극히 일부일 경우 자주 사용되는 속성들을 수직분할하여 사용한다.
- 3. `크기가 큰 속성 분할` : 이미지, 2GB 이상 저장될 수 있는 텍스트 형식으로 된 속성들을 수직분할하여 사용한다.
- 4. `보안을 적용해야 하는 속성 분할` : 데이블 내의 특정 속성에 대해 보안을 적용할 수 없으므로 보안을 적용해야 하는 속성들을 수직분할 하여 사용한다.
+ * `갱신위주의 속성 분할` : 데이터 갱신 시 레코드 잠금으로 인해 다른 작업을 수행 할 수 없으므로 갱신이 자주 일어나느 속성들을 수직 분할하여 사용한다.
+ * `자주 조회되는 속성 분할` : 테이블에서 자주 조회되는 속성이 극히 일부일 경우 자주 사용되는 속성들을 수직분할하여 사용한다.
+ * `크기가 큰 속성 분할` : 이미지, 2GB 이상 저장될 수 있는 텍스트 형식으로 된 속성들을 수직분할하여 사용한다.
+ * `보안을 적용해야 하는 속성 분할` : 데이블 내의 특정 속성에 대해 보안을 적용할 수 없으므로 보안을 적용해야 하는 속성들을 수직분할 하여 사용한다.
#### 테이블 분할 시 고려사항
@@ -274,9 +274,9 @@ RDBMS는 테이블 기반(Table based) DBMS로, 테이블들의 집합으로 데
* 처리 범위를 줄이지 않고는 수행속도를 개선할 수 없는 경우
2. 중복 테이블을 추가하는 방법
- 1. `집계 테이블의 추가` : 집계 데이터를 위한 테이블을 생성하고, 각 원본 테이블에 트리거를 설정하여 사용하는 것으로, 트리거의 오버헤드에 유의한다.
- 2. `진행 테이블의 추가` : 이력 관리 등의 목적으로 추가하는 테이블로, 적절한 데이터 양의 유지와 활용도를 높이기 위해 기본키를 적절히 설정한다.
- 3. `특정 부분만을 포함하는 테이블의 추가` : 데이터가 많은 테이블의 특정부분만을 사용하는 경우 해당 부분만으로 새로운 테이블을 생성한다.
+ * `집계 테이블의 추가` : 집계 데이터를 위한 테이블을 생성하고, 각 원본 테이블에 트리거를 설정하여 사용하는 것으로, 트리거의 오버헤드에 유의한다.
+ * `진행 테이블의 추가` : 이력 관리 등의 목적으로 추가하는 테이블로, 적절한 데이터 양의 유지와 활용도를 높이기 위해 기본키를 적절히 설정한다.
+ * `특정 부분만을 포함하는 테이블의 추가` : 데이터가 많은 테이블의 특정부분만을 사용하는 경우 해당 부분만으로 새로운 테이블을 생성한다.
### 중복 속성 추가
From c02208fe98eaa0809da37dca8737c75cb7cb5a6b Mon Sep 17 00:00:00 2001
From: Seogeurim
Date: Sat, 4 Sep 2021 01:12:06 +0900
Subject: [PATCH 8/9] =?UTF-8?q?[Database]=20=EC=A0=95=EA=B7=9C=ED=99=94=20?=
=?UTF-8?q?=EB=B3=B4=EC=B6=A9=20=EC=84=A4=EB=AA=85=20=EC=88=98=EC=A0=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
contents/database/README.md | 26 ++++++++++++++++++++------
1 file changed, 20 insertions(+), 6 deletions(-)
diff --git a/contents/database/README.md b/contents/database/README.md
index ed3029a..ec77891 100644
--- a/contents/database/README.md
+++ b/contents/database/README.md
@@ -176,29 +176,38 @@ RDBMS는 테이블 기반(Table based) DBMS로, 테이블들의 집합으로 데
조인 종속 : 테이블을 분해한 결과를 다시 조인했을 때 원래의 테이블과 동일하게 복원되는 제약조건이다.
```
+
+
+5NF를 실시하는 이유 예시로 보기
+
+
+> "다시 조인하면 예상하지 못했던 튜플들이 생성되는 경우"
+
릴레이션 R이 다음과 같을때,
+
|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|C|
-|------|--|
+|---|---|
|s1|c2|
|s1|c1|
|s2|c1|
@@ -206,15 +215,20 @@ RDBMS는 테이블 기반(Table based) DBMS로, 테이블들의 집합으로 데
다시 합치면
|A|B|C|
-|------|---|---|
+|---|---|---|
|s1|p1|c2|
|s1|p2|c1|
|s2|p1|c1|
|s1|p1|c1|
-|s2|p1|c2| ===> 이상값 발견!!!!
+|**s2**|**p1**|**c2**|
+
+===> 마지막 튜플에서 이상값 발견!!!!
이런 상황을 방지하기 위해 제 5정규형을 시행합니다.
+
+
+
### Reference
- 2021 시나공 정보처리기사 필기
From 2b23dde5624dc5bcbeaddada3c7c547075a92d8f Mon Sep 17 00:00:00 2001
From: Seogeurim
Date: Sat, 4 Sep 2021 01:13:34 +0900
Subject: [PATCH 9/9] =?UTF-8?q?[Database]=20=EB=8D=B0=EC=9D=B4=ED=84=B0?=
=?UTF-8?q?=EB=B2=A0=EC=9D=B4=EC=8A=A4=20=EB=85=B8=ED=8A=B8=20=EC=88=98?=
=?UTF-8?q?=EC=A0=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
불필요한 reference 삭제
---
contents/database/README.md | 4 ----
1 file changed, 4 deletions(-)
diff --git a/contents/database/README.md b/contents/database/README.md
index ec77891..649697d 100644
--- a/contents/database/README.md
+++ b/contents/database/README.md
@@ -229,10 +229,6 @@ RDBMS는 테이블 기반(Table based) DBMS로, 테이블들의 집합으로 데
-### Reference
-
-- 2021 시나공 정보처리기사 필기
-
---
## 반정규화