2012-05-14 87 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

(PlaceId,CountyId)不是關鍵,因爲有2行具有相同的值。 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};你建議的「關鍵」不會允許這樣做。 (在不同日期的同一位置參加者人數) –