2016-03-21 106 views
0

enter image description hereSQL主键约束

在一本书我读他们指出,在教导表,基于上面图片中的架构图上,加下划线的列名Primary keys (ID, course_id, sec_id, semester, and year)。我有点困惑,因为我原本以为你只能在一个表中有一个Primary Key。我不太了解哪些是主键,哪些是上图中的外键约束。有人可以向我解释如何通过这样的图表来识别这些键吗?

此外,有可能使(course_id, sec_id, semester, and year)(foreigns keys)来自参考教导主键(course_id, sec_id, semester, and year)的部分表。那不正确?由于对于每个组合中的(course_id, sec_id, semester, and year),您可能会从教师桌上获得多个ID,因为您可以为每个部分设置多个教师。因此,这意味着您的部分外键来自教导中的多行,并且不会形成教授的正确的主键组合。

+1

它们是其他表中的主键;在教学中,它们是对其他表中的主键的引用,并且应该具有外键约束---也就是说,您不应该能够将course_id分配给course_id表中不存在的教程。您可以通过列名称和从字段绘制到它所引用的表/字段的行来标识它们。 – JLB

+0

所以这意味着在部分表中PK是course_id,sec_id,学期和年份。换句话说,部分中的(course_id,sec_id,学期和年)的每个组合都必须是唯一正确的?既然你不能有PK的重复值? – LP496

+1

表只能有一个主键。主键= 1.主键是从表中获取所需内容的关键:)所以在该表中,它将引用course_id表中的一行,等等等等。 – JLB

回答

2

您只能为表设置1个主键,但是:主键由1列或更多列组成。

另一个问题是: 在类似上面的图表中,您可以通过简单地按照箭头标识引用列。 例如: advisor.i_id参考指导.ID

希望这有助于!

Greetings

+1

在这样的图中,您可以通过下划线标识主键的一部分。因此对于教学,主键由所有列组成。教室f.e.中,主键只有building和room_no,容量不是pk的一部分。 – ndo

+0

哦,arite。那么在sec_id部分中,学期,年份和course_id是主键? – LP496

+1

在section中,sec_id,semester,year和course_id是主键(注意单数!),主键由这4列组成。同时,列course_id是表格课程的主键和表格部分的一个外键。一个由多个col组成的pk也可以包含外键。 – ndo