개발자 포비
2024. 11. 28. 22:50
제 1 정규화
요구사항
- 각 column이 하나의 값만 가져야 한다.
- atomic하지 않은 column은 여러 문제를 일으킬 수 있다.
제 1 정규화 (1NF)
제 1 정규화는 데이터베이스의 테이블을 설계할 때 각 컬럼이 원자적(atomic)이어야 함을 강조합니다. 즉, 각 컬럼은 하나의 값만을 가져야 하며, 여러 값을 포함하거나 반복되는 그룹을 가질 수 없습니다. 이를 통해 데이터의 무결성을 높이고, 불필요한 중복을 최소화할 수 있습니다.
주요 특징
- 원자성: 각 컬럼의 값은 더 이상 나눌 수 없는 단일 값이어야 합니다.
- 중복 데이터 제거: 같은 정보를 여러 번 저장하는 것을 피합니다.
- 구조적 일관성: 테이블의 구조가 일관되게 유지되어야 합니다.
Unnormalized Form
topic |
title |
type |
description |
created |
author_id |
author_name |
author_profile |
price |
tag |
MySQL |
paper |
MySQL is ... |
2011 |
1 |
kim |
developer |
10000 |
rdb, free |
|
MySQL |
online |
MySQL is ... |
2011 |
1 |
kim |
developer |
0 |
rdb, free |
|
ORACLE |
online |
ORACLE is ... |
2012 |
1 |
kim |
developer |
0 |
rdb, commercial |
|
First Normal Form
topic
title |
type |
description |
created |
author_id |
author_name |
author_profile |
price |
MySQL |
paper |
MySQL is ... |
2011 |
1 |
kim |
developer |
10000 |
MySQL |
online |
MySQL is ... |
2011 |
1 |
kim |
developer |
0 |
ORACLE |
online |
ORACLE is ... |
2012 |
1 |
kim |
developer |
0 |
topic_tag_relation
topic_title |
tag_id |
MySQL |
1 |
MySQL |
2 |
ORACLE |
1 |
tag (독립적인 테이블)
id |
name |
1 |
rdb |
2 |
free |
3 |
commercial |
제 2 정규화 (Second Normal Form)
요구사항
- 제 1 정규화(1NF)를 만족해야 한다.
- 모든 비주요 속성이 기본 키에 완전 함수 종속이어야 한다. 즉, 기본 키의 일부가 아닌 전체에 의존해야 한다.
제 2 정규화의 중요성
제 2 정규화는 데이터베이스의 중복을 줄이고, 데이터 무결성을 향상시키기 위해 설계되었습니다. 비주요 속성이 기본 키의 일부에만 의존하는 경우 데이터 중복과 이상 현상이 발생할 수 있습니다. 이를 방지하기 위해 모든 비주요 속성이 기본 키 전체에 의존해야 합니다.
Second Normal Form (2NF)
제 2 정규화에 따라 비주요 속성이 기본 키 전체에 의존하도록 테이블을 분리합니다.
Topic Table
title |
description |
created |
author_id |
author_name |
author_profile |
MySQL |
MySQL is ... |
2011 |
1 |
kim |
developer |
ORACLE |
ORACLE is ... |
2012 |
1 |
kim |
developer |
Topic_Type Table
title |
type |
price |
MySQL |
paper |
10000 |
MySQL |
online |
0 |
ORACLE |
online |
0 |
Topic_Tag_Relation Table
topic_title |
tag_id |
MySQL |
1 |
MySQL |
2 |
ORACLE |
1 |
ORACLE |
3 |
Tag Table
id |
name |
1 |
rdb |
2 |
free |
3 |
commercial |
설명
- Topic Table: 주제에 대한 기본 정보를 포함하며,
title
, description
, created
, author_id
를 포함합니다.
- Author Table: 저자 정보를 포함하며,
author_id
를 기본 키로 사용합니다.
- Topic_Type Table: 주제의 유형에 대한 정보를 포함하며,
title
과 type
, price
를 포함합니다.
- Topic_Tag_Relation Table: 주제와 태그 간의 관계를 나타내며,
topic_title
과 tag_id
로 구성됩니다.
- Tag Table: 태그 정보를 포함하며,
id
와 name
을 포함합니다.
제 3 정규화 (Third Normal Form)
요구사항
- 제 2 정규화(2NF)를 만족해야 한다.
- 모든 비주요 속성이 기본 키에 대해 이행적 종속이 없어야 한다. 즉, 비주요 속성이 다른 비주요 속성에 의존해서는 안 된다.
제 3 정규화의 중요성
제 3 정규화는 데이터베이스 설계에서 데이터 중복을 더 줄이고, 데이터 무결성을 높이기 위해 비주요 속성을 최적화하는 단계입니다. 비주요 속성이 다른 비주요 속성에 의존하는 경우, 이는 데이터 중복과 이상 현상을 초래할 수 있습니다. 따라서 모든 비주요 속성이 기본 키에만 의존하게 만들어야 합니다.
예시
Author Table
id |
author_name |
author_profile |
1 |
kim |
developer |
Topic Table
title |
description |
created |
author_id |
MySQL |
MySQL is ... |
2011 |
1 |
ORACLE |
ORACLE is ... |
2012 |
1 |
Topic_Type Table
title |
type |
price |
MySQL |
paper |
10000 |
MySQL |
online |
0 |
ORACLE |
online |
0 |
Topic_Tag_Relation Table
topic_title |
tag_id |
MySQL |
1 |
MySQL |
2 |
ORACLE |
1 |
ORACLE |
3 |
Tag Table
id |
name |
1 |
rdb |
2 |
free |
3 |
commercial |
설명
- Author Table: 저자 정보를 포함하며,
id
가 기본 키로 사용됩니다. 이 테이블은 비주요 속성이 다른 비주요 속성에 의존하지 않으므로 제 3 정규화를 만족합니다.
- Topic Table: 주제에 대한 기본 정보를 포함하며,
author_id
는 저자와의 관계를 나타냅니다. 이 테이블 또한 비주요 속성이 다른 비주요 속성에 의존하지 않으므로 제 3 정규화를 만족합니다.
- Topic_Type Table: 주제의 유형에 대한 정보를 포함하며,
title
과 type
, price
로 구성됩니다. 이 테이블도 제 3 정규화를 만족합니다.
- Topic_Tag_Relation Table: 주제와 태그 간의 관계를 나타내며,
topic_title
과 tag_id
로 구성됩니다. 이 테이블은 비주요 속성이 다른 비주요 속성에 의존하지 않습니다.
- Tag Table: 태그 정보를 포함하며,
id
가 기본 키로 사용됩니다. 이 테이블도 제 3 정규화를 만족합니다.