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

[ming] Chapter 4. DATABASE 설계 & AWS RDS 설정 #16

Merged
merged 4 commits into from
May 8, 2024
Merged
Show file tree
Hide file tree
Changes from all 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
152 changes: 152 additions & 0 deletions docs/chapter4/Ch04Keyword.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
# **Chapter 4. DATABASE 설계 & AWS RDS 설정**
4주차 워크북 - Database, AWS RDS

<br>

# **외래키**
외부 키, foreign key

서로 다른 두 테이블을 연관지을 때 사용한다.
<br>
<br>

**FK의 특징**
1. FK는 참조되는 테이블의 PK만 참조한다.
2. FK를 생성하기 전에 PK를 먼저 생성해야 한다.

**FK 정의하는 코드**

```sql
Create table deptName(

Choose a reason for hiding this comment

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

deptcode 처럼 자연상수로 표현하면 더 좋을 것 같아요!

deptName varchar(20) primary key,
building varchar(20)
)

Create table course(
cID char(5) primary key,
title varchar(20),
deptName varchar(20),
credit integer,
foreign key (deptName) references department);
```

<br>
<br>

# **기본키**
기본 키, primary key

테이블 내 모든 레코드를 각각 식별할 수 있는 고유 번호이다.

**PK의 특징**
1. 테이블 내에서 PK는 중복될 수 없다.
2. PK는 NULL값이 될 수 없다.
3. 모든 테이블에 PK가 존재할 필요는 없다.
<br>
<br>


# **수퍼키**
수퍼키, super key

테이블에서 tuple을 유일하게 식별할 수 있는 속성의 집합을 의미한다.

![](./img/superkey.png)
<br>
<br>


# **후보키**
후보 키, candidate key

수퍼키의 유일성을 유지하면서 minimal 속성으로 구성된 키이다. minimal이란 **유일성을 유지**하면서 개수가 가장 적은 속성을 의미한다.

![](./img/candidate.png)
<br>
<br>


# **ER 다이어그램**
ERD: Entity Relation Diagram
데이터와 그들 간의 관계를 사람이 이해할 수 있는 형태로 표현(모델링)하는 도구이다. ER 다이어그램의 표기법은 매우 다양하기 때문에 동일한 다이어그램도 다른 모습으로 표현할 수 있다.

사각형은 개체(도메인) 집합, 마름모는 관계성 집합, 밑줄은 PK 속성을 의미한다.

![](./img/ER%20diagram.png)
<br>
<br>


# **복합키**
테이블은 다수 개의 attribute를 PK로 가질 수 있다.
```sql
-- e.g.) takes 테이블: 학생이 수강하는 강의 정보
Create table takes(
sID char(5),
cID char(5),
semester char(6),
year numeric(4, 0),
grade char(2)),
constraint takes_PK primary key(sID, cID, semester, year);
```
takes 테이블은 sID, cID, semester, year 4개의 attribute를 PK로 가진다. 이것은 'sID+cID+semester+year'인 하나의 문자열을 PK로 여긴다고 봐도 좋다. 만약 takes 테이블에

```
// pk만 모아보기
sID cID semester year
1 30 spring 2022
1 30 winter 2022
```
첫 번째 행은 1번 학생이 강의번호 30번을 2022년 봄학기에 수강했다는 의미이고, 두 번째 행은 1번 학생이 강의번호 30번을 2022년 겨울학기에 수강했다는 의미이다. 위와 같은 두 행이 있을 때, 이 둘은 sID, cID, year가 같더라도 semester가 다르기 때문에 완전히 다른 행이다.
<br>
<br>


# **연관관계**
- 1:1 일대일

각 국가에는 수도가 하나이고 각 수도는 한 국가에만 속한다. 국가-수도의 관계처럼 정확히 일대일 매칭되는 관계가 1:1 관계이다.

- N:1 다대일 (Many-to-one)

보통 교수 한 명은 학생 여러 명을 상담하고, 학생 한 명은 교수님 한 명에게만 상담을 받는다. 이러한 관계성을 N:1 (student가 N) 관계라고 한다.

![](./img/N1.png)

- N:M 다대다 (Many-to-many)

학생 한 명은 여러 개의 과목을 수강하고, 하나의 과목에는 여러 명의 학생이 수업을 수강한다. 이러한 관계성을 N:M 관계라고 한다.

![](./img/NN.png)
<br>
<br>


# **정규화**
정규화란 데이터 중복을 최소화하기 위한 방법으로 데이터를 분해하는 과정이다.
제1정규형, 제2정규형, 제3정규형, BCNF, 제4정규형, 제5정규형이 있다.

- 제1정규형 (1NF)

관계형 데이터모델은 속성 값으로 원자값(atomic value)만 허용한다. 즉, 도메인의 모든 값이 원자값이어야 한다. 만약 한 칸에 값이 여러 개 있다면 그것을 각각의 tuple로 분리한다.

원자값이란 더 이상 논리적으로 분해할 수 없는 값이며, 다중값을 가질 수 없음을 의미한다.
원자값이 아닌 값으로 집합, 리스트 등이 있다.

- 제2정규형 (2NF)

PK가 아닌 모든 attribute가 PK에 완전 종속인 정규형이다.

- 제3정규형 (3NF)

PK가 아닌 attribute가 PK가 아닌 다른 attribute에 종속인 정규형이다. 종속 관계에 따라 속성들을 서로 다른 테이블로 분리한다.

<br>
<br>


# **반 정규화**
데이터베이스의 성능을 향상시키기 위해 데이터 중복을 허용하고 join 과정을 줄이는 방법이다.

<br>
<br>
Binary file added docs/chapter4/img/ER diagram.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/chapter4/img/N1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/chapter4/img/NN.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/chapter4/img/candidate.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/chapter4/img/superkey.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/mission/chapter4/ERD.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.