如何知道密钥是主要密钥还是外部密钥?

时间:2014-04-29 13:00:53

标签: sql foreign-keys primary-key

我正在学习SQL的基础知识,但我遇到了一些关键问题。

假设我们有两张桌子:

学生(PK =身份证)

列:ID / Name / Age

StudentResult (PK = ID +日期)

列:ID / Date / Grade / Result

我的教科书告诉我ID不能成为StudentResult表中的主键:

外键必须包含另一个表的主键的所有列。

我很难理解这一点。

  1. 这是否意味着StudentResultID作为主键,它还必须包含NameAge列?

  2. 为什么ID表中的Student表中的外键可以作为上述声明?

  3. 我希望有人可以提供帮助,因为我真的希望更好地了解这是如何工作的,所以我可以继续前进。

    由于

1 个答案:

答案 0 :(得分:1)

为了使表符合“关系理论”,每个表(也称为实例化关系)必须具有“候选键”,这是一个不包含重复值的列。

这些候选键适合作为表的主键。

在您的情况下,[Student]表的PK应为[ID],而[Student Result]表的PK应为[ID]。此外,您可以在引用[Student Result].[ID]的{​​{1}}上声明外键。这意味着:[Student].[ID] [Student Result]ID不存在[Student].[ID]中的行。如果您考虑一下,这是有道理的:如果相关学生不存在,您如何才能发布学生成绩?