数据库中外键的做用以及和主键的区别

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


2、主键、外键和索引的区别

定义:设计

 主键--惟一标识一条记录,不能有重复的,不容许为空

 外键--表的外键是另外一表的主键外键能够有重复的能够是空值

 索引--该字段没有重复值,但能够有一个空值


做用:

 主键--用来保证数据完整性

 外键--用来和其余表创建联系用的

 索引--是提升查询排序的速度


个数:

 主键--主键只能有一个

 外键--一个表能够有多个外键

 索引--一个表能够有多个惟一索引