SQLD - 함수적 종속성(Functional Dependency)

헨도·2023년 6월 26일
0

SQLD

목록 보기
8/28
post-thumbnail

제1정규화

  • 정규화는 함수적 종속성을 근거로 한다.
    함수적 종속성이란 X -> Y 이면, Y는 X에 함수적으로 종속된다고 말한다.

  • 함수적 종속성은 X가 변화하면 Y도 변화하는지 확인한다.
    예를 들어 회원ID가 변화하면 이름도 변경된다.
    이런 경우는 회원ID가 기본키가 되고, 회원ID가 이름을 함수적으로 종속한다고 한다.

이처럼 기본키를 잡는 것이 제1정규화이다.

제2정규화

  • 부분 함수 종속성이란, 기본키가 2개 이상의 컬럼으로 이루어진 경우에만 발생한다.
  • 기본키가 하나의 컬럼으로 이루어지면 제2정규화는 생략한다.
  • 예를 들어 기본키에 있는 회원ID가 변경되면 이름이 변경된다.
    회원ID가 이름을 함수적으로 종속하고 있는 것이다.
  • 이러한 경우를 부분 함수 종속성이라고 한다.
    부분 함수 종속성이 발생하면 분해를 해야한다.
부분 함수 종속성을 제거하는 것이 제2정규화이다.

제3정규화

  • 제3정규화는 이행 함수 종속성을 제거한다.
    이행 함수 종속성이란, 기본키를 제외하고 컬럼간에 종속성이 발생하는 것이다.
  • 제3정규화는 제1정규화와 제2정규화를 수행한 다음 진행해야한다.
이행 함수 종속성을 제거하는 것이 제3정규화이다.

BCNF(Boyce-Codd Normal Form)

  • BCNF는 복수의 후보키가 있고, 후보키들이 복합 속성이어야 하며, 서로 중첩되어야 한다.
  • 예를 들어 기본키(학번, 과목 번호)가 교수를 함수적으로 종속하고 있다.
    이때 교수가 후보키(최소성과 유일성을 만족)이고 교수가 과목 번호를 함수적으로 종속하는 경우 분해가 일어난다.
    즉, 위와 같은 경우 교수 테이블을 새롭게 만들고 기본키는 교수로 하고 컬럼은 과목 번호가 된다.
  • 이 작업을 BCNF라고 한다.
3차 정규화를 만족하면서 모든 결정자가 후보키 집합에 속한 정규형이다.

정규화 예제

  • 정규화 대상 테이블
제품번호제품명재고수량주문번호수출 여부고객 번호사업자 번호우선순위주문수량
1001모니터1,990AB345X45203982011150
1001모니터1,990AD347Y2341-3600
1007마우스9,702CA210X328020021281200
1007마우스9,702AB345X45203982011300
1007마우스9,702CB230X23415638923390
1201스피커2,108CB231Y8320-280

제1정규화

  • 속성을 보고 한 개의 속성으로 유일성을 만족할 수 있는지 확인한다.
  • 제품번호는 1001, 1007 등이 두 번 이상 나오므로 중복되고, 주문번호 또한 AB345가 두 번 나와서 중복된다.
  • 결과적으로 한 개의 속성으로는 유일성을 만족할 수 없다.
    그러므로 2개의 조합으로 유일성을 만족할 수 있는지 확인해 보아야 한다.
  • 제품번호 + 주문번호가 식별자가 되면 엔터티의 유일성을 만족하게 된다.
  • 제1정규화는 이러한 식별자를 찾는 과정이며 여기까지 수행하면 된다.
  • 제1정규화 결과
    제품번호제품명재고수량주문번호수출 여부고객 번호사업자 번호우선순위주문수량
    1001모니터1,990AB345X45203982011150
    1001모니터1,990AD347Y2341-3600
    1007마우스9,702CA210X328020021281200
    1007마우스9,702AB345X45203982011300
    1007마우스9,702CB230X23415638923390
    1201스피커2,108CB231Y8320-280

제2정규화

  • 제2정규화는 기본키가 두 개 이상인 경우 대상이 된다.

  • 기본키가 제품번호 + 주문번호이므로 제2정규화 대상이다.

  • 제2정규화는 모든 속성(제품명, 재고 수량, 수출 여부 등)이 식별자에 종속해야 하며 그렇지 않은 경우에는 분해한다.

  • 확인 방법은 제1정규화와 마찬가지로 중복을 확인하는 것이다.

  • 제2정규화 확인(1)

    제품번호제품명재고 수량
    1001모니터1,990
    1001모니터1,990
  • 위의 경우 1001, 모니터가 중복되는 것을 확인할 수 있다.
    이러한 경우 엔터티를 분해하는 것이 제2정규화이다.

  • 제2정규화 확인(2)

    제품번호수출 여부고객 번호사업자 번호우선순위
    AB345X45203982011
    AD347Y2341-3
    CA210X32802002128
    AB345X45203982011
  • 위의 경우 AB345 주문번호에 중복이 발생한다.
    이러한 경우는 분해를 해야한다.
    결과적으로 최종 엔터티는 다음과 같다.

엔터티명 : 제품

제품번호제품명재고 수량

엔터티명 : 주문_고객

주문번호수출 여부고객 번호사업자 번호우선순위

엔터티명 : 주문

제품번호주문번호주문 수량
profile
Junior Backend Developer

0개의 댓글