정규화란?

관계형 데이터베이스의 설계과정에서, 데이터를 중복을 최소화하고 추후 사용에 있어서 좋은 구조로 만드는 것을 의미함.
  • 도메인 원자값 (1NF)
  • 부분적 함수 종속 제거 (2NF)
  • 이행적 함수 종속 제거 (3NF)
  • 결정자가 후보키가 아닌 함수종속 제거 (BCNF)
  • 다치 종속 제거 (4NF)
  • 조인 종속성 만족 (5NF)

모든 정규화과정을 반드시 해야하는 것은 아니고 판단하여서 적절히 하기.

보통 제 3정규화까지는 해주는 듯


제 1 정규화(1NF)

회원번호 회원이름 프로그램
101 김남제 스쿼시초급
102 엄준식 헬스
103 김만수 헬스, 골프초급
  • 속성 하나는 하나의 속성값만을 갖게 하는 과정 (도메인 원자값, atomic colums)
  • 위 예시에서는 수강과목이 여러개의 속성값을 갖음


회원번호(PK) 회원이름 프로그램(PK)
101 김남제 스쿼시초급
102 엄준식 헬스
103 김만수 헬스
103 김만수 골프초급
  • 제 1 정규화를 완료되면 위처럼 됨





제 2 정규화(2NF)

회원번호(PK) 회원이름 프로그램(PK) 가격 납부여부
101 김남제 스쿼시초급 5000 0
102 엄준식 헬스 6000 1
103 김만수 헬스 6000 1
103 김만수 골프초급회원번호 8000 0
  • 제 1정규화를 진행한 테이블에 진행함
  • 현재 테이블의 주제와 관련없는 컬럼을 다른 테이블로 빼는 작업
  • Partial Dependency를 제거하는 과정 (부분적 함수 종속 제거)
  • 위처럼 ‘회원번호’, ‘프로그램’ 이 같이 PK를 이루는 composite primary key일때, ‘가격’ 컬럼은 그중 일부인 ‘프로그램’ composite primary key에 종속됨. 이러한 것을 Partial Dependecny라고 함
  • 해당하는 PK와 그에 종속되는 column을 따로 빼서 새로운 테이블로 생성해주면 됨


회원번호(PK) 회원이름 프로그램(PK) 납부여부
101 김남제 스쿼시초급 0
102 엄준식 헬스 1
103 김만수 헬스 1
103 김만수 골프초급회원번호 0
프로그램(PK) 가격
스쿼시초급 5000
헬스 6000
골프초급 8000
  • 제 2 정규화를 완료하면 위처럼 됨





제 3 정규화(3NF)

프로그램(PK) 가격 강사 출신대학
스쿼시 5000 김을용 중앙대
헬스 6000 박덕팔 하버드
골프 8000 이상구 예일
골프중급 9000 이상구 예일
개인피티 6000 박덕팔 하버드
  • 제 2 정규화를 진행한 테이블에 진행함
  • PK가 아닌 컬럼이 다른 PK가 아닌 컬럼에 종속되는 것을 제거함 (이행적 함수 종속 제거)
  • 출신대학은 강사 컬럼에 종속되어 있음 (둘다 PK 아님)


프로그램(PK) 가격 강사
스쿼시 5000 김을용
헬스 6000 박덕팔
골프 8000 이상구
골프중급 9000 이상구
개인피티 6000 박덕팔
강사 출신대학
김을용 중앙대
박덕팔 하버드
이상구 예일
  • 제 3 정규화를 완료하면 위처럼 됨





BCNF

가정: 담당교수는 1개의 과목만을 담당한다

학번(PK) 과목명(PK) 담당교수
1 데이터베이스 A
2 네트워크 B
2 데이터베이스 C
3 인공지능 D
4 데이터베이스 A
4 네트워크 B
  • 제 3정규화를 진행한 테이블에 진행함

  • 결정자가 후보키가 아닌 함수종속 제거함

  • (학번, 과목명) -> 담당교수.

    (학번, 담당교수) -> 과목명

    (담당교수) -> 과목명

    ( )는 결정자를 의미함. 이때 (담당교수)의 경우 결정자이지만 해당 테이블에서 후보키가 아님. 따라서 분리해 줌

    -BCNF를 위반하게 만드는 함수 종속성 X -> Y를 찾는다
    -아래와 같이 분해한다
     # {X, Y}로 구성된 릴레이션
     # X와 나머지 속성으로 구성된 릴레이션
    


학번(PK) 담당교수(PK)
1 A
2 B
2 C
3 D
4 A
4 B
담당교수(PK) 과목명
A 데이터베이스
B 네트워크
C 데이터베이스
D 인공지능
  • BCNF를 완료한 결과





1NF부터 BCNF까지 함수 종속성을 사용한 정규화는 명백하지 않은 함수 종속성을 모두 배제하고, 후보키가 되는 속성을 찾아내는 과정이었다. 다음 정규형 단계인 4NF부터 6NF까지는 결합 종속성을 사용하여 정규화한다.

