外键、超键、候选键
外键
外键:指向另一张表的主键
Foreign key(外键字段) references 表(主键)
子表(外键所在)外键不能指向不匹配的父表主键
父表主键不能随意更改,默认为严格模式,不能删除或更新记录,级联模式,父表更新记录子表也更新,置空模式,父表更新记录子表关联数据置空
外键的两端必须类型相同,至少存在一对相同的数据,表中外键名不能重复,存储引擎必须是innodb
不推荐使用外键,原因在于外键会对删除和更新操作造成限制,导致开发和测试困难,而且会造成性能浪费、并发问题,不加外键数据迁移分库分表会更方便,从本质上讲,使用外键完全在应用程序上实现逻辑,无需借助数据库,否则会造成数据库性能下降,毕竟数据库的主要工作是存储和快速查询
超键
超键:如果有一学生表(学号,姓名,性别,身份证号),那么含有学号或身份证号的任何字段组合都是超键,比如(学号)、(学号,姓名)、(身份证号、性别),这样的组合可以唯一标识一条记录。(但是学号和身份证号不一定是复合主键,它们中的一个可能会被定义成主键)
候选键
候选键:超键中的最小集,如果去掉任意一个字段就不再是超键了,那么这个超键就是候选键,如(学号)、(身份证号)