DB

DB - 정규화

개발자 포비 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: 주제의 유형에 대한 정보를 포함하며, titletype, price를 포함합니다.
  • Topic_Tag_Relation Table: 주제와 태그 간의 관계를 나타내며, topic_titletag_id로 구성됩니다.
  • Tag Table: 태그 정보를 포함하며, idname을 포함합니다.

제 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: 주제의 유형에 대한 정보를 포함하며, titletype, price로 구성됩니다. 이 테이블도 제 3 정규화를 만족합니다.
  • Topic_Tag_Relation Table: 주제와 태그 간의 관계를 나타내며, topic_titletag_id로 구성됩니다. 이 테이블은 비주요 속성이 다른 비주요 속성에 의존하지 않습니다.
  • Tag Table: 태그 정보를 포함하며, id가 기본 키로 사용됩니다. 이 테이블도 제 3 정규화를 만족합니다.