【数据库】外键的作用

前言

说到外键,一般就会牵扯出约束。不谈约束,起始外键就是一个普通的字段(Column),起到一个关联的作用。

先把约束放一边,看看外键有哪些作用。


建立表中记录的一对一的关系

学生表:

手机表:

学生有一个字段是手机id,而手机存在多个属性,那现在把手机单独建一张表。

这样如果那天想查所有手机号时,直接查这张表效率更高。此时的PhoneId就是学生表的外键。而且是手机表的主键。

这里的一个特点,一个表的外键,在另一个表中,必须为主键。所以外键通常就一个ID。这个ID关联起两张表。如果是一对一,做表联结也非常简单。


一对多(多对一)的关系

假设这个学校有三个学生,两个老师,每个学生只能选择一个老师

学生表:

老师表:

可以看到,学生12选择导师Song,这就是多个学生选择一个老师, 这个和一对一几乎没啥变化。也就是告诉你外键本身是可以重复的。

这样,又发现一个好处,多对一的情况下,相比建一个表,通过外键建两张表更节省空间。


多对多的关系

但是,如果学生可以选择多个老师,老师也可以拥有多个学生呢?

这就是多对多。

学生表:

教师表:

外键表:

发现多对对的情况下,学生表和教师表,都不存在外键。外键存在于另外一张中间表,称之为外键表(当然这张表也有主键,这里为了关注重点,省略了)

通过这个外键表,可以清晰的看出,学生1拥有两个老师(2,3),学生3有三个老师(1,2,3)

而老师2,有两个学生(1,3),老师3有两个学生(3,1)


约束

更能体现外键作用的是约束,约束其实是定义好的规则,简化对数据库操作。就是某些操作在定义好的约束后,自动完成!这就是定义外键的另一好处。

约束分为删除和更新。删除用的较多。


删除约束

学生表:

手机表:

拿一对一的举例,通常将拥有外键的表称为子表,这里学生表就是子表,手机表就是学生表的主表。 删除约束,就是当主表中的某条记录被删除时,子表中对应的记录如何处理?

方式1:当主表中的某条记录被删除时,对应的子表中的记录中的外键自动置为Null。

方式2:当主表中的某条记录被删除时,对应的子表中的元素自动也删除。

方式3:当主表中的某条记录被删除时,如果子表有记录关联到该主表记录,此时无法删除主表中的这条记录,会报错。


更新约束

这个情况发生较少,就是当手机表中的PhoneId发生更改时,学生表中的PhoneId也会随之自动变化。

猜你喜欢

转载自blog.csdn.net/wangshiqi666/article/details/131492489
今日推荐