[결합 종속성이란?]

  • 결합 종속성이란 키 자체에 다중성이 포함됐을 때 나타나는 중복을 의미한다.
  • 결합 종속성은 무손실 분해를 할 수 있는 상태이다.
  • 함수 종속성은 결합 종속성의 일종이다.

일반적으로 BCNF 정규화 단계까지 진행되면 자동적으로 5NF정규화 규칙을 만족한다.
하지만 특정한 경우에 함수 종속성은 만족하나 결합종속성을 만족하지 않는 경우가 있다.

바로 릴레이션에 키가 아닌 속성이 존재하지 않는 경우이다. 이 경우에는 다음 단계를 실행한다.

IT’s Jenna 블로그 내용 가져옴

제 4 정규화(4NF)

다치 종속성(MultiValued Dependency, MVD)이란?

하나의 릴레이션에서 속성이 1:N 관계로 대응하는것

다치 종속은 머리가 두 개인 이중 화살표(double arrow) img로 표기한다.

  • BCNF 정규형까지 완료한 후 진행한다
이름(PK) 학과(PK) 동아리(PK)
다한 컴퓨터공학과 밴드부, 토론동아리
원기 디자인과, 컴퓨터공학과 밴드부, 축구부
정은 기계공학과, 컴퓨터공학과 밴드부
  • 학생은 n개의 학과와 n개의 동아리에 속할 수 있다고 가정
  • {이름} ->-> {학과}, {이름} ->-> {동아리} 라고 표현가능
  • 위 형태의 릴레이션은 1NF의 규칙을 위반하기때문에 아래와 같이 테이블을 나눠줌


이름(PK) 학과(PK) 동아리(PK)
다한 컴퓨터공학과 밴드부
다한 컴퓨터공학과 토론동아리
원기 디자인과 밴드부
원기 디자인과 축구부
원기 컴퓨터공학과 밴드부
원기 컴퓨터공학과 축구부
정은 기계공학과 밴드부
정은 컴퓨터공학과 밴드부
  • 해당 릴레에션은 BCNF 정규형은 만족하지만 키가 아닌 속성이 없다.{이름,학과,동아리}가 후보키 자체이다.
  • 데이터의 중복으로 만약 원기가 동아리를 하나 더 가입하면 2개의 튜플이 추가되어야 하는 문제가 있다.
  • 이름 : 학과, 이름 : 동아리 모두 1:n 관계이지만 둘 사이엔 아무런 관련이 없다. 독립된 관계가 하나의 릴레이션에 담겨있는 경우 데이터 중복이 발생한다.
  • 독립된 관계끼리 무손실 분해하여 정규화함


이름(PK) 학과(PK)
다한 컴퓨터공학과
원기 디자인과
원기 컴퓨터공학과
정은 기계공학과
정은 컴퓨터공학과
이름(PK) 동아리(PK)
다한 밴드부
원기 토론동아리
원기 밴드부
정은 축구부
정은 밴드부
  • 제 4 정규형을 완료한 결과





제 5 정규화(5NF)

  • 제5 정규형의 조건 : 명확하지 않은 모든 결합 종속성을 배제한다. (조인 종속성 만족)

제5 정규형이 실무적으로 사용하는 정규형의 최상위 단계이고, 이 이상은 릴레이션을 분해해도 의미가 없다고 본다.
4NF도 다치 결합 종속성이 배제된 경우이지만, 5NF와는 조합에 차이가 있다.
예를 들어, 위에서 언급한 동아리가 학과 동아리라고 생각해보자. 해당 동아리에는 특정 학과만 가입할 수 있다.

동아리(PK) 학과(PK)
밴드부 컴퓨터공학과
토론동아리 컴퓨터공학과
축구부 디자인과
  • 4NF의 경우에는 {이름, 학과}, {이름, 동아리} 두 가지로 분리했지만 본 경우에는 {동아리, 학과} 테이블을 추가해주어야 한다.

만약 위 테이블을 추가해주지 않는다면 {이름, 학과} 테이블과 {이름, 동아리} 테이블을 단순 join 연산했을때

이름 학과 동아리
다한 컴퓨터공학과 밴드부
원기 디자인과 토론동아리
원기 디자인과 밴드부
원기 컴퓨터공학과 토론동아리
원기 컴퓨터공학과 밴드부
정은 기계공학과 축구부
정은 기계공학과 밴드부
정은 컴퓨터공학과 축구부
정은 컴퓨터공학과 밴드부
  • 밴드부-컴공, 토론동아리-컴공, 축구부-디자인 과라는 설정이 반영이 되지 않음

결합 종속성을 이해하고 찾을 때, 4NF & 5NF에서 다루는 릴레이션은 모두 키가 아닌 속성을 가지지 않은 상태이고 무손실 분해를 하더라도 모두 키가 아닌 속성을 가지지 않는 릴레이션으로 나눠진다는 점에 유의하자!

카테고리:

업데이트:

댓글남기기