好处:

保持了数据的一致性

有主外键的数据库设计可以增加ER图的可读性,这点在数据库设计时非常重要

外键在一定程度上说明了业务逻辑,会使设计周到具体全面



坏处:

操作数据方面增加了很多的限制,增加了维护成本。往往你更新删除子表数据时都会扫描主表进行判断,新增子表数据关联不上主表,插入失败,这些隐式操作,很是拖累系统,性能很差。


可以用触发器或应用程序保证数据的完整性
过分强调或者说使用主键/外键会平添开发难度,导致表过多等问题
不用外键时数据管理简单,操作方便,性能高(导入导出等操作,在insert,   update,   delete   数据的时候更快)
在海量的数据库中想都不要去想外键,试想,一个程序每天要insert数百万条记录,当存在外键约束的时候,每次要去扫描此记录是否合格,一般还不 止一个字段有外键,这样扫描的数量是成级数的增长!我的一个程序入库在3个小时做完,如果加上外键,需要28个小时!


 alter table table2 add constraint id_fk  foreign key (id) references table1 (id)  外键是建立在子表中