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