博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
主键与外键以及唯一键的选择的依据——情况之一
阅读量:2241 次
发布时间:2019-05-09

本文共 766 字,大约阅读时间需要 2 分钟。

下面我通过一个小栗子来说明我们应该如何选择主键,外键和唯一键。

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

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 ,而不能以邮箱字段为主键

外键:

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

唯一键

刚才我们在需求中说了,我们要用邮箱来注册和登陆,那么肯定需要让邮箱不能重复,并且,我们的邮箱又不是主键,那我们只能将邮箱设置为唯一键了。这样就能满足我们的需求了。

转载地址:http://bvhbb.baihongyu.com/

你可能感兴趣的文章
【linux】nohup和&的作用
查看>>
Set、WeakSet、Map以及WeakMap结构基本知识点
查看>>
【NLP学习笔记】(一)Gensim基本使用方法
查看>>
【NLP学习笔记】(二)gensim使用之Topics and Transformations
查看>>
【深度学习】LSTM的架构及公式
查看>>
【python】re模块常用方法
查看>>
剑指offer 19.二叉树的镜像
查看>>
剑指offer 20.顺时针打印矩阵
查看>>
剑指offer 21.包含min函数的栈
查看>>
剑指offer 23.从上往下打印二叉树
查看>>
Leetcode C++《热题 Hot 100-18》538.把二叉搜索树转换为累加树
查看>>
Leetcode C++《热题 Hot 100-21》581.最短无序连续子数组
查看>>
Leetcode C++《热题 Hot 100-22》2.两数相加
查看>>
Leetcode C++《热题 Hot 100-23》3.无重复字符的最长子串
查看>>
Leetcode C++《热题 Hot 100-24》5.最长回文子串
查看>>
Leetcode C++《热题 Hot 100-28》19.删除链表的倒数第N个节点
查看>>
Leetcode C++《热题 Hot 100-29》22.括号生成
查看>>
阿里云《云原生》公开课笔记 第二章 容器基本概念
查看>>
阿里云《云原生》公开课笔记 第三章 kubernetes核心概念
查看>>
阿里云《云原生》公开课笔记 第四章 理解Pod和容器设计模式
查看>>