【问题标题】:SQL Primary Key ConstraintSQL 主键约束
【发布时间】:2016-03-21 21:30:46
【问题描述】:

在我正在阅读的一本书中,他们指出在教表中,根据上图中的 Schema 图,带下划线的列名是Primary keys (ID, course_id, sec_id, semester, and year)。我对这怎么可能有点困惑,因为我最初认为您只能在一张表中拥有一个 Primary Key。我不太明白上图中哪些是主键,哪些是外键约束。有人可以通过这样的图表向我解释如何识别这些键吗?

此外,是否可以从参考教主键(course_id, sec_id, semester, and year) 的节表中生成(course_id, sec_id, semester, and year)(foreigns keys)。那不会正确吗?因为对于每个部分的(course_id, sec_id, semester, and year) 组合,您可能有多个来自teacher 表的ID,因为每个部分可以有多个教师。因此,这意味着您具有引用来自教导的多行的部分的外键,并且不会形成教导的正确主键组合。

【问题讨论】:

  • 它们是其他表中的主键;在教学中,它们是对其他表中主键的引用,并且应该具有外键约束——也就是说,您不应该将 course_id 分配给 course_id 表中不存在的教师。您可以通过列名和从字段到它所引用的表/字段的线来识别它们。
  • 这意味着在节表中,PK 是 course_id、sec_id、学期和年份。换句话说,部分中(course_id、sec_id、学期和年份)的每个组合都必须是唯一的,对吗?既然 PK 不能有重复值?
  • 一张表只能有一个主键。 Primary = 1。主键是从表中获取所需内容的关键 :) 因此,在该部分表中,它将恰好引用 course_id 表中的一行,等等
  • 第二次看,我认为部分中没有 PK,它似乎是一个“桥梁”表,用于关联来自其他表的各种键。 FWIW,那张图很差。
  • 是的,很难理解正在发生的事情。

标签: mysql sql foreign-keys primary-key


【解决方案1】:

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

另外一点是: 在类似上面的图表中,您可以通过简单地跟随箭头来识别引用的列。 例子: advisor.i_id 引用了instructor.ID

希望这会有所帮助!

问候

【讨论】:

  • 在这样的图中,您可以通过下划线来识别属于主键的列。因此,对于教师来说,主键由所有列组成。 Classroom f.e.,主键只有 building 和 room_no,容量不是 pk 的一部分。
  • 哦,阿瑞特。那么在sec_id部分中,semester、year和course_id是主键吗?
  • 在section中,sec_id、semester、year和course_id是主键(注意单数!),主键由这4列组成。同时, course_id 列是表 course 的主键和表节的一个外键。由多个 col 组成的 pk 中也可以包含外键。
  • 哦,我现在明白了!感谢您的澄清!
  • "...section 表中的每一行都必须具有(sec_id、semester、year 和 course_id)的唯一组合..." 没错,是的!并且-为了完成您的示例-您还可以使用“(1234, fall, 2010, 16)”等等。 pk 的唯一性(pk 列值的组合)就是重点。
猜你喜欢
  • 1970-01-01
  • 2021-04-11
  • 2016-08-24
  • 1970-01-01
  • 2015-11-29
  • 2013-10-06
  • 1970-01-01
  • 2011-11-20
相关资源
最近更新 更多