1.理解表与表之间建立关系的必要性
比如我们建立了一张个人信息表,把所有人的信息都存在这张表中
这张表中有老师和他们所属的部门,并且不同的部门工作也是不同的
所有数据存放在一张表中的弊端
1.组织结构不清晰
2.浪费存储空间
3.扩展性差
针对这个问题我们可以将他们分成两张表,一张专门记录个人信息,一张专门记录部门和部门工作
建立表的时候我们需要进行分析
1.站在个人信息表的角度:一个老师能否属于多个部门,不能!!!
2.站在部门表的角度:一个部门能否有多个老师,可以!!!
那这两张表的关系就是老师表多对一部门表,也可以这么说,部门表一对多老师表
在表中是如何表示这种关系,需要找出一个两者中独一无二的东西并且把他们连接起来,我们在部门表中创建一个部门的id,在老师表中添加这个属性并指向部门id
如下表所示
这样我们就可以把两者联系起来了,但是老师的dep_id我们还是可以随意的修改,应该有一个限制,限制他们只能和部门表的id相同才对
2.外键(foreign key)
什么是外键
如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。
外键的作用
保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值或使用空值。外键拥有能使两张表阻止执行和级联执行的特点
所以要把两张有关联的表联系起来需要用到外键(foreign key)
阻止执行
从表插入新行,其外键值不是主表的主键值便阻止插入;
从表修改外键值,新值不是主表的主键值便阻止修改;
主表删除行,其主键值在从表里存在便阻止删除(要想删除,必须先删除从表 的相关行);
主表修改主键值,旧值在从表里存在便阻止修改(要想修改,必须先删除从表的相关行)。
级联执行
主表删除行,连带从表的相关行一起删除;
主表修改主键值,连带从表相关行的外键值一起修改。两种方法提供给用户选择。无论选取哪种方法,从表里都不会有多余行。从另一个角度理解,用拒绝同一事物在从表中的标志与主表不一致来实现与主表中的标志一致。
3.表与表关系之一对多
还是使用上面老师表和部门表的例子,两者是一对多的关系