FK还是FPK?关系数据库

时间:2017-06-28 19:19:35

标签: mysql database relational

我有疑问,我无法在互联网上的任何地方找到答案。 它是关于数据库设计的。

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

但是,只要我们有FK或FPK,我就不会完全理解FK / FPK键。

2 个答案:

答案 0 :(得分:1)

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

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

实施例: 假设您有一个包含信息的表T1,并且您有一些记录的唯一信息记录,但不是T1中的所有记录。

因此,您决定将数据存储在另一个表T2中,以便不会有包含数百个空单元格的列。

由于这些是唯一记录(T1和T2之间的1:1),T2可以拥有自己的主键和外键,也可以使用外键作为主要ID(T2.T1_id)将它们组合成1个字段:

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
);

答案 1 :(得分:0)

没有" FPK" (外国主键?)。你是什​​么意思?为什么你认为有一个?你是什​​么意思" FK" (外键)呢?您使用的是哪种学术(组织/人)教科书?

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

在SQL中:FK声明声明外部超级密钥,即它引用超级密钥,即SQL UNIQUE NOT NULL列列表。当它引用的超级密钥实际上是一个CK(可能是PK)时,它只是实际声明一个FK,即实际上是一个不包含更小的超级密钥的超级密钥,即是{{1} }或UNIQUE NOT NULL不包含小PKUNIQUE NOT NULL