外键(连接列)

外键是一个表中的一列或一组列,它包含与另一个表中的主键相匹配的值。外键用来连接表。下图显示了演示数据库中的 customerorders 表的主键和外键。

图: customer-order 关系中的主键和外键


两个数据库表中的各个部分以图形方式显示为类似表或矩阵的矩形单元格集合。一些列标注有数据库表中所表示列的名称。对于名为“customer”的表,只标注了 customer_num 列。 customer_num 列加了阴影并且标记为表的主键。 对于名为“orders”的表标注了两列:order_num 和 customer_num。 customer_num 列加了阴影并且标记为表外键。 一个灰色箭头从 orders 表的 customer_num 列中某个单元格指向 customer 表的 customer_num 列中某个单元格。这表示外键列中的值引用主键列中的现有值。
提示: 为了便于维护和使用表,请务必对主键和外键使用合适的名称以使关系显而易见。在图 1 中,主键和外键列具有相同的名称 customer_num。或者,也可以将图 1 中的列命名为 customer_custnumorders_custnum,这样每个列就具有不同的名称。

模型中所有出现外键的位置都会加以标注,这是因为它们的存在会对从表中删除行的能力加以限制。在可以安全地删除行之前,必须删除所有通过外键引用该行的行,或者必须用特殊的语法来定义关系,以允许使用单个删除命令来从主键和外键列中删除行。数据库服务器不允许违反引用完整性的删除操作。

为了保持引用完整性,在删除外键行引用的主键之前,应删除所有那些外键行。如果对数据库施加引用约束,那么数据库服务器不允许删除带有匹配外键的主键。数据库服务器也不允许添加未引用现有主键值的外键值。 有关参照完整性的更多信息,请参阅 GBase 8s SQL 指南:教程