(1)外鍵定義作用
外鍵是用于在兩個表中的數據之間建立和加強鏈接的一列或多列的組合,可控制可在外鍵表中存儲的數據。
外鍵用于與另一張表的關聯。是能確定另一張表記錄的字段,用于保持數據的一致性。比如,A表中的一個字段,是B表的主鍵,那他就可以是A表的外鍵
(2)外鍵約束
CONSTRAINT "fkeyid" FOREIGN KEY ("fid") REFERENCES "public"."person" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION,
ON DELETE NO ACTION ON UPDATE NO ACTION 是數據庫外鍵定義的一個可選項,用來設置當主鍵表中的被參考列的數據發生變化時,外鍵表中響應字段的變換規則的。
update則是主鍵表中被參考字段的值更新,delete是指在主鍵表中刪除一條記錄:on update 和 on delete 。
后面可以跟的詞語有四個no action , set null , set default ,cascade。
- no action 表示 不做任何操作。
- set null 表示在外鍵表中將相應字段設置為null。
- set default 表示設置為默認值。
- cascade 表示級聯操作,就是說,如果主鍵表中被參考字段更新,外鍵表中也更新,主鍵表中的記錄被刪除,外鍵表中改行也相應刪除。
注:理論上理解好,實際應用過程中很少建立實際的外鍵,只是邏輯上的外鍵。
1:在大數量的情況下,使用外鍵約束會導致很差的性能。互聯網很少用外鍵約束。
2:大數據量時進行表的水平切分,像外鍵約束、觸發器、存儲過程這些都是禁區
3:數據完整性是業務的需要,因此得由業務層的應用程序來控制
4:外鍵會導致表結構非常混亂,幾乎是動都不能去動,一層套一層的外鍵約束,在表很多的情況下很可能會導致循環約束