外键的作用详解

上传人:壹****1 文档编号:564412912 上传时间:2023-06-23 格式:DOCX 页数:5 大小:13.82KB
返回 下载 相关 举报
外键的作用详解_第1页
第1页 / 共5页
外键的作用详解_第2页
第2页 / 共5页
外键的作用详解_第3页
第3页 / 共5页
外键的作用详解_第4页
第4页 / 共5页
外键的作用详解_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《外键的作用详解》由会员分享,可在线阅读,更多相关《外键的作用详解(5页珍藏版)》请在金锄头文库上搜索。

1、外键的作用详解:保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。使两 张表形成关联,外键只能引用外表中的列的值!例如:a b两个表a表中存有客户号,客户名称b表中存有每个客户的订单有了外键后你只能在确信b表中没有客户x的订单后,才可以在a表中删除客户x建立外键的前提:本表的列必须与外键类型相同(外键必须是外表主键)。指定主键关键字:foreign key(列名)引用外键关键字:refere nces 外键表名(外键列名)事件触发限制:on delete和on update ,可设参数cascade(跟随外键改动), restrict(限制外表中的外键改动),set Null(设空值

2、),set Default (设默认值),默 认no acti on例如:outTable表主键id类型int创建含有外键的表:create table temp(id int,n ame char(20),foreig n key(id) refere nces outTable(id) on delete cascade on update cascade);说明:把id列 设为外键 参照外表outTable的id列当外键的值删除 本表 中对应的列筛除当外键的值改变 本表中对应的列值改变。今天有朋友问我外键的作用是什么当朋友问我外键的作用是什么时,我也愣了一下,平常都是在这么用,还没有 真

3、正的总结过,外分键的作用呢.下面,我总结了一下外键的作用:外键(FK)是用于建立和加强两个表数据之间的链接的一列或多列。通过将 保存表中主键值的一列或多列添加到另一个表中,可创建两个表之间的链接。这 个列就成为第二个表的外键。FOREIGN KEY约束的主要目的是控制存储在外键表中的数据,但它还可以控 制对主键表中数据的修改。例如,如果在publishers表中删除一个出版商,而 这个出版商的ID在tit les表中记录书的信息时使用了,则这两个表之间关联 的完整性将被破坏,tit les表中该出版商的书籍因为与publishers表中的数 据没有链接而变得孤立了。FOREIGN KEY约束防

4、止这种情况的发生。如果主键表 中数据的更改使之与外键表中数据的链接失效,则这种更改是不能实现的,从而 确保了引用完整性。如果试图删除主键表中的行或更改主键值,而该主键值与另 一个表的FOREIGN KEY约束值相关,则该操作不可实现。若要成功更改或删除 FOREIGN KEY约束的行,可以先在外键表中删除外键数据或更改外键数据,然后 将外键链接到不同的主键数据上去。外键是用来控制数据库中数据的数据完整性的就是当你对一个表的数据进行操作和他有关联的一个或更多表的数据能够同时发生改变这就是外键的作用精谈谈外键外键(FK)是用于建立和加强两个表数据之间的链接的一列或多列。通过将 保存表中主键值的一列

5、或多列添加到另一个表中,可创建两个表之间的链接。这 个列就成为第二个表的外键。FOREIGN KEY约束的主要目的是控制存储在外键表中的数据,但它还可 以控制对主键表中数据的修改。例如,如果在publishers表中删除一个出版商, 而这个出版商的ID在titles表中记录书的信息时使用了,则这两个表之间关联 的完整性将被破坏,titles表中该出版商的书籍因为与publishers表中的数据 没有链接而变得孤立了。FOREIGN KEY约束防止这种情况的发生。如果主键 表中数据的更改使之与外键表中数据的链接失效,则这种更改是不能实现的,从 而确保了引用完整性。如果试图删除主键表中的行或更改主

6、键值,而该主键值与 另一个表的FOREIGN KEY约束值相关,则该操作不可实现。若要成功更改或 删除FOREIGN KEY约束的行,可以先在外键表中删除外键数据或更改外键数 据,然后将外键链接到不同的主键数据上去。外键是用来控制数据库中数据的数据完整性的就是当你对一个表的数据进行操作和他有关联的一个或更多表的数据能够同时发生改变这就是外键的作用主键和外键是把多个表组织为一个有效的关系数据库的粘合剂。主键和外键 的设计对物理数据库的性能和可用性都有着决定性的影响。必须将数据库模式从理论上的逻辑设计转换为实际的物理设计。而主键和外 键的结构是这个设计过程的症结所在。一旦将所设计的数据库用于了生产

7、环境, 就很难对这些键进行修改,所以在开发阶段就设计好主键和外键就是非常必要和 值得的。主键:关系数据库依赖于主键-它是数据库物理模式的基石。主键在物理层面上只 有两个用途:1. 惟一地标识一行。2. 作为一个可以被外键有效引用的对象。基于以上这两个用途,下面给出了我在设计物理层面的主键时所遵循的一些 原则:1. 主键应当是对用户没有意义的。如果用户看到了一个表示多对多关 系的连接表中的数据,并抱怨它没有什么用处,那就证明它的主键设计地很好。2. 主键应该是单列的,以便提高连接和筛选操作的效率。注:使用复合键的人通常有两个理由为自己开脱,而这两个理由都是错 误的。其一是主键应当具有实际意义,然

