2012-05-14 42 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};你建议的“关键”不会允许这样做。 (在不同日期的同一位置参加者人数) –