Normalization/정규화 - 함수의 종속성

박지성 학부생·2023년 2월 5일
0

BackEnd Develop log

목록 보기
18/27

함수 종속성

  • 함수 종속성은 DB에서 속성들간 종속 관계를 의미한다.

    • 테이블의 필드들의 종속 관계는 불필요한 데이터 중복을 줄이고 더욱 논리적으로 만들 수 있게 해준다.
  • 데이터 베이스에서의 함수 종속성을 정의하는 말은 다음과 같다.

    • 어떤 테이블 A에 존재하는 필드들의 부분 집합을 각각 XY라고 할 때, X의 한 값이 Y에 속한 하나의 값에만 매핑 될 경우 YX함수 종속적이다 라고 하며 X -> Y라고 표기한다.
      • 여기서 X를 "결정자"라고 부르며 Y를 "종속자"라고 한다.

이러한 함수적 종속은 관계에 따라 크게 3가지로 분류할 수 있다.

완전 함수 종속 (Full Functional Dependency)

  • 완전 함수 종속이란, 기본키가 종속자이며 기본키가 여러 속성으로 구성되어 있을 경우 기본키를 구성하는 모든 속성이 포함된 부분집합 또한 종속자일 경우를 말한다.
    • ex 1)

  • 위와 같은 관계는 학부와 이름학번에 종속되어 있다. 따라서 아래와 같은 관계를 가진다.

    결정자 : 학번
    종속자 : 학부, 이름
    candidate key : {학번}
    non-prime attribute : 학부, 이름

    종속 관계
    {학번 -> 학부, 이름}

  • 이러한 관계에서 종속자는 기본키이며 기본키를 구성하는 모든 속성의 부분집합이 종속자이기 때문에 "학부와 이름은 학번에 완전 함수 종속 되어있다." 라고 말한다.


  • ex 2)

    결정자 : 고객_id, 상품_id
    종속자 : 주문상품, 수량, 가격
    candidate key : {고객_id, 상품_id}
    non-prime attribute : 주문상품, 수량, 가격

    종속관계
    {고객_id, 상품_id -> 수량}
    {상품_id -> 주문상품}
    {고객_id, 상품_id, 수량 -> 가격}

  • 위와 같은 테이블은 수량이 고객_id상품_id에 종속되어 있어 해당 관계는 "완전 함수 종속되어 있다"라고 말한다.

  • 하지만 주문상품이나 가격은 기본키를 구성하는 모든 구성요소에 대해 종속되어 있지 않다. 따라서 완전 함수 종속되어 있지 않고 아래와 같은 종속관계를 갖는다.


부분 함수 종속(Partial Functional Dependency)

  • 부분 함수 종속이란, 관계에서 종속자가 기본키가 아닌 다른 속성에 종속되거나, 기본키를 구성하는 여러 속성들의 부분집합 중 일부분에만 종속되어 있음을 뜻한다.

  • 위 테이블에서 주문 상품은 기본 키를 구성하는 속성들의 부분집합중 일부분에만 종속되어 있다. 따라서 주문 상품 속성은 "부분 함수 종속 되어있다."라고 말다.

  • 가격 속성은 기본키인 {고객_id, 상품_id}와 더불어 기본키가 아닌 속성인 수량에도 종속되어 있기 때문에 부분 함수 종속 되어있다 말할 수 있다.

논리적으로 자연스럽지 않은 이러한 관계들에서 개선점을 볼 수 있다.
또한 부분 함수 종속외에 하나의 불안전한 함수 종속성이 있다.


이행적 종속(Transitive Dependency)

  • X,Y,Z라는 3가지 부분집합을 가진 관계에서 {X -> Y}이고 {Y -> Z}일때 {Y -> X}가 아니라면 암스트롱의 공리에 의해 {X->Z}이다. 이를 "X는 Z의 이행적 종속이다." 혹은 "Z는 X에 이행적 종속되어있다." 라고 말한다.

  • 위 테이블에서 가격의 종속 관계는 {고객_id, 상품_id, 수량 -> 가격} 의 형태를 갖는다.

  • 수량은 {고객_id, 상품_id -> 수량} 의 형태를 갖고있기 때문에 {고객_id, 상품_id -> 수량 -> 가격} 의 관계라고 볼 수 있다.

  • 또한 {수량 -> 고객_id, 상품_id}의 형태가 아니기 때문에 "가격은 {고객_id, 상품_id} 이행적 종속되어 있다." 라고 말한다.

이러한 관계 또한 논리적으로 부자연스럽기 때문에 부분 함수 종속이행 함수종속을 제거해 주며 테이블을 논리적이고 효율적으로 만들어 데이터베이스를 정규화 시킨다.


reference https://been2.tistory.com/40_

profile
참 되게 살자

0개의 댓글