Skip to content
GwiyeomGo Tech Blog
About GwiyeomGo

mysql 정규화와 함수적 종속성

MYSQL, 20214 min read

- 함수 종속

어떤 릴레이션 R에서, X와 Y를 각각 R의 애트리뷰트 집합의 부분 집합일때 애트리뷰트 X의 값 각각에 대해 시간에 관계없이 항상 애트리뷰트 Y의 값이 오직 하나만 연관되어 있을 때 Y는 X에 함수 종속이라 하고, X → Y라고 표기한다. (X를 결정자Y를 종속자)

  • members 테이블에 id는 members테이블에 nickname을 결정한다
  • donations 테이블에 member_id는 members테이블의 속성을 결정한다.

정규화

  • 불만족스러운 릴레이션의 애트리뷰트들을 애트리뷰트들을 나누어서 더 작은 릴레이션으로 분해하는 과정
  • 목적 :데이터의 중복의 최소화와 여러 가지 이상을 제거함

1) 1NF (제1정규형)

  • 테이블에 속한 모든 도메인이 원자값으로만 되어 있다.
  • 모든 속성에 반복되는 그룹이 나타나지 않는다.
  • 기본 키를 사용하여 관련 데이터의 각 집합을 고유하게 식별할 수 있어야 한다.
<a href="https://wkdtjsgur100.github.io/database-normalization" target="_blank">위 3개 개념 출처이며 각각 예제가 포함된 블로그 글 링크 입니다.</a>

2) 2NF (제2정규형): 모든 컬럼이 완전 함수적 종속을 만족한다

* 완전 함수적 종속 : <span style="color:#212529">Y가 집합 X 전체에 대해서 종속관계를 가지면 완전 함수적 종속이다.</span>
* 부분 함수 종속: <span style="color:#212529">Y가 집합 X의 부분 집합에 종속관계를 가지면 부분 함수적 종속이다.</span>
* 릴레이션 스키마 R의모든 비주요 애트리뷰트들이 기본키에 대해서 완전 함수적 종속이면,R은 제2정규형에 속한다.

예시 출처

고객ID삼품코드주문상품수량가격
1a티셔츠22000
2b청바지13000
3b청바지26000
2c와이셔츠14000
3d원피스15000

(기본키는 '고객ID'와 '상품코드' )

  • 여기서 '수량' 속성은 기본키를 구성하는 '고객ID', '상품코드' 속성을 모두 알아야 식별할 수 있습니다. 따라서 '수량'은 완전 함수 종속된 관계입니다.
  • 기본키가 '고객ID'와 '상품코드' 속성으로 구성된 위의 릴리이션에서서 '주문상품'은 기본키 중 '상품코드'만 알아도 식별할 수 있습니다. 이 경우에는 '주문상품' 속성은 기본키에 부분 함수 종속된 관계입니다
© 2024 by GwiyeomGo Tech Blog. All rights reserved.