外键的好处:
1减少重复数据
在删除主表数据前先删除与之相关的子表的相关数据
原则上主表的数据是不允许删除的
2可以设置级联删除和更新,保证数据库的完整性
3外键在一定程度上说明了业务逻辑,会使设计周到具体全面
保证了数据的一致性,完整性,程序无法100%确保数据的完整性,从这个角度看,外键似乎很有必要,
最主要的无非是数据的完整性
外键的缺点:
1过分强调或者说使用主键/外键会平添开发难度,导致表过多等问题
2不用外键时数据管理简单,操作方便 性能高
导入导出等操作,在insert update delete的时候更快
3可以使用触发器或应用程序保证数据的完整性
4在结合hibernate的使用时,难以驾驭
总结:
1在大型系统中,(性能要求不高 安全性要求高) 使用外键
大型系统中,(性能要求高,安全自己控制) 不用外键
小系统随便,最好用外键
2用外键要适当 不能过分追求
3不用外键而用程序控制数据一致性和完整性,应该写一层来保证,
然后个个应用通过这个层来访问数据库
SQL的主键和外键起约束作用
定义主键和外键主要是为了维护关系数据库的完整性
主键---唯一标识一条记录,不能有重复的,不允许为空
外键--表的外键是另一表的主键,外键可以有重复的,可以是空值
索引--该字段没有重复值 但可以有一个空值
主键----用来保证数据完整性
外键-------用来和其他表建立联系用的
索引-是提高查询排序的速度
主键---只能有一个
外键---一个表可以有多个外键
索引--一个表可以有多个唯一索引
|