8、而,让主键具有意义只不过是给人为地 破坏数据库提供了方便。其二是利用这种方法可以在描述多对多关系的连接表中 使用两个外部键来作为主键,我也反对这种做法,理由是:复合主键常常导致不 良的外键,即当连接表成为另一个从表的主表,而依据上面的第二种方法成为这 个表主键的一部分,然,这个表又有可能再成为其它从表的主表,其主键又有可 能成了其它从表主键的一部分,如此传递下去,越靠后的从表,其主键将会包含 越多的列了。3. 永远也不要更新主键。实际上,因为主键除了惟一地标识一行之外, 再没有其他的用途了,所以也就没有理由去对它更新。如果主键需要更新,则说 明主键应对用户无意义的原则被违反了。注:这项原则对于

9、那些经常需要在数据转换或多数据库合并时进行数据 整理的数据并不适用。4. 主键不应包含动态变化的数据,如时间戳、创建时间列、修改时间 列等。5. 主键应当有计算机自动生成。如果由人来对主键的创建进行干预, 就会使它带有除了惟一标识一行以外的意义。一旦越过这个界限,就可能产生认 为修改主键的动机,这样,这种系统用来链接记录行、管理记录行的关键手段就 会落入不了解数据库设计的人的手中。外键是数据库一级的一个完整性约束,就是数据库基础理论书中所说的“参 照完整性”的数据库实现方式。外键属性当然是可以去掉的,如果你不想再用这种约束,对编程当然不会有 什么影响,但相应的录入数据的时候就不对录入的数据进行

10、“参照完整性”检查 了。例如有两个表A(a,b) :a为主键,b为外键(来自于B.b)B(b,c,d) :b 为主键如果我把字段b的外键属性去掉,对编程没什么影响。如上面,A中的b要么为空,要么是在B的b中存在的值,有外键的时候, 数据库会自动帮你检查A的b是否在B的b中存在。1、外建表达的是参照完整性:这是数据固有的,与程序无关。因此,应该 交给DBMS来做。2、使用外建,简单直观,可以直接在数据模型中体现,无论是设计、维护 等回有很大的好处,特别是对于分析现有的数据库的好处时非常明显的-前不久 我分析了一个企业现有的数据库,里面的参照完整性约束有的是外键描述,有的 是用触发器实现,感觉很明

11、显。当然,文档里可能有,但是也可能不全,但是外 键就非常明显和直观。3、既然我们可以用触发器或程序完成的这个工作(指参照完整性约束), DBMS已经提供了手段,为什么我们要自己去做?而且我们做的应该说没有 RDBMS做得好。实际上,早期的RDBMS并没有外键,现在都有了,我认为数 据库厂商增加这个功能是有道理的。从这个角度来说,外键更方便。4、关于方便,根据我带项目的情况来看,程序员确实有反映,主要是在调 试时输入数据麻烦:如果数据可以违反参照完整性,那么就是说参照完整性本身 就不对名誉业务冲突,此时也不应该用触发期货程序实现;否则,说明数据是错 误的,根本就不应该进入数据库!而且,这也应该是

12、测试系统的一个内容:阻止 非法数据。实际上,前台程序应该对这种提交失败做出处理。数据是企业的而非 程序的,储程序要尽量与数据分离,反之亦然。最后说一下,建键几个原则:1、为关联字段创建外键。2、所有的键都必须唯一。3、避免使用复合键。4、外键总是关联唯一的键字段。外键是数据库一级的一个完整性约束,就是数据库基础理论书中所说的“参 照完整性”的数据库实现方式。外键属性当然是可以去掉的,如果你不想再用这种约束,对编程当然不会有 什么影响,但相应的录入数据的时候就不对录入的数据进行“参照完整性”检查 了。例如有两个表A(a,b) :a为主键,b为外键(来自于B.b)B(b,c,d) :b 为主键如果

13、我把字段b的外键属性去掉,对编程没什么影响。如上面,A中的b要么为空,要么是在B的b中存在的值,有外键的时候, 数据库会自动帮你检查A的b是否在B的b中存在。1、外建表达的是参照完整性:这是数据固有的,与程序无关。因此,应该 交给DBMS来做。2、使用外建,简单直观,可以直接在数据模型中体现,无论是设计、维护 等回有很大的好处,特别是对于分析现有的数据库的好处时非常明显的-前不久 我分析了一个企业现有的数据库,里面的参照完整性约束有的是外键描述,有的 是用触发器实现,感觉很明显。当然,文档里可能有,但是也可能不全,但是外 键就非常明显和直观。3、既然我们可以用触发器或程序完成的这个工作(指参照

14、完整性约束), DBMS已经提供了手段,为什么我们要自己去做?而且我们做的应该说没有 RDBMS做得好。实际上,早期的RDBMS并没有外键,现在都有了,我认为数 据库厂商增加这个功能是有道理的。从这个角度来说,外键更方便。4、关于方便,根据我带项目的情况来看,程序员确实有反映,主要是在调 试时输入数据麻烦:如果数据可以违反参照完整性,那么就是说参照完整性本身 就不对名誉业务冲突,此时也不应该用触发期货程序实现;否则,说明数据是错 误的,根本就不应该进入数据库!而且,这也应该是测试系统的一个内容:阻止 非法数据。实际上,前台程序应该对这种提交失败做出处理。数据是企业的而非 程序的,储程序要尽量与数据分离,反之亦然。最后说一下,建键几个原则:1、为关联字段创建外键。2、所有的键都必须唯一。3、避免使用复合键。4、外键总是关联唯一的键字段。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号