(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:外键会导致表结构非常混乱,几乎是动都不能去动,一层套一层的外键约束,在表很多的情况下很可能会导致循环约束