[英]FK or FPK? Relational Databases
我有一個問題,我在互聯網上找不到任何答案。 這是關於數據庫設計的。
FPK和FK有什么區別? 我知道PK。
但是,無論何時我們擁有FK或FPK,我都不會完全理解FK / FPK密鑰。
我想您指的是外鍵和主鍵。 這是一篇介紹鍵的有趣文章: https : //www.essentialsql.com/what-is-the-difference-between-a-primary-key-and-a-foreign-key/
當您有一個與1:1關聯的表但主表中的每個記錄都沒有相關記錄時,可以使用外來主鍵。
示例:假設您有一個包含信息的表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
);
沒有“ FPK”(外來主鍵?)。 那是什么意思 你為什么認為有一個? 那么,“ FK”(外鍵)是什么意思? 您正在使用什么學術(組織/個人)教科書?
在關系模型中(但不是SQL):超鍵是一組具有唯一值的列。 (SQL UNIQUE NOT NULL
列集。)CK(候選鍵)是不包含更小的超鍵的超鍵。 PK是您決定調用PK的某些CK。 FK引用任何CK,而不僅僅是PK(主鍵)。 它表示列列表的子行值必須在其他地方作為CK列列表的子行值出現。
在SQL中: FK
聲明聲明一個外部超鍵 ,即它引用一個超鍵,即SQL UNIQUE NOT NULL
列列表。 僅當它引用的超鍵實際上是CK(可能是PK)時,才實際上聲明FK,即實際上是不包含更小的超鍵的超鍵,即是UNIQUE NOT NULL
或PK
,不包含更小的UNIQUE NOT NULL
或PK
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.