함수적 종속성을 이해하기 전에 릴레이션을 가볍게 얘기하고 넘어가고자 한다.
릴레이션이란?
하나의 개체 안에 데이터를 행과 열로 2차원 테이블의 구조에 값을 저장한 것을 말한다.
정보 저장하고 의미를 구분 짓는데 필요한 Database의 저장 기본 단위라고 보면 된다.
위의 구조와 같이 2차원으로 저장된 테이블 하나를 릴레이션이라 정의한다.
릴레이션의 무결성이나 다양한 내용 등을 차후에 다룰 기회가 있다면 그때 다루도록 하겠다.
릴레이션의 간단한 설명을 마치면서 다시 본론으로 돌아간다.
함수적 종속성 FD(Funcional Dependency)이란?
Database에서 A라는 릴레이션이 B라는 데이터에 영향을 끼치는 현상을 의미한다.
위 얘기를 살짝 풀어서 얘기를 진행해 보겠다.
A → B라고 정의된다.
화살표의 의미는 A의 값이 B의 값에 영향을 미쳐지는 것을 의미한다. 다시 말하면 B는 A에 의해서 결정된다고 보면 되며, 이때 B는 A의 함수적 종속이 된 것이다.
조금 더 풀어서 얘기를 나눠보겠다.
위에서는 설명을 A → B는 'Database에서 A라는 릴레이션이 B라는 데이터에 영향을 끼치는 현상을 의미한다.'라고 정의를 진행했다.
본인은 치킨을 좋아하므로 치킨으로 예를 추가로 들어보겠다.
'BXC의 뿌X클 치킨을 먹고 싶다.'라는 본인만의 가정을 든다.
배X이나 쿠X이츠 등 배달 대행 앱을 사용한다고 가정한다.
뿌X클 치킨은 BXC치킨에서만 판매를 한다. 만약 네X치킨에 들어가서 BXC사의 뿌X클을 주문하려고 하면 주문할 수 없을 것이다. 그렇다 A는 치킨집이고 B는 치킨집의 메뉴이다.
BXC치킨→[뿌X클]
네X치킨→[뿌X클]이 존재하지 않는다.
A → B는 치킨집 브랜드가 치킨집 메뉴를 결정 내린다.라는 의미랑 동일하게 A의 브랜드 변경 시 B라는 치킨 메뉴에 영향을 끼치는 현상을 함수적 종속성을 의미한다고 보면 된다.
이런 함수적 종속성은 크게 3가지의 종류로 나뉜다.
완전 함수 종속, 부분 함수 종속, 이행적 함수 종속이 존재한다.
완전 함수 종속 (Full Functional Dependency)
위 릴레이션은 브랜드 치킨 집인 XX치킨의 가상 릴레이션 치킨 테이블이다.
<치킨> 테이블의 기본키는 '고객번호', '제품번호'가 조합된 (고객번호, 제품번호)이다.
치킨을 몇 마리 시켰는지 주문량을 알아내기 위해서는 고객번호, 제품번호를 모두 알아야지만 몇 번 고객이 어떤 제품을 몇 마리 시켰는지 알 수 있다. 이렇게 고객번호, 제품번호를 모두 알아야 주문량을 알 수 있는 것는 현상을 (고객번호, 제품번호) -> 주문량이라 표기하며 둘의 값을 필수적으로 알아야 주문량을 알 수 있기에 이런 경우 주문량은 기본키에 완전 함수 종속되었다고 한다.
부분 함수 종속 (Partial Functional Dependency)
위 치킨 테이블을 한번 더 참조한다.
제품명의 양념치킨은 주문량과 다르게 제품번호인 A2값만 알면 어떤 제품인지 구분할 수 있게 된다. 이때 제품명(양념치킨)은 제품번호에 부분 함수 종속이라고 할 수 있다.
(고객번호, 제품번호) -> 주문량이라 표기하는 완전 함수 종속과 다르게 제품번호 -> 제품명으로 표기할 수 있다.
이행적 함수 종속 (Transitive Functional Dependency)
제품번호, 제품명, 가격에 대해서 임의로 만들었다.
이행적 함수 종속은 A, B, C의 세 가지 속성이 A -> B, B -> C일 때, A -> C을 만족하는 경우 이행적 함수 종속이라 정의 내릴 수 있게 된다.
제품번호는 제품명과 가격을 각각 알 수 있다.
제품명은 가격을 알 수 있다.
이런 경우 다시 작성하면
제품 번호 -> 제품명
제품 번호 -> 가격
제품명 -> 가격으로 표기하여 알 수 있게 된다.
이렇게 연관 관계로 알 수 있게 되는 것을 이행적 함수 종속이라 한다.
오타 또는 이해가 어려운 부분, 올바르지 못한 정보가 있다면 댓글 부탁드리겠습니다!
짧은 포스팅 읽어주셔서 감사드립니다!
참조 주소
https://itwiki.kr/w/%ED%95%A8%EC%88%98%EC%A0%81_%EC%A2%85%EC%86%8D%EC%84%B1
'Database > Database' 카테고리의 다른 글
[Database] DML(Data Manipulation Language)이란? (Lightly) (0) | 2022.04.26 |
---|---|
[Database] SQL vs NoSQL (0) | 2022.04.11 |
[Project]pet and pet, Database[MySQL], schema (0) | 2022.03.05 |
[파이널 프로젝트] pet and pet erd (2) | 2022.02.26 |
세미 프로젝트 erd 제작 후기 (0) | 2022.02.20 |