课堂课题:
什么是外键,用处是什么,为什么不建议使用外键做关联?
关联任务:
任务五
直播时间:
2019-06-28 15:30:00
课堂内容:
视频链接:
PPT链接:
提交按钮:
小课堂内容格式
标题:
【修真院xx(职业)小课堂】课题名称
开场语:
大家好,我是IT修真院XX分院第X期的学员XX,一枚正直纯洁善良的XX程序员,今天给大家分享一下,修真院官网XX(职业)任务X,深度思考中的知识点——XXX
(1)背景介绍:
背景介绍的时候,尽可能的要宽广,讲清楚来龙去脉,讲清楚为什么会需要这个技术。
(2)知识剖析:
讲知识点的时候,尽可能的成体系,学会成体系的去给别人介绍知识。现在很多做的都是零散的,没有分类。
(3)常见问题:
最少列出1个常见问题。
(4)解决方案:
写清楚常见问题的解决方案。
(5)编码实战:
尽可能的去寻找在真实项目中在用的。如果你能找到某个网站在用你说的知识点,这是最好的。学以致用,否则当成练习题就没有意义了。多准备一些demo,讲解过程中将知识点和demo结合,便于大家理解所讲解的知识点。
(6)拓展思考:
知识点之外的拓展思考,由分享人进行讲解,这些东西就是所谓的深度,也是一个人技术水准高低比较的表现。
(7)参考文献:
引入参加文献的时候,在引用的句子后面加上序号【1】。参考文献中列出详细来源。不要去抄别人的东西,这是一个基本的态度。
(8)更多讨论:
Q1:提问人:问题?
A1:回答人(可以是分享人,也可以是其他学员):回答
Q2:提问人:问题?
A2:回答人(可以是分享人,也可以是其他学员):回答
Q3:提问人:问题?
A3:回答人(可以是分享人,也可以是其他学员):回答
(9)鸣谢:
感谢XX、XX师兄,此教程是在他们之前技术分享的基础上完善而成。
(10)结束语:
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~
什么是外键、用处是什么、为什么不建议使用外键做关联?
大家好,我是IT修真院西安分院第6期的学员王鹏,一枚正直纯洁善良的XX程序员,今天给大家分享一下,修真院官网Java任务三,深度思考中的知识点——什么是外键、用处是什么、为什么不建议使用外键做关联?
(1)背景介绍:
关于外键:
MySQL是一个关系型数据库管理系统,也是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。
MySQL中“键”和索引的定义是一样的,所以外键和主键也是索引的一种。
(2)知识剖析:
2.1 什么是外键?
如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。
以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。
外键是相对于主键说的,是建立表之间 的联系的必须的前提。
2.2 外键的作用
保持数据的一致性、完整性。
主要目的是控制存储在外键表中的数据。
使两张表形成关联,外键只能引用外表中的列的值!保证数据的一致性和实现一些级联操作。
主表:以另一个关系的外键作主键的表被称为主表。
从表:具有此外键的表被称为主表的从表
级联操作:主表删除行,连带从表的相关行一起删除;主表修改主键值,连带从表相关行的外键值一起修改。
2.3 外键的使用规范
(1)从表的字段必须与外键类型一致
(2)外键必须是主表的唯一键
(3)有关联的字段
(4)避免使用复合键(也就是说从表能够同一时候引用多个外表的字段作为一个外键,一般不推荐这样的做法)
2.4 为什么不建议使用外键做关联?
外键是能够保证数据的完整性,但会给系统带来很多缺陷。正是因为这些缺陷,才导致不推荐使用外键,具体如下:
(1)性能问题:
假设一张表名为user_tb。那么这张表里有两个外键字段,指向两张表。那么,每次往user_tb表里插入数据,就必须往两个外键对应的表里查询是否有对应数据。如果交由程序控制,这种查询过程就可以控制在我们手里,可以省略一些不必要的查询过程。但是如果由数据库控制,则是必须要去这两张表里判断。
(2)并发问题:
在使用外键的情况下,每次修改数据都需要去另外一个表检查数据,需要获取额外的锁。若是在高并发大流量事务场景,使用外键更容易造成死锁。
(3)扩展性问题:
①做平台迁移方便,比如你从Mysql迁移到Oracle,像触发器、外键这种东西,都可以利用框架本身的特性来实现,而不用依赖于数据库本身的特性,做迁移更加方便。
②分库分表方便,在水平拆分和分库的情况下,外键是无法生效的。将数据间关系的维护,放入应用程序中,为将来的分库分表省去很多的麻烦。
(4)技术问题:
使用外键,其实将应用程序应该执行的判断逻辑转移到了数据库上。那么这意味着一点,数据库的性能开销变大了,那么这就对DBA的要求就更高了。很多中小型公司由于资金问题,并没有聘用专业的DBA,因此他们会选择不用外键,降低数据库的消耗。相反的,如果该约束逻辑在应用程序中,发现应用服务器性能不够,可以加机器,做水平扩展。如果是在数据库服务器上,数据库服务器会成为性能瓶颈,做水平扩展比较困难。
(3)常见问题:
3.1 外键和主键的区别
3.2 外键和索引的区别
3.3 设置外键报错
[1215] Cannot add foreign key constraint
(4)解决方案:
区别1:
定义:主键不能有重复的,不能为Null;外键可以有重复的,可以为Null。
作用:主键用来保证数据完整性;外键用来和其它表建立联系。
个数:主键只能有一个;一个表可以有多个外键。
区别2:
定义:外键可以有重复的,可以为Null;索引没有重复值,可以为Null-会使索引无效。
作用:外键用来和其它表建立联系;索引提高查询排序的速度。
个数:一个表中都可以存在多个。
报错原因:
两张表里要设主键和外键的字段的数据类型或者数据长度不一样。
某个表中已存在记录
(5)编码实战:
Mysql设置外键
语法:Alter table 表名 add [constraint 外键名字] foreign key [外键字段] references 父表(主键字段);
举例:alter table locstock add foreign key locstock_ibfk2(stockid) references product(stockid)
locstock 为表名, locstock_ibfk2 为外键名 第一个括号里填写外键列名, product为表名,第二个括号里是写外键关联的列名
(6)拓展思考:
6.1 什么是数据冗余?
数据冗余是指数据之间的重复,也可以说是同一数据存储在不同数据文件中的现象。
可以说增加数据的独立性和减少数据冗余是企业范围信息资源管理和大规模信息系统获得成功的前提条件。
6.2 关系型数据库与非关系型数据库的区别
(1)关系型数据库通过外键关联来建立表与表之间的关系;
(2)非关系型数据库通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定。
(7)参考文献:
百度百科
CSDN
简书
(8)更多讨论:
(9)结束语:
今天的分享就到这里啦,欢迎大家提问、互相探讨~
技能树.IT修真院“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。
这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧~我的邀请码:35313896,或者你可以直接点击此链接:http://www.jnshu.com/login/1/35313896