SQL数据库的主键和外键

数据库系统是一种具备了海量存储、方便并且查询速度快、具备可控并发操作、安全、数据完整型的一种数据存储系统。

表的主键

在设计数据库的时候,在一般情况下,一张表必须而且只能含有一个主键:

工号 姓名 性别 级别
001 张毅 LV.13
002 小乔 LV.13
003 艾希 LV.14
004 阳洋 LV.14

在上述的这张表中,工号这一列中的内容是唯一的,自增长的,面对这样的情况,就可以使用”工号”这一列最为这张表的主键,称为业务主键

姓名 性别 级别
张毅 LV.12
张毅 LV.13
小乔 LV.13
艾希 LV.14
阳洋 LV.14

如果现在这个表中并没有工号这一列,就没法在这个表格中找到一列单独的唯一的数据,因为姓名也是会重复的如上图所示,所以这个时候,我们就需要为这个表新建一列逻辑主键来单独存放主键

姓名 性别 级别 小组
张毅 LV.12 G1
小聪 LV.13 G1
张毅 LV.13 G2
小乔 LV.13 G2
艾希 LV.14 G3
阳洋 LV.14 G3

如果因为业务需求,我们没法添加一列逻辑主键时,我们可以用两列组合的方式来形成主键,如上面的这张表,我们就可以用姓名+小组的方式形成主键.这个时候主键的数量还是只有一个,只是这个表的主键是由两类数据组成的(一般情况下不推荐使用此方式!)

表的外键

工号 姓名 性别 级别 部门 部门地址 部门电话
001 张毅 LV.13 销售部 B4 0000-1234
002 小乔 LV.13 销售部 B4 0000-1234
003 艾希 LV.14 人事部 B9 0000-1235
004 阳洋 LV.14 技术部 A3 0001-1111

在上述的表中看似没有什么问题,但是我们发现从部门这一列到部门电话这一列,我们其实可以把他单独的列出一张单独的表格

工号 姓名 性别 级别
001 张毅 LV.13
002 小乔 LV.13
003 艾希 LV.14
004 阳洋 LV.14
部门 部门地址 部门电话
销售部 B4 0000-1234
人事部 B9 0000-1235
技术部 A3 0001-1111

这时,我们就得到了两张表,一张是员工信息表,另一张则是部门信息表,这两张表格实则是联系在一起的,这时我们就可以用到外键将他们关联起来:

工号 姓名 性别 级别 部门编号
001 张毅 LV.13 001
002 小乔 LV.13 001
003 艾希 LV.14 002
004 阳洋 LV.14 003
编号 部门 部门地址 部门电话
001 销售部 B4 0000-1234
002 人事部 B9 0000-1235
003 技术部 A3 0001-1111

在员工信息表中部门编号就是这个表的外键,在部门表中编号就是这个表的主键,利用主外键的关联,我们把这两个表关联在了一起,使用外键的表-员工信息表称为部门表的外键表