什么是外键?为什么要使用外键?如何来用?不用会怎样?
2009-08-21 10:40
639 查看
什么是外键
外键 (FK) 是用于建立和加强两个表数据之间的链接的一列或多列。通过将保存表中主键值的一列或多列添加到另一个表中,可创建两个表之间的链接。这个列就成为第二个表的外键。
为什么要使用外键?
保证数据的参照完整性
不用会怎样?
不用也不会怎么样,如果一个健壮的系统,数据库中的数据一定有很好的参照完整性,如果不用外键,就要多写代码对数据的完整性进行额外的判断
外键的作用很重要,最好在数据库中使用。举一个例子比较明白。
比如有两张表格,一个是学生档案,另一个是上学期间的成绩单
档案中会有:学号,姓名。(学号为主键)
成绩单有(简化过的):学期号,学号,平均分数(学期号,学号两个同时为主键,学号同时为外键)
为了保证成绩单上的数据有效,所以要求录入学号时,必需保证档案中有这个学号,否则就不能录入。
从而保证了成绩单上的成绩数据的引用完整,否则将会是垃圾数据。
用程序控制,有很多缺点;录入成绩单时为了保证学号有效,首先要搜索档案,当档案很大时会影响效率。程序控制并不能保证百分之百引用完整性,尤其是并发操作。
说一个特例(主要是说明程序控制不好):
A录入成绩单,B在编辑档案。
当A录入张三的成绩,保存时,搜索张三存在,于是程序下一步就要存盘,但这时B恰好把张三删除了。但A那边的程序并不知道,于是就把一条垃圾数据存进数据库中了。
此例的操作流程正确与否不重要,但说明了程序控制并不是好方法。
外键 (FK) 是用于建立和加强两个表数据之间的链接的一列或多列。通过将保存表中主键值的一列或多列添加到另一个表中,可创建两个表之间的链接。这个列就成为第二个表的外键。
为什么要使用外键?
保证数据的参照完整性
不用会怎样?
不用也不会怎么样,如果一个健壮的系统,数据库中的数据一定有很好的参照完整性,如果不用外键,就要多写代码对数据的完整性进行额外的判断
外键的作用很重要,最好在数据库中使用。举一个例子比较明白。
比如有两张表格,一个是学生档案,另一个是上学期间的成绩单
档案中会有:学号,姓名。(学号为主键)
成绩单有(简化过的):学期号,学号,平均分数(学期号,学号两个同时为主键,学号同时为外键)
为了保证成绩单上的数据有效,所以要求录入学号时,必需保证档案中有这个学号,否则就不能录入。
从而保证了成绩单上的成绩数据的引用完整,否则将会是垃圾数据。
用程序控制,有很多缺点;录入成绩单时为了保证学号有效,首先要搜索档案,当档案很大时会影响效率。程序控制并不能保证百分之百引用完整性,尤其是并发操作。
说一个特例(主要是说明程序控制不好):
A录入成绩单,B在编辑档案。
当A录入张三的成绩,保存时,搜索张三存在,于是程序下一步就要存盘,但这时B恰好把张三删除了。但A那边的程序并不知道,于是就把一条垃圾数据存进数据库中了。
此例的操作流程正确与否不重要,但说明了程序控制并不是好方法。
相关文章推荐
- Python 集合是什么,为什么应该使用以及如何使用?
- 是否有必要使用外键?为什么不用外键?
- Java-线程池专题(什么是线程池,如何使用,为什么要用)
- 牛客网Java刷题知识点之什么是内部类、为什么要使用内部类、内部类如何使用外部类的属性和方法、成员内部类、局部内部类、静态内部类、匿名内部类
- 设备驱动程序是什么?为什么要有设备驱动程序?用户进程怎样使用驱动程序?
- 什么是闭包,如何使用它,为什么要使用它?
- Torch是什么,如何使用Torch,为什么选择Torch?
- 什么是挂载?为什么在Linux系统下U盘要先挂载才能使用?挂载步骤是怎样的?
- 有哪些类加载器?解释什么是双亲委派模型,为什么使用双亲委派模型,如何自定义类加载器?什么时候应该自定义类加载器?
- 你如何理解 HTML5 的 section?会在什么场景使用?为什么这些场景使用 section 而不是 div?
- PHP 为什么要使用命名空间,命名空间的作用是什么,如何更好的使用命名空间【详解】
- 国嵌不用jlink那使用什么下载逻辑程序并单步调试的?& h-jtag原理,和jlink区别 & jlink为什么这么贵。
- Java-线程池专题(什么是线程池,如何使用,为什么要用)
- C++语言笔试题目 C++中为什么用模板类&& 类中如何使用const &&函数重载,我们靠什么来区分调用的那个函数?靠返回值判断可以不可以
- 黑马程序员-- 高级网络编程 什么是泛型?泛型的定义?泛型如何使用?为什么要使用泛型?
- Python 集合是什么,为什么应该使用以及如何使用?
- 为什么使用Junit Test而不用普通java main方法来完成测试?
- sftp在脚本中如何时使用(不用输入密码)
- 揭开宏的神秘面纱:什么是宏,为什么使用宏?
- 为什么Linux允许用户删除根目录?如何删了会怎样?