我正在学习SQL的基础知识,但我遇到了一些关键问题。
假设我们有两张桌子:
学生(PK =身份证)
列:ID / Name / Age
StudentResult (PK = ID +日期)
列:ID / Date / Grade / Result
我的教科书告诉我ID
不能成为StudentResult
表中的主键:
外键必须包含另一个表的主键的所有列。
我很难理解这一点。
这是否意味着StudentResult
将ID
作为主键,它还必须包含Name
和Age
列?
为什么ID
表中的Student
表中的外键可以作为上述声明?
我希望有人可以提供帮助,因为我真的希望更好地了解这是如何工作的,所以我可以继续前进。
由于
答案 0 :(得分:1)
为了使表符合“关系理论”,每个表(也称为实例化关系)必须具有“候选键”,这是一个不包含重复值的列。
这些候选键适合作为表的主键。
在您的情况下,[Student]
表的PK应为[ID]
,而[Student Result]
表的PK应为[ID]
。此外,您可以在引用[Student Result].[ID]
的{{1}}上声明外键。这意味着:[Student].[ID]
[Student Result]
中ID
不存在[Student].[ID]
中的行。如果您考虑一下,这是有道理的:如果相关学生不存在,您如何才能发布学生成绩?