제 1~5정규화 기법

왱구·2023년 12월 13일
0

DB

목록 보기
1/5

정규화(Normalization)란

데이터베이스 정규화는 관계형 데이터 모델에서 데이터의 중복성을 제거하여 이상 현상을 방지하고, 데이터의 일관성과 정확성을 유지하기 위해 무손실 분해하는 과정이다.

  • 이상현상(Anomaly): 릴레이션 조작 시 데이터들이 불필요하게 중복되어 예기치 않게 발생하는 현상. 삽입이상(Insertion Anomaly), 갱신이상(Update Anomaly), 삭제이상(Deletion Anomaly)이 있다.

정규화 단계

  • 처음부터 순차적으로 진행하며 NF를 만족하지 못하면 만족하도록 테이블 구조를 조정한다.
  • 앞 단계를 만족해야만 다음 단계로 진행할 수 있다.
    ex) 3NF를 만족하고 있는 테이블은 1NF, 2NF, 3NF를 전부 만족하고있다.

1차 정규화(1NF)

테이블 내의 속성 값은 원자값을 가지고 있어야 한다.
즉 한칸에 하나의 데이터만 가져오도록 테이블을 분해하는 작업이다.

고객ID이메일
1Kosmo1@domain.com, Kosmo2@domain.com

  • 이메일 주소가 속성에 2개 이상 가지고 있는 경우 원자값이 아니다.
고객ID이메일
1Kosmo1@domain.com
1Kosmo2@domain.com

  • 때문에 속성 1개만 가지도록 저장하면 1차 정규화를 만족한다.

2차 정규화(2NF)

기본키를 제외한 모든 컬럼은 부분적 종속(Partial Dependency)이 없어야한다
= 기본키를 제외한 모든 컬럼이 모든키에 대하여 완전 함수 종속(Fully Functionally Dependency)을 만족해야 한다.
즉 현재 테이블의 주제와 관련없는 컬럼을 다른 테이블로 빼는 작업이다.

고객명서비스이름서비스가격서비스이용기간
홍길동헬스70,0001달
홍길동수영100,0002달
장길산수영100,0002달

  • 고객명, 서비스이름서비스이용기간에 영향을 주고,
    서비스이름서비스가격에 영향을 주는 관계를 부분 함수 종속 관계 라고한다.
  • 고객명, 서비스이름, 서비스가격, 서비스이용기간을 한 테이블에 두는 것은 부분 함수 종속성으로 인해 2차 정규화를 만족하지 못한다.
고객명서비스이름서비스이용기간
홍길동헬스1달
홍길동수영2달
장길산수영2달

서비스이름서비스가격
헬스70,000
수영100,000
수영100,000

  • 부분관계인 서비스이름, 서비스가격관계를 별도의 테이블로 두면 부분 함수 종속 관계가 제거되어 2차 정규화를 만족한다.

3차 정규화(3NF)

기본키를 제외한 모든 컬럼은 속성들 간의 이행 종속성(Transitive Dependency)이 없어야 한다.
즉 일반컬럼에만 종속된 컬럼을 다른테이블로 빼는 작업이다.

책번호도서이름도서가격출판사홈페이지
1C언어30,000A사www.a.com
2C++언어25,000B사www.b.com
3JAVA언어40,000B사www.b.com
  • 책번호출판사에 영향을 주고, 출판사홈페이지에 영향을 주는 관계인
    A->B이고 B->C이면서 A->C관계가 같이 있는 경우를 이행함수 종속관계라고 한다.
  • 책번호, 출판사, 홈페이지를 한 테이블에 두는 것은 이행함수 종속성으로 인해 3차 정규화를 만족하지 못한다.
책번호도서이름도서가격출판사
1C언어30,000A사
2C++언어25,000B사
3JAVA언어40,000B사

출판사홈페이지
A사www.a.com
B사www.b.com

책번호홈페이지에 직접 영향을 주는 관계가 아니기 때문에(A->C관계),
책번호, 출판사테이블과 출판사, 홈페이지테이블로 분리하여 이행함수 관계를 제거해 3차정규화를 만족시킨다


보이스-코드 정규화(BCNF)

모든 결정자가 후보키 집합에 속해야 한다.

학번과목명교수명
202001C언어장길산
202001데이터베이스홍길동
202002데이터베이스홍길동
  • 학번, 과목명교수명에 영향을 주고, 교수명과목명에 영향을 주는 관계로서,
    교수명과목명에 영향을 주지만, 한 테이블에 같이 존재하고 교수명은 키가 아닌 상황이므로 결정자인 교수명이 후보키가 아니다.
  • 학번, 과목명, 교수명을 한 테이블에 두는 것은 교수명이 결정자이지만 후보 키가 아니기 때문에 보이스-코드 정규화를 만족하지 못한다.
학번교수명
202001장길산
202001홍길동
202002홍길동

교수명과목명
장길산C언어
홍길동데이터베이스
홍길동데이터베이스

교수명과목명에 직접 영향을 주기 때문에 교수명, 과목명 테이블로 분리하여 교수명이 후보키 역할을 하도록 하여 보이스`코드 정규화를 만족한다.


4차 정규화(4NF)

다차(다중 값) 종속성 제거, 특정 속성 값에 따라 선택적인 속성을 분리한다.

개발자자격증언어
홍길동정보처리기사C
홍길동빅데이터분석기사C++
장길산정보보안기사JAVA
  • 개발자마다 자격증값들이 여러 개 존재하고, 특정 개발자마다 언어값들이 여러 개 존재하는 경우 다치 종속관계라고 한다.
  • 개발자별로 여러자격증값을 가지고 있고, 개발자별로 여러 언어값을 가지고있다.
개발자자격증
홍길동정보처리기사
홍길동빅데이터분석기사
장길산정보보안기사

개발자언어
홍길동C
홍길동C++
장길산JAVA
  • 개발자, 자격증, 개발자, 언어 테이블로 분리하여 관리하면 다치 종속관계를 제거하기 때문에 4차 정규화를 만족한다.

5차 정규화(5NF)

조인 종속성을 제거한다.

개발자자격증언어
홍길동정보처리기사C
홍길동빅데이터분석기사C++
장길산정보보안기사JAVA
  • 4차 정규화 테이블에 대해 조인 연산을 수행하면 4차 정규화 수행 전 데이터와 다르게 되는 문제인 조인 종속성이 발생한다.
개발자자격증
홍길동정보처리기사
홍길동빅데이터분석기사
장길산정보보안기사

자격증언어
정보처리기사C
빅데이터분석기사C++
정보보안기사JAVA

개발자언어
홍길동C
홍길동C++
장길산JAVA
  • 조인 종속관계를 제거하기 위해서는 모든 속성관계인 개발자, 자격증, 개발자, 언어뿐 아니라 자격증, 언어관계에 대한 테이블을 만들어 줌으로써 조인했을 때 정확히 원래의 데이터로 복원할 수 있게한다.
profile
늦깎이 애아빠 개발지망생

0개의 댓글