数据库主键、外键和唯一键的区别

数据库主键、外键和唯一键的区别

现在我们想建立学生表,用来存储,一个系统的登陆信息。建表如下:

create table student4
(
  stu_id int primary key identity,--identity表示自增
  stu_name nvarchar(10) unique not null,
  stu_sex nchar(1) not null,
  stu_address nvarchar(100) unique not null,
  stu_email nvarchar(50)
 )

我们要求,以后再使用的过程,我们要让大家使用邮箱注册,并通过邮箱来登陆。

主键

根据上面的需求,我们先说主键的选择。
相信大家一看,我们可以使用邮箱登陆,那么邮箱一定是唯一的,那么用邮箱来做主键吧。其实不然,用邮箱做主键还是有问题滴。问题有如下四点。
1、比如,我后期换邮箱呢,那不就惨了吗。
2、如果其他的表已经关联的本学生表的主键——邮箱,那么在我们更换邮箱后,如果不修改其他表中的外键,那么就会报错。如果要是修改的话,可能工作量将会非常的大。
3、另外,在查询邮箱的的时候,搜索速度非常的慢。
4、如果多个表外键利用学生表的主键,那么就会导致空间的浪费。
为此,最好增加一个没有意义的编号为主键,不要 以业务逻辑的字段为主键,,比如,设置一个stu_id ,而不能以邮箱字段为主键。

外键

其他表,如果需要关联学生表,那需要在表中添加外键来关联学生表,那我们首先的是使用学生表中的主键,万不得已在选择唯一键。

唯一键

刚才我们在需求中说了,我们要用邮箱来注册和登陆,那么肯定需要让邮箱不能重复,并且,我们的邮箱又不是主键,那我们只能将邮箱设置为唯一键了。这样就能满足我们的需求了
总的来说,主键唯一标示表中的每一条记录,外键是主键的副本,从父表中复制出来的,用于建立父表和子表之间的关系,唯一键确保表中某一个值得唯一性。主键保证了数据的唯一性,外键保证了数据的完整性。
主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。
外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。

发布了292 篇原创文章 · 获赞 92 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_41924879/article/details/102728228