当我们利用主键唯一标识记录时,我们就可以在例如学生表中确定任意一个学生的记录
例如班级表
那么如何确定一个学生属于哪个班级呢?
很明显班级和学生的对应关系是一对多
为了实现数据表之间数据的一对多关系,需要在学生表中加入一列class_id
,让其值对应班级表中的某个记录
外键:将数据与另一张表关联起来
ALTER TABLE students
ADD CONTRAINT fk_class_id
FOREIGN KEY class_id
REFERENCE classes(id);
ADD CONTRAINT fk_class_id
:外键约束,保证关系数据库无法插入无效的数据
但是由于外键约束会降低数据库的性能,一半并不设置,而是仅靠应用程序自身来保证逻辑的正确性
删除一个外键约束:
ALTER TABLE students
DROP FOREIGN KEY kf_class_id
删除一个外键
ALTER TABLE students
DROP COLUMN class_id
删除一个外键就是删除表中的一列
多对多关系
例如:一个老师可以对应多个班级,一个班级可以对应多个老师
多对多关系实际上是通过两个一对多关系实现的
通过一个中间表关联两个一对多关系:
teacher_id,class_id
一对一关系
一对一关系,一个表的记录对应到另一个表的唯一记录,如果业务允许完全可以两个表合成一个表
增加一列即可
只不过有一些应用会把一个大表拆成两个一对一的表
目的:将经常读取和不经常读取的字段分开,以获得更高的性能
可以作为调优的方法
例如:将一个大的用户表拆成用户基本信息表和用户详细信息表,大部分时候,只需要查询用户基本信息表即可,这样就提高了查询速度