mysql 정규화와 함수적 종속성
- 함수 종속
어떤 릴레이션 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 | 삼품코드 | 주문상품 | 수량 | 가격 |
---|---|---|---|---|
1 | a | 티셔츠 | 2 | 2000 |
2 | b | 청바지 | 1 | 3000 |
3 | b | 청바지 | 2 | 6000 |
2 | c | 와이셔츠 | 1 | 4000 |
3 | d | 원피스 | 1 | 5000 |
(기본키는 '고객ID'와 '상품코드' )
- 여기서 '수량' 속성은 기본키를 구성하는 '고객ID', '상품코드' 속성을 모두 알아야 식별할 수 있습니다. 따라서 '수량'은 완전 함수 종속된 관계입니다.
- 기본키가 '고객ID'와 '상품코드' 속성으로 구성된 위의 릴리이션에서서 '주문상품'은 기본키 중 '상품코드'만 알아도 식별할 수 있습니다. 이 경우에는 '주문상품' 속성은 기본키에 부분 함수 종속된 관계입니다