|
知识路径: > 信息系统工程技术知识 > 计算机技术知识与网络知识 > 数据库系统 > 完整性约束 >
|
相关知识点:9个
|
|
|
|
外键是指在关系模式R中作为候选键的属性集,但在关系模式T中不是候选键。则对于T来说,这些属性集称为相对于R的外键。通常外键在数据库中会被标记为FOREIGN KEY字样。在这里,称R为父模式,T为子模式。通俗地说,就是父表中的主键字段被子表中某个字段引用,那么子表的这个字段则应声明为外键,而父表的那个字段可以声明为主键,也可以声明为唯一键(候选键)。一旦子表的字段被声明为父表的外键,同样的一个字段在父表中称为引用的父键,在子表中称为引用的子键。子键的取值应遵守如下规则,否则将被禁止。
|
|
|
(1)每个子键的取值不能取父键中取值以外的值,但空除外。
|
|
|
(2)对于父键是组合字段的,子键也应是组合字段。父键要求能唯一地标识父表的每一条记录,而子键不要求能唯一标识子表的每一条记录。
|
|
|
(3)对于组合键,子键为空时,所有键的成员字段都为空,不允许部分为空。
|
|
|
一个子表可以有多个子键,每个子键可以对应不同父表的父键。如果是组合键,那么同一个字段可能作为不同外键的成员。当然,子表和父表是相对的,子表如果有唯一键被其他表引用,那么这时的子表对于其他表关于某键,它又是父表。外键的引入,主要是为了表示表间的一对多问题。下面的语句说明了两个表间的外键引用情况。
|
|
|
|
这两条语句创建了dept和emp两个表,其中dept表中的deptno是它的主键,它被表emp引用。在emp中也有个同样名字的deptno字段,这个字段被声明为引用dept.deptno字段的外键。那么dept表是父表,deptno构成了引用中父表的父键;emp表是子表,deptno构成了引用中子表的子键。
|
|
|
因为外键是引用父表父键的子表的子键,所以父表的数据是引用的基础。一旦父表数据被修改或删除,引用也会造成相关的影响,表现在子表和子键上,这就需要做出相应的规则来约定父表父键发生改动后子表子键如何来进行维护活动。根据这种活动,将子表的外键分为三大类。
|
|
|
(1)禁止更新和删除父键,许多DBMS默认为这一类外键约束。一旦父表的父键被某个子表的子键引用了,那么父表中已有的数据是禁止修改和删除的。
|
|
|
(2)删除或更新父表数据的同时删除或更新子表子键中对应父键取值的行。
|
|
|
(3)删除或更新父表数据的同时将子表中对应父键的子键的取值设置为NULL。
|
|
|
|
|
|
|
|
|
|