////
Search
🔑

후보키

문제 설명
제공된 릴레이션을 확인하고, 후보키의 개수를 구하는 문제이다. 우선 후보키에 대해 정확히 알아야 한다.
후보키유일성최소성모두 만족하는 속성 혹은 속성들의 집합을 말한다.
정확한 설명을 위해 문제에 작성된 설명을 그대로 작성하였다.
유일성(uniqueness) : 릴레이션에 있는 모든 튜플에 대해 유일하게 식별되어야 한다.
최소성(minimality) : 유일성을 가진 키를 구성하는 속성(Attribute) 중 하나라도 제외하는 경우 유일성이 깨지는 것을 의미한다. 즉, 릴레이션의 모든 튜플을 유일하게 식별하는 데 꼭 필요한 속성들로만 구성되어야 한다.
최소성이 조금 헷갈릴 수 있는데 예시를 들면 이해가 될 것이다.
(이름, 나이, 전화번호) 라는 속성의 조합이 유일성을 만족한다고 가정하자.
이때 이름라는 속성을 제외하면 (나이, 전화번호) 속성들의 조합
이때 나이라는 속성을 제외하면 (이름, 전화번호) 속성들의 조합
이때 전화번호라는 속성을 제외하면 (이름, 나이) 속성들의 조합
위 3가지 조합이 전부 유일성이 깨질경우 최소성이 만족하는 것이다.
하나라도 유일성이 만족하는 조합이 나온다면 (이름, 나이, 전화번호) 조합은 최소성을 만족하지 못한다.
설명의 마지막 처럼 “모든 튜플을 유일하게 식별하는 데 꼭 필요한 속성들로만 구성” 의 내용이다.
한마디로 “최소성 만족 조합 \subset 유일성 만족 조합” 이다.
성공 코드
코드 설명
크게 아래 순서로 진행하였다.
1.
모든 속성의 조합을 확인하여, 유일성 만족 여부를 boolean 값으로 사전에 저장
2.
유일성을 만족하는 속성들은 한개의 원소를 뺀 조합들을 다시 확인하여, 최소성을 만족하는지 다시 확인
이때 N개의 조합의 최소성을 확인하기 위해서는 N-1개 조합의 모든 유일성 만족여부가 기록된 상태여야한다. 즉, 1~N개 조합을 순서대로 확인해야 정상적으로 동작이 가능하다.