我有疑问,我无法在互联网上的任何地方找到答案。 它是关于数据库设计的。
FPK和FK有什么区别? 我知道PK。
但是,只要我们有FK或FPK,我就不会完全理解FK / FPK键。
答案 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
不包含小PK
或UNIQUE NOT NULL
。