簡體   English   中英

FK還是FPK? 關系數據庫

[英]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 NULLPK ,不包含更小的UNIQUE NOT NULLPK

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM