2012-05-14 3 views
0

다음 표가 있으며 기본 키, 수퍼 키 및 후보 키를 얻는 방법을 알고 싶습니다.기본, 후보 및 수퍼 키

후보 키가 최소 수퍼 키임을 알고 있습니다.

올바른 기본 키 PlaceId CountyId, 후보 키 PlaceId, CountyId, Date 및 수퍼 키가 PlaceId, CountyId, Date, Attendees일까요?

CREATE TABLE IF NOT EXISTS `visits` (
    `PlaceId` varchar(45) DEFAULT NULL, 
    `CountyId` varchar(45) DEFAULT NULL, 
    `Date` date NOT NULL, 
    `Attendees` varchar(45) DEFAULT NULL, 

INSERT INTO `visits` (`PlaceId`, `CountyId`, `Date`, `Attendees`) VALUES 
('Bangor', 'Gwynedd', '2012-05-03', '34'), 
('Bangor', 'Gwynedd', '2012-05-04', '24'), 
('Rhyl', 'Denbighshire', '2012-05-06', '14'); 
+1

(CountyId, CountyId)은 두 개의 행에 동일한 값이 있으므로 키가 아닙니다. CountyId가 키에 속하는지 여부는 기능적으로 PlaceId에 의존하는지 여부에 따라 달라집니다 (4 개의 샘플 행을 기준으로 표시되지만 일반적으로는 아닐 수도 있음). –

+1

나는 그 열을 키로 사용하지 않을 것이고,'varchar (45)'ouch! 장소, 국가 및 참석자별로 새 테이블을 만든 다음 새 테이블 각각의 int pk를 사용하여이 방문 테이블로 다시 FK합니다. int 값을 가진 참석자가있는 것 같습니다. 왜 varchar (45)를 사용합니까? –

답변

1

이 제공되는 샘플 데이터를 기반으로, 어떤 장소, 카운티, 날짜참석자 평균 유일한 후보 키가 {PlaceId, CountyId, 날짜에 대한 이해에 }.

후보 키가 하나뿐이므로 후보 키도 기본 키이어야합니다.

모든 속성 집합은 사소한 수퍼 키입니다. 그래서 한 슈퍼 키는 {PlaceId, CountyId, Date, Attendees}입니다. 다른 하나는 {PlaceId, CountyId, Date}입니다.

+0

감사합니다 4 {PlaceId, CountyId, Attendees} 님이 날짜를 기본값으로 변경하면 후보 키가됩니까? – suryll

+1

@suryll : 아니요. 샘플 데이터가 허용되지만 샘플 데이터는 대표가 아닙니다. 분명히 { 'Bangor', 'Gwynedd', '2012-05-05', 34}와 같은 것을 허용해야합니다. 당신이 제안하는 "열쇠"는 그것을 허용하지 않을 것입니다. (다른 날짜에 한 곳에서 같은 수의 참석자가 있습니다.) –