系列文章目录
多表关联
1. 外键
-
不使用外键的情况:
先看一张表,它的部门字段中部门名称被存储了很多次,信息冗余大,极大的浪费存储空间:
但我们可以使用另外建表的方法,降低冗余。
-
使用外键的情况:
这样一来,我们只需将部门名称各存一次,之后用id代替汉字,降低了信息冗余和存储大小。 查询部门的时候,只需要按照“部门id”去被参照表的对应字段中查询就可以了。
上述例子中,左边表中的“部门id”字段就是外键,用来帮助我们建立表与表之间的关系。其中,左边的表叫做参照表,右边的叫做被参照表。
-
外键约束的语法:
CREATE TABLE 参照表名称( ...... FOREIGN KEY(外键) REFERENCES 被参照表(外键对应的被参照表的字段) );
-
表与表之间的四种关系:
一对多关系、多对多关系、一对一关系、没有关系。
2. 一对多关系
-
一对多关系的概念:
比如王老师(只有一个)和他所教的学生(有很多个)之间,就是一对多的关系。
在一对多关系中,外键要定义在多的一方(学生)。
注意!在创建参照表(学生)之前,要先创建被参照表(老师表),不然会报错。在新增记录的时候,也是如此。
-
级联更新和级联删除:
参照表的外键,如果设置了级联更新和级联删除,那么参照表在更新或删除记录时,被参照表的记录也会被一并更新或删除。
语法为:在外键约束后面写上:
ON UPDATE CASCADE # 级联更新 ON DELETE CASCADE # 级联删除
通常情况下,外键后面都要写这两个约束。
3. 多对多关系
-
多对多关系的概念:
比如某班级的所有任课老师(数学老师、英语老师等,有多个)和该班级所有的学生之间(也有多个),就是多对多的关系。
在多对多关系中,通常要单独建一张新的关系表,存放对相应关系。而这个关系表与另外两张表都是多对一关系:
之后就可以按照一对多关系,将外键设置在多的一方。上图中,外键应该设置为“老师id”和“学生id”。
4. 一对一关系
如果一张表里面有很多字段,但并不是所有字段都很常用。那么,就应该将不常用的字段拆分出去,组件另一张表。这两个表之间通常就是一对一关系。
我们可以直接使用外键进行关联,但此时的外键必须是唯一的。并且,外键可以设置在任何一方,但推荐设置在使用频率较高的一方。