[MySQL] Normalization rules(제 1 ~ 3 정규형)

ljkgb·2021년 6월 14일
1

MySQL

목록 보기
2/3
post-thumbnail

1. 데이터베이스 정규화

정규화(Normalization)란 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화 하는 프로세스로서 데이터 정규화의 목표는 이상(Anomaly)이 있는 관계를 재구성하여 작고 잘 조직된 관계를 생성하는 것이다.

📁 위키백과 | 데이터베이스 정규화

위의 정의를 보면 알 수 있듯이 잘못된 설계로 기인한 불필요한 데이터 중복 및 공간낭비등 각종 데이터베이스 이상(삽입, 삭제, 갱신)으로부터 벗어나 최소화된 중복과 공간낭비로 효율적인 데이터베이스를 관리하기 위해서 필요하다.

⚠️ 정규화 시 주의사항

  • 정규화 시 테이블은 무손실 분해(Nonloss decomposition)되어야 한다.
    • 테이블이 의미상 동등한 테이블로 분해되어야 하고, 분해로 인한 정보 손실이 없어햐 한다.
    • 분해된 테이블들을 자연 조인하면 분해 전의 테이블로 복원이 가능해야 한다.

2. 정규형(NF; Normal Form)

데이터베이스가 정규화된 정도에 따라 제 1~6 정규형(Normal Form; NF)으로 구분하게 되는데 그 중 1~3 정규형까지 정리하며 알아볼 예정이다. 제 1~3 정규형 및 보이스/코드 정규형(BCNF)은 기본 정규형이라고 하며 제 4, 5 정규형은 고급 정규형으로 구분한다. 모든 테이블이 제 5정규형에 속해야만 바람직한 것은 아니다. 일반적으로 제 3정규형이나 보이스/코드 정규형에 속하도록 테이블을 분해하며, 데이터 중복을 줄이고 이상현상을 해결하는 경우가 많다.

2.1 제 1 정규형(1NF; First Normal Form)

테이블의 모든 속성이 원자값이어야 한다.
여기서 원자값이란 더 이상 분리되지 않는 값으로 모든 속성은 원자 값 이라고 한다. 제 1 정규형을 만족해야 관계 데이터베이스의 릴레이션이 될 자격이 있다.

  • 1NF를 만족하지 않는 테이블
고객이름이벤트 번호등급당첨여부할인율
김하마E01, E02goldy, n10%
이토끼E02, E03vipy, y10%
박사자E03goldn20%
  • 1NF를 만족하는 테이블
고객이름이벤트 번호등급당첨여부할인율
김하마E01goldy10%
김하마E02goldn10%
이토끼E02vipy20%
이토끼E03vipy20%
박사자E03goldn10%

테이블의 속성이 모두 원자 값으로 제 1 정규형에 만족하게 되었다. 하지만 데이터 중복으로 인한 이상(Anomaly)이 발생하는 것을 알 수 있다.

2.2 제 2 정규형(2NF; Second Normal Form)

기본키가 아닌 모든 속성이 고유키에 완전 함수 종속된다.
고유 키고객이름이벤트 번호 두가지로 복합키를 가지고 있다. 이럴경우 이 두가지 복합키에 완전히 종속되는지 여부를 확인하여 관계가 없다면 다른 테이블로 분리해준다.

  • 2NF를 만족하지 않는 테이블
고객이름이벤트 번호등급당첨여부할인율
김하마E01goldy10%
김하마E02goldn10%
이토끼E02vipy20%
이토끼E03vipy20%
박사자E03goldn10%
  • 2NF를 만족하는 테이블

[고객 테이블]

고객이름등급할인율
김하마gold10%
이토끼vip20%
박사자gold10%

[이벤트 테이블]

고객이름이벤트 번호당첨여부
김하마E01y
김하마E02n
이토끼E02y
이토끼E03y
박사자E03n

고객테이블과 이벤트 테이블로 분해하여 고유 키에 완전히 종속되도록 하였다.

2.3 제 3 정규형(3NF; Third Normal Form)

3NF를 만족하려면 이행적 함수 종속을 제거해야 한다.
고객테이블을 보면 이름등급, 그리고 그 등급에 따른 할인율로 컬럼이 구분되어있다. 하지만 만약 등급에 따른 할인율이 변경된다고 하면 모든 사람들의 할인율을 바꿔줘야 할 것이다. 이렇게 갑-을의 관계만 존재하는 것이 아닌 갑-을-병-정의 관계로 되어있는 것을 이행적 함수 종속이 존재한다고 한다. 이럴 경우에는 이행적 함수 종속이 제거되도록 다시 고객 테이블을 분해해주면 된다.

  • 3NF를 만족하지 않는 테이블

[고객 테이블]

고객이름등급할인율
김하마gold10%
이토끼vip20%
박사자gold10%
  • 3NF를 만족하는 테이블

[고객 테이블]

고객이름등급
김하마gold
이토끼vip
박사자gold

[고객등급 테이블]

등급할인율
gold10%
vip20%
gold10%

참조

🔗 YABOONG 블로그 | 데이터베이스 정규화 - 이상현상 & 함수적 종속성

🔗 DanStory 블로그 | 정규화 (제1 정규화 ~ 제3 정규화)

🔗 IT위키 | 데이터베이스 정규화

profile
🐹

0개의 댓글