http://blog.csdn.NET/tiantian1980/article/details/1603126html
外键是数据库一级的一个完整性约束,就是数据库基础理论书中所说的“参照完整性”的数据库实现方式。
外键属性固然是能够去掉的,若是你不想再用这种约束,对编程固然不会有什么影响,但相应的录入数据的时候就不对录入的数据进行“参照完整性”检查了。
例若有两个表
A(a,b) :a为主键,b为外键(来自于B.b)
B(b,c,d) :b为主键
若是我把字段b的外键属性去掉,对编程没什么影响。
如上面,A中的b要么为空,要么是在B的b中存在的值,有外键的时候,数据库会自动帮你检查A的b是否在B的b中存在。mysql
一、外建表达的是参照完整性:这是数据固有的,与程序无关。所以,应该交给DBMS来作。
二、使用外建,简单直观,能够直接在数据模型中体现,不管是设计、维护等回有很大的好处,特别是对于分析现有的数据库的好处时很是明显的--前不久我分析了一个企业现有的数据库,里面的参照完整性约束有的是外键描述,有的是用触发器实现,感受很明显。固然,文档里可能有,可是也可能不全,可是外键就很是明显和直观。
三、既然咱们能够用触发器或程序完成的这个工做(指参照完整性约束),DBMS已经提供了手段,为何咱们要本身去作?并且咱们作的应该说没有RDBMS作得好。实际上,早期的RDBMS并无外键,如今都有了,我认为数据库厂商增长这个功能是有道理的。从这个角度来讲,外键更方便。
四、关于方便,根据我带项目的状况来看,程序员确实有反映,主要是在调试时输入数据麻烦:若是数据能够违反参照完整性,那么就是说参照完整性自己就不对名誉业务冲突,此时也不该该用触发期货程序实现;不然,说明数据是错误的,根本就不该该进入数据库!并且,这也应该是测试系统的一个内容:阻止非法数据。实际上,前台程序应该对这种提交失败作出处理。数据是企业的而非程序的,储程序要尽可能与数据分离,反之亦然。程序员
最后说一下,建键几个原则:sql
一、 为关联字段建立外键。
二、 全部的键都必须惟一。
三、避免使用复合键。
四、外键老是关联惟一的键字段。 数据库
http://www.cnblogs.com/ywb-lv/archive/2012/03/12/2391860.html
编程
定义主键和外键主要是为了维护关系数据库的完整性,总结一下:测试
1、主键是能肯定一条记录的惟一标识,好比,一条记录包括身份正号,姓名,年龄。身份证号是惟一能肯定你这我的的,其余均可能有重复,因此,身份证号是主键。spa
外键用于与另外一张表的关联。是能肯定另外一张表记录的字段,用于保持数据的一致性。好比,A表中的一个字段,是B表的主键,那他就能够是A表的外键。.net
定义:设计
主键--惟一标识一条记录,不能有重复的,不容许为空
外键--表的外键是另外一表的主键, 外键能够有重复的, 能够是空值
索引--该字段没有重复值,但能够有一个空值
做用:
主键--用来保证数据完整性
外键--用来和其余表创建联系用的
索引--是提升查询排序的速度
个数:
主键--主键只能有一个
外键--一个表能够有多个外键
索引--一个表能够有多个惟一索引