FK 还是 FPK?关系数据库

FK or FPK? Relational Databases

我有一个问题,我无法在 Internet 上的任何地方找到答案。 这是关于数据库设计的。

FPK和FK有什么区别? 我会PK。

但我不完全理解 FK/FPK 键,每当我们有 FK 或 FPK 时。

我猜你指的是外键和主键。 这是一篇解释键的有趣文章: https://www.essentialsql.com/what-is-the-difference-between-a-primary-key-and-a-foreign-key/

当您有一个 table 与 1:1 相关但 dows 主 table 中的每条记录都没有相关记录时,可以使用外部主键。

示例: 假设您有一个包含信息的 table T1,并且您有一些记录的唯一信息记录,但不是全部在 T1 中。

因此您决定将数据存储在另一个 table T2 中,以免列中有数百个空单元格。

因为这些是唯一记录(1:1 在 T1 和 T2 之间)T2 可以拥有自己的主键和外键,或者使用外键作为主 ID(T2.T1_id):

CREATE TABLE `T1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
);

CREATE TABLE `T2` (
  `T1_id` int(11) NOT NULL,
  `specinfo` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`T1_id`),
  CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`T1_id`) REFERENCES `T1` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
);

没有"FPK"(外键?)。你这是什么意思?为什么你认为有一个?那么 "FK" (外键)是什么意思?您使用的是什么学术 (organization/person) 教科书?

在关系模型中(但不是 SQL):超级键是一组具有唯一值的列。 (SQL UNIQUE NOT NULL 列集。)CK(候选键)是一个不包含更小超级键的超级键。 PK 是您决定调用 PK 的一些 CK。 FK 引用任何 CK,而不仅仅是 PK(主键)。它说列列表的子行值必须作为 CK 列列表的子行值出现在其他地方。

在SQL中:一个FK声明声明了一个外国超级键,即它引用了一个超级键,即SQLUNIQUE NOT NULL 列列表。它只是 实际上 在它引用的超级键实际上是 CK(可能是 PK)时声明 FK,即实际上是一个不包含更小超级键的超级键,即 UNIQUE NOT NULLPK 不包含更小的 UNIQUE NOT NULLPK.