스노우보드 참 좋아하는데 맨날 키보드 앞에만 있네

데이터베이스 정규화 본문

개발/Oracle SQL

데이터베이스 정규화

워너-비 2018. 6. 1. 02:31

최근 데이터베이스 정규화 관련 질문을 받았는데, 멍청하게도 제대로 된 답변이 안나오더라

뒤늦게라도 외양간 고치자

 


 

정규화 개념

 

정규화는 데이터베이스의 데이터를 구성하는 프로세스이다.

중복성 및 종속성을 제거하여 데이터베이스의 유연성을 높이고, 데이터를 보호하도록 설계된 규칙에 따라 테이블을 만들고, 해당 테이블 간의 관계를 설정한다.


데이터가 중복된다면?

디스크 공간이 낭비되며, 유지 관리상 문제가 발생한다.

여러 위치의 데이터를 변경해야 하는 경우에 모든 위치에서 데이터를 정확히 동일한 방식으로 변경해야 한다.


종속성

사용자가 특정 고객의 주소를 찾으려면, Customers 테이블을 확인하지만, 

 


 

정규화 방법

 

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

도메인이 원자값만으로 되어야 한다.

- 모든 애트리뷰트에 반복그룹이 나타나지 않는다.

- 릴레이션 R의 모든 애트리뷰트가 원자갑(Atomic value)를 갖는다.


반복그룹이란?

복합 애트리뷰트(Composite Attribute), 다치 애트리뷰트(Multivalue Attribute), 중첩 릴레이션(Nested Relation)


예시)

고객테이블

고객번호 

고객명

취미

1

윤종신

영화, 여행

2

김연우

등산

▼ 반복그룹(Repeating group) 제거
고객테이블-1    // 튜플 추가

고객번호

고객명

취미 

 1

윤종신 

영화 

 1

윤종신 

여행 

 2

김연우 

등산 

 

고객테이블-2    // 컬럼 추가

고객번호

고객명

취미 1

취미 2

 1

윤종신 

영화 

여행

 2

김연우 

등산 

 


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

부분 함수적 종속성 제거

- 릴레이션 R이 제 1 정규형을 만족

- 릴레이션 R이 키를 구성하지 않는 모든 애트리뷰터가 R의 기본키에 완전함수종속(Full Functional Dependency)


예시)

학번

학과명

학과전화번호

과목번호

학점

▼ 부분 함수 종속성 제거를 위해 두 릴레이션으로 분리

학번

학과명

학과전화번호

 

학번

과목번호

학점


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

이행적 함수적 종속성 제거

- 릴레이션 R이 제 2 정규형을 만족

- 키가 아닌 모든 애트리뷰트가 릴레이션 R의 기본 키에 이행적으로 종속하지 않는 것(No Transitive Functional Dependency)


예시)

학생테이블

학번

학과명

학과전화번호

▼ 이행적 함수적 종속성 제거

학번

학과명

학과명

학과전화번호

 


BCNF (Boyce - Codd NF)

후보키가 아닌 결정자 제거

- 모든 결정자가 후보키
- 제 2, 3 정규화 순서와 관계없이 바로 BCNF의 정규형을 도출해낼 수 있다.


Comments