外键foreign key
什么是外键?
外键就是用来链接别的库,让两种表有代码层面上正真的关联mysql
外键的约束:
在建立表的时候必须先建立被关联的表。git
插入数据的时候 也必须先插入被关联表的数据github
关系
在数据库中,将实体与实体的关系反应到表的设计上来,能够细分为 3 种,分别为:一对一(1:1)
,一对多(1:N)
(或多对一(N:1)
)和多对多(N:N)
。sql
在此,全部的关系都是指表与表之间的关系。数据库
一对一
一对一,即一张表的一条记录只能与另一张表的一条记录相对应,反之亦然。spa
例如,我们设计一张「我的信息表」,其字段包含:姓名、性别、年龄、身高、体重、籍贯和居住地等。设计
如上表所示,基本知足我们的要求,其中姓名、性别和年龄属于经常使用数据,可是身高、体重、籍贯和居住地为不经常使用数据。若是每次查询都要查询全部数据的话,那么不经常使用数据就会影响效率,并且又不经常使用。所以,我们能够将经常使用的数据和不经常使用的数据分离存储,即分为两张表,例如:code
表 1:经常使用数据blog
表 2:不经常使用数据get
如上面表1
和表2
所示,经过字段ID
,表1
中的一条记录只能匹配表2
中的一条记录,反之亦然,这就是一对一
的关系。
一对多
一对多,即一张表中的记录能够对应另一张表中的多条记录,可是反过来,另一张表中的一条记录只能对应第一张表中的一条记录。
例如,我们设计「国家城市表」,其包含两个实体,即国家和城市。
表 3:国家表
表 4:城市表
如上面表3
和表4
所示,经过字段国家
,表3
中的一条记录能够匹配表4
中的多条记录,但反过来,表4
中的一条记录只能匹配表3
中的一条记录,这就是典型的一对多
的关系。
多对多
多对多,即一张表中的记录能够对应另一张表中的多条记录,反过来,另一张表中的一条记录也能够对应第一张表中的多条记录。
例如,我们设计「教师学生表」,其包含两个实体,即教师和学生。
表 5:教师表
表 6:学生表
观察上面的表5
和表6
,我们会发现:表5
和表6
的设计知足了实体的属性,但没有维护实体之间的关系,即一个老师教过多个学生,一个学生也被多个老师教过。可是不管我们在表5
中仍是在表6
中增长字段,都会出现一个问题,那就是:该字段要保存多个数据,而且仍是与其余表有关系的字段,不符合设计规范。所以,我们能够再设计一张「中间表」,专门用来维护表5
和表6
的关系。
表 7:中间表
观察上面的表5
、表6
和表7
,我们会发现增长表7
以后,我们维护表5
和表6
的关系更加方便了!不管是想从表5
经过表7
查到表6
,仍是想从表6
经过表7
查到表5
,都很是容易啦!这就是典型的多对多
的关系。